thcThought Control

Motion Canvas

TypeScript generator animations with a timeline editor for voice-over sync.

motioncanvas.io ↗repo ↗docs ↗Time events docs ↗Revideo (MIT fork for programmatic rendering) ↗Manim Community ↗manim-mcp (community text-to-animation MCP) ↗

license
MIT. Manim (3b1b and Community editions) is also MIT.
language
TypeScript
backing
Individual: Jacob (aarthificial, YouTube creator) wrote ~645 of the commits; community contributors; no company or foundation.
stars
19,263 (as of 2026-10-09)
downloads
5,566/week npm @motion-canvas/core (api.npmjs.org, 2026-10-01..07). For comparison: manim 45,052/week PyPI (pypistats).
latest release
v3.17.2 (stable); v3.18.0-alpha.0, 2024-12-14
first release
2023-02
borrow

Steal the time-event model for tour narration; the tool itself targets video, not live terminal UIs.

Borrow from it: take a specific idea, API or format.

the steelman: the best honest case for it

Motion Canvas solved the hardest practical problem in programmatic explainers: keeping animation in sync with narration without hard-coded timestamps. Scenes stay honest code (typed, versioned, reviewable), while timing is a separate, draggable JSON layer; re-record the voice-over and you nudge one pill and everything after it follows. Because scenes are deterministic generators, every frame is reproducible and the editor can seek anywhere instantly. For an author who thinks in code but teaches with a voice, it is the most elegant split of 'what' from 'when' in any tool, and its vector rendering looks like hand-made motion design. Manim, its larger cousin, adds a decade of mathematical explainers and an active community.

scores
datadriveseeedittimeratetermpxteachmatureopen
UI as data1 scene 5Scenes are code; only time-event timings live in JSON.
Agent can drive it1 scene 5
Agent can see it2 scene 5Rendered frames are images an agent could inspect.
Small, targeted edits1 scene 5
Time travel3 scene 0Scrubbable deterministic timeline in the editor; not an agent API.
Live data rate0 scene 5
Terminal native0 scene 5
Pixel graphics5 scene 4
Teaching4 scene 3Built for narrated explainer videos with voice-over sync, but output is passive video.
Maturity3 scene 1Used in production by explainer creators; development stalled.
Openness4 scene 4MIT, single-maintainer control.

Motion Canvas scene now scene planned

how agents use it

How

Code generation only: an agent writes TypeScript scenes and can edit the meta JSON of time events. No MCP server or control API found. For Manim, community MCP servers (e.g. paulnegz/manim-mcp) wrap LLM text-to-scene generation and rendering.

Wiring it in

Generate scene files, run the Vite editor or a render, inspect output frames.

Seeing the result

Rendered frames/video only; no structured scene-graph readback API for an external agent.

Small edits

Edit source or the time-events JSON; hot reload picks it up. No id-addressed live patching.

History

Deterministic timeline means any frame can be re-derived; scrubbing is human-facing in the editor.

In short

Great for agents that write code and render; nothing for driving a live instance.

architecture

Scenes are TypeScript generator functions: each `yield*` advances time, so an animation is a deterministic program over a frame clock. A Vite-based editor previews in real time and lets you scrub a timeline. Time events (`waitUntil('event')`, `useDuration('event')`) are named pauses whose timing is set by dragging pills in the editor and stored in a JSON meta file beside the scene, so audio sync is data, not code. Rendering is 2D canvas (vector shapes, text, LaTeX, code blocks with diff animations); export is image sequences or video via plugins.

performance

No published numbers. Rendering is offline-to-video; live preview speed is not benchmarked publicly.

adoption and upkeep

Adoption

Well-known among explainer-video creators (19k stars) but small install base; Manim (94.8k stars 3b1b, 41.4k Community) dominates the code-animation niche.

Used by: aarthificial's YouTube explainers, Revideo (fork, 4.1k stars)

Maintainability

Effectively dormant for ~20 months; usable but not moving. Manim Community, by contrast, released v0.22.0 on 2026-10-08.

Releases: Stalled: v3.17.0 2024-08-13, v3.17.1 2024-08-17, v3.17.2 2024-12-14, v3.18.0-alpha.0 2025-02-16; none since. · Contributors: ~98 (GitHub contributors incl. anonymous, via Link header) · Recent: 0 commits since 2026-07-11; the only 2025-2026 commit after Feb 2025 is a docs-domain update (2026-07-02). · Bus factor: low: one author wrote the large majority of commits and activity stopped in Feb 2025.

weaknesses
and thc-scene

Overlap

Narrated walkthroughs driven by a timeline; deterministic replay of a pure program over time.

What scene would be reinventing

Syncing narration to visual steps; Motion Canvas's time events already model this cleanly (named waits, adjustable durations, ripple editing).

The gap it leaves

A live, interactive, agent-driven UI the learner can take over in a terminal; Motion Canvas produces video and has no runtime control.

What to borrow

  • Named time events stored as data beside the tour: `waitUntil(name)` with timings editable without touching the script.
  • Ripple semantics: moving one event shifts all later events unless held.
  • Deterministic seek by re-running from the start (or a checkpoint) to frame N.
sources
  1. Motion Canvas docs: Introduction motioncanvas.io
  2. Motion Canvas docs: Time Events motioncanvas.io
  3. GitHub API: motion-canvas/motion-canvas api.github.com
  4. Meta file timeEvents example (Ahmad Rosid tutorial) ahmadrosid.com
  5. HN: Revideo fork discussion news.ycombinator.com
  6. npm downloads @motion-canvas/core api.npmjs.org
  7. pypistats manim pypistats.org
  8. paulnegz/manim-mcp github.com