---
name: explainer
description: Turn a PDF, an article URL, or pasted notes into a source-grounded narrated explainer video. Use when the video must stay faithful to a document. Frames are 16:9, 9:16, or 1:1. Lengths are 30, 60, 90, or 180 seconds. Styles are editorial, blueprint, swiss, chalkboard, or match.
---

# Explainer

You are an agent making a WatchRecap explainer. Follow this file. Do not invent a different pipeline.

The video is a narrated film whose pictures and numbers come from one source. Run it from `pipeline/` in the WatchRecap repo, with `pipeline/.venv` (create it with `./scripts/setup.sh` from the repo root). `OPENROUTER_API_KEY` must be set in the repo `.env`.

## Make it

One source only: a PDF path, or `--url`, or `--text`.

```
.venv/bin/python cli.py path/to/paper.pdf --seconds 60 --format 16:9 --style editorial
.venv/bin/python cli.py --url https://example.com/article --seconds 90 --format 9:16 --style blueprint
.venv/bin/python cli.py --text "The notes to explain." --seconds 30 --format 1:1 --style swiss
```

- `--seconds` is 30, 60, 90, or 180.
- `--format` is `16:9` (1920×1080), `9:16` (1080×1920), or `1:1` (1080×1080).
- `--style` is `editorial`, `blueprint`, `swiss`, `chalkboard`, or `match`. `match` takes colors from figures in a PDF; without figures it falls back to editorial.
- `--audience "who will watch"` tunes the vocabulary. Optional.
- `--out DIR` chooses the output folder. Default is `out/<id>`.

Stop after the script when a person should approve the storyboard before anything is drawn:

```
.venv/bin/python cli.py path/to/paper.pdf --seconds 60 --format 9:16 --style editorial --stop-after-script
.venv/bin/python cli.py --continue out/<id> --format 9:16 --style editorial
```

Read `script.json` and `transcript.txt` in that folder before continuing. Every number and name in the narration has to be in the source. If a line is wrong, fix the script, do not paper over it in the picture.

## What you get

`video.mp4` in the run folder: picture plus narration. The picture is an SVG driven by `window.__seek(t)`, a pure function of time. The voice is Gemini TTS, timed from the script.

## Do not

- Do not add facts, statistics, or names that are not in the source.
- Do not use this skill for a topic with no document. That is the cinematic skill.
- Do not use this skill to film a live app. That is the promo skill.
