research-method-video
A sub-capability of weekly-research-slides. It turns a method semantic
model into a concise visual explainer rendered with Manim Community Edition.
Primary use case:
researcher reads a paper
-> method semantic model
-> concise visual explainer
-> play the clip in a lab meeting, or reuse frames in PowerPoint
The video is a silent visual explanation (the researcher narrates live). It is
not an animated slide deck, a zooming paper figure, or a narrated slideshow.
Core rule: transform objects, not slides
Never do FadeOut(scene); FadeIn(scene) when the same scientific object
continues. Maintain object identity and move/morph it:
a feature appears -> moves through the model -> is cached -> goes stale
-> a predictor appears next to it -> the predicted feature moves to the next step
Use Transform, ReplacementTransform, TransformMatchingShapes,
TransformFromCopy, MoveToTarget, animate.shift/move_to/scale over repeated
fade-out/fade-in.
Workflow
Understand the method. Read the actual paper/notes with your document
tools. Do not build a PDF parser. Write method_model.yaml (schema in
schemas/method_model.schema.json): problem, baseline, key observation,
assumption/failure of previous methods, motivation, mechanism, components,
equations, training, inference, claims, assumptions, limitations,
relation_to_our_work. This model is shared with the slide pipeline.
Storyboard before code. Write storyboard.md: for each scene give the
scientific purpose, the question answered, actors, start state, animation
beats, end state, speaker intent, and transition. Pick only the stages the
method needs (problem -> why previous fails -> key observation -> new idea ->
mechanism -> why it works -> assumption/weakness). Do not follow paper
section order.
Scene spec + narration. Write scene_spec.yaml (schema in
schemas/scene_spec.schema.json): scenes, persistent actors with stable ids,
explanation beats with a motion pattern, start/end state, and one
keyframe per scene for the PowerPoint bridge. Write the narration script at
the same time, linked to the beats (transcript/transcript.yaml). Review the
words and the visuals together before animating. See
references/narration-writing.md.
Build the transcript. Derive deterministic timings and all transcript
artifacts from the authored script:
python scripts/build_transcript.py --project examples/lesa --audience adjacent-researcher
python scripts/qa_transcript.py --project examples/lesa
Produces narration.md, transcript.json, transcript.srt,
transcript.vtt, word_times.json and speaker_notes.yaml.
Implement scenes. One Manim scene per file under src/scenes/, registered
in src/main.py from scene_spec.yaml. Reuse src/theme.py,
src/actors.py and src/patterns.py (the shared visual grammar). Scenes read
transcript-derived dwell through src/timing.py (timing.tail,
timing.beat_dwell) so silent pacing follows the script.
Render, inspect, revise. Draft render is cheap; render one scene while
iterating. Always extract frames and look at them before a final render.
python skills/research-method-video/scripts/video_doctor.py
python skills/research-method-video/scripts/render_scene.py --project examples/lesa --scene lesa_03_stage_dynamics --quality draft
python skills/research-method-video/scripts/render_scene.py --project examples/lesa --quality draft --concat examples/lesa/renders/draft/lesa-method-explainer.mp4
python skills/research-method-video/scripts/qa_video.py --input examples/lesa/renders/draft/lesa-method-explainer.mp4 --output examples/lesa/qa
python skills/research-method-video/scripts/lint_scenes.py --project examples/lesa
Export for PowerPoint.
python skills/research-method-video/scripts/export_keyframes.py --project examples/lesa --quality final
Writes qa/keyframes/<scene>.png and qa/keyframes.yaml. The slide pipeline
can use a keyframe as a method-summary slide, or insert the MP4.
Transcript and narration modes
- silent (default): no audio; the script sets per-beat dwell and scene holds.
Best for weekly meetings where the researcher narrates live.
- tts: local synthesis (macOS
say, or pyttsx3). No cloud account required.
- recorded: align a recorded reading to the canonical text with WhisperX
when installed, else a clearly-labelled estimate. The text is never replaced
by ASR output.
python scripts/render_scene.py --project examples/lesa --timing transcript
python scripts/export_subtitles.py --project examples/lesa
python scripts/tts_narration.py --project examples/lesa --voice Samantha
python scripts/align_recording.py --project examples/lesa --audio narration.wav
python scripts/mux_narration.py --project examples/lesa --quality final
python scripts/export_speaker_notes.py --project examples/lesa
Animation vocabulary
ESTABLISH, TRACE, BUILD, MORPH, FOCUS, COMPARE, TRAJECTORY, STAGE-SPLIT, ACCUMULATION, CORRECTION, REPLAY, REVEAL, ZOOM, RECAP. Each communicates a
scientific meaning; do not animate decoratively. See
references/manim-visual-grammar.md.
When NOT to make a video
If movement adds no explanatory value, use a static diagram. A video is worth it
when a representation changes through time, when an algorithm iterates, or when
the ordering of a multi-stage process is the point.
Read next
references/video-explainer.md — the end-to-end pipeline and file formats.
references/narration-writing.md — writing for listening.
references/transcript-schema.md — transcript artifacts and structure.
references/video-pacing.md — script-derived pacing and dwell.
references/audio-alignment.md — TTS and forced alignment.
references/video-storytelling.md — act structure, aha moment, camera, text.
references/manim-visual-grammar.md — actors, patterns, shared palette.
references/video-qa.md — animation lint, frame QA, the render loop.
Requirements
Python 3.11-3.13, Manim Community Edition, ffmpeg. LaTeX is optional (v0.1 uses
Pango Text with composed sub/superscripts). requirements.txt pins the rest.
1---2name: research-method-video3description: Turn a research method into a short 3Blue1Brown-style visual explainer video with Manim. Use when a method mechanism is hard to understand statically, when a representation changes through time (iterative algorithms, diffusion, temporal caching, attention, optimization dynamics, multi-stage processes), or when the user asks to animate a method, make a method explainer clip for a lab meeting, or turn a paper's method into a video. Produces persistent scientific objects, animated transformations, an MP4, and PowerPoint-ready keyframes. Not for generic YouTube videos, narration, or avatar presenters.4license: MIT5---67# research-method-video89A sub-capability of **weekly-research-slides**. It turns a *method semantic10model* into a concise visual explainer rendered with Manim Community Edition.1112Primary use case:1314```text15researcher reads a paper16 -> method semantic model17 -> concise visual explainer18 -> play the clip in a lab meeting, or reuse frames in PowerPoint19```2021The video is a silent visual explanation (the researcher narrates live). It is22**not** an animated slide deck, a zooming paper figure, or a narrated slideshow.2324## Core rule: transform objects, not slides2526Never do `FadeOut(scene); FadeIn(scene)` when the same scientific object27continues. Maintain object identity and move/morph it:2829```text30a feature appears -> moves through the model -> is cached -> goes stale31-> a predictor appears next to it -> the predicted feature moves to the next step32```3334Use `Transform`, `ReplacementTransform`, `TransformMatchingShapes`,35`TransformFromCopy`, `MoveToTarget`, `animate.shift/move_to/scale` over repeated36fade-out/fade-in.3738## Workflow39401. **Understand the method.** Read the actual paper/notes with your document41 tools. Do not build a PDF parser. Write `method_model.yaml` (schema in42 `schemas/method_model.schema.json`): problem, baseline, key observation,43 assumption/failure of previous methods, motivation, mechanism, components,44 equations, training, inference, claims, assumptions, limitations,45 relation_to_our_work. This model is shared with the slide pipeline.46472. **Storyboard before code.** Write `storyboard.md`: for each scene give the48 scientific purpose, the question answered, actors, start state, animation49 beats, end state, speaker intent, and transition. Pick only the stages the50 method needs (problem -> why previous fails -> key observation -> new idea ->51 mechanism -> why it works -> assumption/weakness). Do not follow paper52 section order.53543. **Scene spec + narration.** Write `scene_spec.yaml` (schema in55 `schemas/scene_spec.schema.json`): scenes, persistent actors with stable ids,56 explanation beats with a motion `pattern`, start/end state, and one57 `keyframe` per scene for the PowerPoint bridge. Write the narration script at58 the same time, linked to the beats (`transcript/transcript.yaml`). Review the59 words and the visuals together before animating. See60 `references/narration-writing.md`.61624. **Build the transcript.** Derive deterministic timings and all transcript63 artifacts from the authored script:6465 ```bash66 python scripts/build_transcript.py --project examples/lesa --audience adjacent-researcher67 python scripts/qa_transcript.py --project examples/lesa68 ```6970 Produces `narration.md`, `transcript.json`, `transcript.srt`,71 `transcript.vtt`, `word_times.json` and `speaker_notes.yaml`.72735. **Implement scenes.** One Manim scene per file under `src/scenes/`, registered74 in `src/main.py` from `scene_spec.yaml`. Reuse `src/theme.py`,75 `src/actors.py` and `src/patterns.py` (the shared visual grammar). Scenes read76 transcript-derived dwell through `src/timing.py` (`timing.tail`,77 `timing.beat_dwell`) so silent pacing follows the script.78796. **Render, inspect, revise.** Draft render is cheap; render one scene while80 iterating. Always extract frames and look at them before a final render.8182 ```bash83 python skills/research-method-video/scripts/video_doctor.py84 python skills/research-method-video/scripts/render_scene.py --project examples/lesa --scene lesa_03_stage_dynamics --quality draft85 python skills/research-method-video/scripts/render_scene.py --project examples/lesa --quality draft --concat examples/lesa/renders/draft/lesa-method-explainer.mp486 python skills/research-method-video/scripts/qa_video.py --input examples/lesa/renders/draft/lesa-method-explainer.mp4 --output examples/lesa/qa87 python skills/research-method-video/scripts/lint_scenes.py --project examples/lesa88 ```89906. **Export for PowerPoint.**9192 ```bash93 python skills/research-method-video/scripts/export_keyframes.py --project examples/lesa --quality final94 ```9596 Writes `qa/keyframes/<scene>.png` and `qa/keyframes.yaml`. The slide pipeline97 can use a keyframe as a method-summary slide, or insert the MP4.9899## Transcript and narration modes100101- **silent** (default): no audio; the script sets per-beat dwell and scene holds.102 Best for weekly meetings where the researcher narrates live.103- **tts**: local synthesis (macOS `say`, or pyttsx3). No cloud account required.104- **recorded**: align a recorded reading to the canonical text with WhisperX105 when installed, else a clearly-labelled estimate. The text is never replaced106 by ASR output.107108```bash109python scripts/render_scene.py --project examples/lesa --timing transcript110python scripts/export_subtitles.py --project examples/lesa111python scripts/tts_narration.py --project examples/lesa --voice Samantha112python scripts/align_recording.py --project examples/lesa --audio narration.wav113python scripts/mux_narration.py --project examples/lesa --quality final114python scripts/export_speaker_notes.py --project examples/lesa115```116117## Animation vocabulary118119`ESTABLISH, TRACE, BUILD, MORPH, FOCUS, COMPARE, TRAJECTORY, STAGE-SPLIT,120ACCUMULATION, CORRECTION, REPLAY, REVEAL, ZOOM, RECAP`. Each communicates a121scientific meaning; do not animate decoratively. See122`references/manim-visual-grammar.md`.123124## When NOT to make a video125126If movement adds no explanatory value, use a static diagram. A video is worth it127when a representation changes through time, when an algorithm iterates, or when128the ordering of a multi-stage process is the point.129130## Read next131132- `references/video-explainer.md` — the end-to-end pipeline and file formats.133- `references/narration-writing.md` — writing for listening.134- `references/transcript-schema.md` — transcript artifacts and structure.135- `references/video-pacing.md` — script-derived pacing and dwell.136- `references/audio-alignment.md` — TTS and forced alignment.137- `references/video-storytelling.md` — act structure, aha moment, camera, text.138- `references/manim-visual-grammar.md` — actors, patterns, shared palette.139- `references/video-qa.md` — animation lint, frame QA, the render loop.140141## Requirements142143Python 3.11-3.13, Manim Community Edition, ffmpeg. LaTeX is optional (v0.1 uses144Pango `Text` with composed sub/superscripts). `requirements.txt` pins the rest.