AI Skill Report Card

Creating Motion Graphics Videos

A-83·Oct 21, 2026·Source: Web
14 / 15

Given a request like: "Make a 15-second video showing a seed growing into a tree, with text 'Growth takes time' appearing at the end"

Produce a working Manim (or Remotion) scene immediately:

Python
from manim import * class SeedToTree(Scene): def construct(self): seed = Dot(color=BROWN).scale(2) self.play(FadeIn(seed)) self.wait(0.5) tree = SVGMobject("tree.svg").scale(0.1) self.play(Transform(seed, tree), run_time=3) self.play(seed.animate.scale(10), run_time=2) text = Text("Growth takes time").to_edge(DOWN) self.play(Write(text)) self.wait(1)

Render: manim -pql scene.py SeedToTree

Default to Manim for conceptual/explainer/data-driven content and Remotion (React) for UI-style, brand, or social-media motion graphics. Pick one and commit — don't ask the user to choose unless they specify a platform.

Recommendation▾
Add a concrete Remotion code example (currently only described, not shown) to balance the Manim-heavy coverage
14 / 15

Progress checklist for every request:

  • Extract the narrative beats from the English description
  • Define duration, pacing, and scene breakdown
  • Choose framework (Manim / Remotion / After Effects via JSX / FFmpeg composite)
  • Map each beat to visual primitives (shapes, text, icons, transitions)
  • Write the scene code, one function/class per beat
  • Add timing, easing, and transitions between beats
  • Render preview at low quality first
  • Review against the original story for missing emotional/narrative beats
  • Render final at target resolution/fps

1. Parse the Story into Beats

Break any scenario into: Setup → Rising action → Turning point → Resolution. Each beat = one scene/sequence, typically 2-5 seconds. Identify:

  • What's on screen (objects, text, characters)
  • What changes (the animation/transform)
  • What it means (the narrative purpose — keep this to guide pacing)

2. Choose the Framework

NeedFramework
Math/data/diagrams/explainersManim
Web-native, React devs, social templatesRemotion
Photorealistic/compositing/particlesAfter Effects scripting (ExtendScript) or Blender Python API
Quick stitched clips/text overlaysFFmpeg + simple filters

Default: Manim for concept explainers, Remotion for marketing/social content.

3. Map Beats to Primitives

  • Objects/characters → SVGMobject, ImageMobject, shapes, or imported assets
  • Emotion/emphasis → color, scale, camera focus, easing curves (rate_func=smooth, there_and_back)
  • Time passing → Transform, FadeTransform, crossfades
  • Text reveals → Write, AddTextLetterByLetter, typewriter effects in Remotion

4. Build Scene-by-Scene Code

One class/component per beat. Keep scenes modular so they can be re-ordered or re-timed without rewriting.

5. Timing & Pacing

  • Default pacing: 1 beat ≈ 3-6 seconds unless story implies urgency/slowness
  • Add self.wait() buffers between major beats (0.3-1s)
  • Use easing (rate_func) — never linear motion for organic content; linear is fine for mechanical/data motion

6. Render Iteratively

Always render a low-quality draft first (-ql in Manim, low-res preview in Remotion) to validate timing before committing to final render.

Recommendation▾
Include a 'bad outcome' example (e.g., overly literal or poorly-paced animation) to contrast with good outputs
15 / 20

Example 1: Input: "A character is lost in a maze, feels frustrated, then finds the exit and feels relieved. 10 seconds." Output: Manim scene with 3 sub-scenes — maze line-drawing animation (3s), character dot pathing through maze with jittery rate_func=there_and_back_with_pause motion to convey frustration (4s), then smooth exit glide + color shift from gray to warm yellow + "Found it" text fade-in (3s).

Example 2: Input: "Show our app's 3 features sliding in one by one, branded in blue and white, for Instagram." Output: Remotion composition, 1080x1920 vertical, 3 <Sequence> components each with a feature icon + label sliding in via spring() easing, blue (#1E3A8A) background, consistent 0.5s overlap between sequences for smooth pacing, total 9 seconds.

Example 3: Input: "A seed grows into a tree over time, ending with text 'Growth takes time'" Output: See Quick Start scene above — Manim, 7 seconds, Transform-based growth + scale-up + text reveal.

Recommendation▾
Expand on rendering/output specifics like file formats, resolution defaults, and handling errors in rendering pipelines
  • Always convert vague emotional language ("frustrated," "triumphant") into concrete animation parameters (speed, easing, color, camera shake) — don't leave it abstract in code comments.
  • Keep each beat as an isolated, renderable unit so the user can request changes to one part without re-rendering everything.
  • Default to clean, minimal color palettes (2-3 colors) unless branding is specified.
  • Match animation duration to reading time for any on-screen text (minimum ~0.05s/character plus 1s buffer).
  • Use consistent easing families within one video — don't mix overly bouncy and purely linear motion unless intentional.
  • State your framework choice and the beat breakdown briefly before/with the code so the user can request restructuring cheaply.
  • Don't render at final quality before confirming timing — wastes time on re-renders.
  • Don't cram the entire story into one continuous animation function — breaks modularity and makes edits expensive.
  • Don't ignore implied duration/pacing cues in the story (e.g., "slowly realizes" implies eased, slower motion, not a snap transform).
  • Don't default to linear motion for anything meant to feel organic or emotional.
  • Don't over-engineer with 3D/physics sims when a 2D vector animation conveys the story just as well — match tool complexity to the ask.
0
Grade A-AI Skill Framework
Scorecard
Criteria Breakdown
Quick Start
14/15
Workflow
14/15
Examples
15/20
Completeness
16/20
Format
15/15
Conciseness
13/15