---
name: "motion_graphics_basics"
description: "Create simple motion graphics with open-source tools: keyframed lower thirds, animated titles, and kinetic typography. Use when asked to animate text or shapes, build a lower third, add motion to a title card, or render kinetic typography without After Effects."
metadata: { "includeInPrompt": true }
---

# Motion Graphics Basics

## Purpose
Produce simple, professional motion graphics using only open-source tools: keyframed animation of text and shapes, lower thirds, animated title cards, and kinetic typography. The primary engine is Blender driven headlessly through its Python API (`bpy`) — scriptable, reproducible, no GUI needed. Natron covers node-based compositing; OGRAF/HTML5 covers broadcast-graphics templates.

## Workflow

### 1. Pick the tool for the job
- **Blender (headless `bpy`)** — default choice. Keyframed text/shapes, eased motion, transparent renders. Fully scriptable; `bin/lower_third.py` is the reference implementation. Use for: lower thirds, title cards, kinetic type sequences, animated shapes.
- **Natron** — node-graph compositing (Transform/Roto keyframing, Curve editor). Use for: compositing motion graphics over footage, when a node workflow fits better than a 3D scene. GUI-first; see `references/tool-landscape.md`.
- **OGRAF / HTML5 templates** — use for reusable broadcast graphics (lower thirds, scoreboards, tickers) that must deploy across renderers. EBU open standard; open-source authoring via Zero Density's OGraf Studio. See `references/tool-landscape.md`.

### 2. Write a timing plan before animating
Every graphic gets: in-animation → hold → out-animation, in frames. Defaults (30 fps): in 12–24 frames (0.4–0.8 s), hold as long as the beat needs, out 12–24 frames. See `references/keyframes-and-easing.md` for the timing-plan template and easing rules. Never skip this step — unplanned motion looks amateur.

### 3. Animate with keyframes + easing
- Keyframe position, scale, rotation, and opacity — never more properties than the design needs.
- Default interpolation: **Bezier with EASE_IN_OUT** (or EASE_OUT for entrances). **Never ship linear interpolation** on visible motion — it looks robotic. See `references/keyframes-and-easing.md`.
- Stagger related elements (bar → title → subtitle) by 4–8 frames so motion cascades instead of firing all at once.

### 4. Render transparent, composite with ffmpeg
- Render RGBA (transparent film) as a PNG sequence from Blender, then assemble with ffmpeg. Verified alpha-preserving master:
  `ffmpeg -framerate 30 -i frame_%04d.png -c:v png -pix_fmt rgba lower_third.mov`
  (QuickTime PNG codec keeps the alpha channel — confirmed via `alphaextract`.)
  For previews, composite over a background: overlay the PNG sequence on a color source and encode H.264/VP9.
  Note: VP9-in-WebM silently drops alpha on stock ffmpeg builds even with `-pix_fmt yuva420p` — never use `.webm` as the alpha master.
- Keep everything title-safe: content inside a ~5% inset from each edge.

### 5. Kinetic typography
Reveal text word-by-word or phrase-by-phrase synced to the voiceover beat; one idea per beat; hierarchy through size/weight/color, not decoration. Full rules in `references/kinetic-typography-and-lower-thirds.md`.

## Output Contract
- A rendered file: an alpha-preserving master (`.mov`, PNG codec) and/or a flattened preview (`.mp4`, `.webm`), at a stated resolution/fps — or a reusable template/script.
- Every deliverable states: resolution, fps, duration, in/hold/out timing, and the tool used.
- Text legible at the target size (names ~48–60 px, supporting text ~28–36 px at 1080p), high contrast, no hairline strokes.

## Operating Rules
1. Open-source tools only for the core build (Blender, Natron, ffmpeg, OGRAF tooling). Proprietary tools (After Effects, Remotion — which is not fully open source) may be named as alternatives, never as the build path.
2. No linear interpolation on visible motion — Bezier + easing, always.
3. Verify renders: open the output and check at least the first, middle, and last frames for legibility, safe margins, and correct timing. Fix and re-render rather than shipping a broken file.
4. Keep SKILL.md-level claims verifiable: tool capabilities and license terms come from primary sources (see `scratch/motion-graphics-basics-sources.md` in skill-production). Unverifiable = cut or frame as opinion.
5. `bin/lower_third.py` is the tested reference — extend it before writing a new Blender script from scratch.
