ManimCommunity / ManimCommunity/manim

Mobject created from TransformFromCopy has no start

Open
#4,510 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
40.9k
Forks
3.1k
Avg merge
3d 12h
Merged PRs (30d)
25

Description

## Description of bug / unexpected behavior
Mobjects being drawn to the screen by `TransformFromCopy` with the source mobject being `Text` or `Tex` seem to have no points when `mobject.get_start()` is run and it throws an Exception. I tested it with the source beign some others and it worked fine.

## Expected behavior
Well, it's not supposed to throw an exception...

## How to reproduce the issue
Code for reproducing the problem

```py
from manim import *

class Main(Scene):
def construct(self):
mobject = Circle()
text = Text("Hello, World!")
self.add(text)
self.play(TransformFromCopy(text, mobject))
print(f"points: {mobject.get_all_points()}") # this works fine
print(f"start: {mobject.get_start()}") # this fails for some reason
```

## Additional media files

Images/GIFs
None ☹️

## Logs
Terminal output

☝️: The logs include the print message for the points of the mobject, these are obviously not part of the actual logs.

```
~> manim -ql -v DEBUG ./main.py Main
```
```
Manim Community v0.19.1

[12/12/25 18:05:22] DEBUG Hashing ... hashing.py:360
DEBUG Hashing done in 0.014841 s. hashing.py:372
DEBUG Hash generated : 1584795214_3128665868_2853280237 hashing.py:375
INFO Animation 0 : Using cached data (hash : 1584795214_3128665868_2853280237) cairo_renderer.py:94
DEBUG List of the first few animation hashes of the scene: ['1584795214_3128665868_2853280237'] cairo_renderer.py:103
points: [[ 1.00000000e+00 0.00000000e+00 0.00000000e+00]
[ 1.00000000e+00 4.42027483e-02 0.00000000e+00]
[ 9.97073421e-01 8.81037584e-02 0.00000000e+00]
...
[ 1.00000000e+00 -2.44929360e-16 0.00000000e+00]
[ 1.00000000e+00 -2.44929360e-16 0.00000000e+00]
[ 1.00000000e+00 -2.44929360e-16 0.00000000e+00]]
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/user/Projects/testing_Manim/.venv/lib/python3.12/site-packages/manim/cli/render/commands.p │
│ y:125 in render │
│ │
│ 122 │ │ │ try: │
│ 123 │ │ │ │ with tempconfig({}): │
│ 124 │ │ │ │ │ scene = SceneClass() │
│ ❱ 125 │ │ │ │ │ scene.render() │
│ 126 │ │ │ except Exception: │
│ 127 │ │ │ │ error_console.print_exception() │
│ 128 │ │ │ │ sys.exit(1) │
│ │
│ /home/user/Projects/testing_Manim/.venv/lib/python3.12/site-packages/manim/scene/scene.py:260 in │
│ render │
│ │
│ 257 │ │ """ │
│ 258 │ │ self.setup() │
│ 259 │ │ try: │
│ ❱ 260 │ │ │ self.construct() │
│ 261 │ │ except EndSceneEarlyException: │
│ 262 │ │ │ pass │
│ 263 │ │ except RerunSceneException: │
│ │
│ /home/user/Projects/testing_Manim/main.py:11 in construct │
│ │
│ 8 │ │ self.add(text) │
│ 9 │ │ self.play(TransformFromCopy(text, line)) │
│ 10 │ │ print(f"points: {line.get_all_points()}") # this works fine │
│ ❱ 11 │ │ print(line.get_start()) # this fails for some reason │
│ 12 │
│ │
│ /home/user/Projects/testing_Manim/.venv/lib/python3.12/site-packages/manim/mobject/geometry/arc. │
│ py:297 in get_start │
│ │
│ 294 │ │ if self.has_start_tip(): │
│ 295 │ │ │ return self.start_tip.get_start() │
│ 296 │ │ else: │
│ ❱ 297 │ │ │ return super().get_start() │
│ 298 │ │
│ 299 │ def get_length(self) -> float: │
│ 300 │ │ start, end = self.get_start_and_end() │
│ │
│ /home/user/Projects/testing_Manim/.venv/lib/python3.12/site-packages/manim/mobject/mobject.py:22 │
│ 87 in get_start │
│ │
│ 2284 │ │
│ 2285 │ def get_start(self) -> Point3D: │
│ 2286 │ │ """Returns the point, where the stroke that surrounds the :class:`~.Mobject` sta │
│ ❱ 2287 │ │ self.throw_error_if_no_points() │
│ 2288 │ │ return np.array(self.points[0]) │
│ 2289 │ │
│ 2290 │ def get_end(self) -> Point3D: │
│ │
│ /home/user/Projects/testing_Manim/.venv/lib/python3.12/site-packages/manim/mobject/mobject.py:32 │
│ 03 in throw_error_if_no_points │
│ │
│ 3200 │ def throw_error_if_no_points(self) -> None: │
│ 3201 │ │ if self.has_no_points(): │
│ 3202 │ │ │ caller_name = sys._getframe(1).f_code.co_name │
│ ❱ 3203 │ │ │ raise Exception( │
│ 3204 │ │ │ │ f"Cannot call Mobject.{caller_name} for a Mobject with no points", │
│ 3205 │ │ │ ) │
│ 3206 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
Exception: Cannot call Mobject.get_start for a Mobject with no points
```

## System specifications

System Details

- OS (with version, e.g., Windows 10 v2004 or macOS 10.15 (Catalina)): Debian 6.12.57-1 (2025-11-05) x86_64 GNU/Linux
- RAM: 64 GB DDR 5
- Python version (`python/py/python3 --version`): Python 3.12.12
- I use UV for a virtual environment: uv 0.9.9
- Installed modules (provide output from `pip list`):
- I used uv pip list, as I don't have a global installation of pip
```
Package Version
----------------- -------
av 13.1.0
beautifulsoup4 4.14.3
click 8.3.1
cloup 3.0.8
decorator 5.2.1
glcontext 3.0.0
isosurfaces 0.1.2
manim 0.19.1
manimpango 0.6.1
mapbox-earcut 2.0.0
markdown-it-py 4.0.0
mdurl 0.1.2
moderngl 5.12.0
moderngl-window 3.1.1
networkx 3.6
numpy 2.3.5
pillow 12.0.0
pycairo 1.29.0
pydub 0.25.1
pyglet 2.1.11
pyglm 2.8.3
pygments 2.19.2
rich 14.2.0
scipy 1.16.3
screeninfo 0.8.1
skia-pathops 0.9.0
soupsieve 2.8
srt 3.5.3
svgelements 1.9.6
tqdm 4.67.1
typing-extensions 4.15.0
watchdog 6.0.0
```

LaTeX details

+ LaTeX distribution (e.g. TeX Live 2020): texlive-full (from the apt repos)
+ Installed LaTeX packages:
None:
```
(running on Debian, switching to user mode!)
(see /usr/share/doc/texlive-base/README.tlmgr-on-Debian.md)
TLPDB: not a directory, not loading: /home/user/texmf
tlmgr: user mode not initialized, please read the documentation!
```

## Additional comments

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure with the provided Scene and TransformFromCopy example, then inspect manim/mobject/geometry/arc.py and manim/mobject/mobject.py at get_start and throw_error_if_no_points. Compare the resulting points for Text or Tex sources with other source mobjects. Done means the reported reproduction no longer raises an exception when get_start() is called after the animation.

Written by the indexing model from the issue text.

Assessment

Tech stack
latex, python
Domain
computer-graphics
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.