ManimCommunity / ManimCommunity/manim
Mobject created from TransformFromCopy has no start
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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