GitHub repo to explainer video
The person gives you a GitHub repo (a link, or its README). You deliver a 30–60 s video that explains what the repo gives its users, in the project's own brand: a generated, stylized world that acts out what it does, a narrator, titles and chips that name the real things it ships, captions, and an end card with how to get it.
The backbone is workflow-script-to-video with voiceover only (nobody speaks on screen),
plus the compositor for every word on screen. Rounds and deliverables follow the core
skill.
Steps
- Read the repo, not just the README. Fetch the README and what it links that
carries the product: the docs or module index, the main entry file, the latest
release notes, the commit log of the area the pitch is about. Write down the facts
that go on screen: the project's exact name and casing, the install or run command
verbatim, counts (modules, stars) with the date you read them, the licence, and the
5 to 8 named parts a viewer should remember. Check every claim in the brief
against the repo. Save the README and the files you used in
source/. - Capture the brand (
guide-capture-a-brand): route A from the project's homepage link, route C (the repo's language colours, a mono plus a sans) when there is no site. Note the site's signature element (a terminal window, a code card, a chip style). - Script and shot list. About 2.7 words a second: 110 to 120 words for 45 s. One idea per line, each naming a real part of the repo. A metaphor world carries the pictures (a town where each shop is a module, a workshop, a kitchen): each part gets a place or an object in it, and one small recurring character plays the user or the user's agent. Shots of 2 to 6 s, one per line or half-line; three quick 2 s shots make an "it does all of this" montage. The facts go on screen, not in the pictures. Gate: the script and shot list.
- Look (
nano-banana-prompt-format): three style frames of the opening shot in three stylized looks, identical scene text. Gate: a pick. Then a 2x2 turnaround of the character from the picked frame, with anything unwanted (a mouth, a logo) stated as the clean state, cut into single views (python-split-character-sheet). - Voice (
guide-cast-a-voice): three auditions on the first two lines. Gate: a pick. Then the whole script in one take on the with-timestamps TTS (elevenlabs-tts-v4), so the alignment gives the word times. Respell what the voice would misread (README as "read-me", CLI names, version numbers), and check the take with awhisper-clitranscript: every word, no tag read aloud. - Stills: one per shot, the style frame and the character views as references, the camera, positions and the way the character faces written out. Gate: one approval page, each shot's line beside its still; flag what you'd change rather than silently re-rolling.
- Animate every shot at once (
h3-max-image-to-video, prompts perh3-prompt-format), a little longer than its window. Give the character a motion that fits its material (a wind-up toddle for a tin toy). Check each clip's first, middle and last frames on one sheet. - Rough cut (ffmpeg, in a script so a re-rendered shot drops in by re-running it):
each shot starts at its phrase (alignment time minus about 0.1 s), a short clip holds
on its last frame, the voice over the clips' own sound at about a fifth, loudness to
−16 LUFS (
ffmpeg-normalize-loudness), and a 2 s hold at the end for the card. - Titles, chips and captions (
hn4a-compositor-motion-graphics, captions perhn4a-compositor-in-scene-titles): one spec over the rough cut, written by a script that cues every layer from the word times.- Open on who and what: the maintainer's name, the project's name in its headline font, one line of what it gives the user with the number in the accent, and the install command in the brand's signature element.
- Name each part as it is said: a chip with the part's real identifier
(
lint-fix,src/router,--watch) pops on just before the word. This is what makes clear what the project actually provides. - Lists build on the words, one item a beat.
- Captions from the same word times in the brand's mono or sans, in the lower third, clear of the chips. Leave them off only if the person says so.
- End card: a short headline, the install command again, the repo URL and a credit line.
- Everything over the footage sits on the brand's card or chip background. Stills at every title, fix, then Gate: the spec live on a review page before rendering.
- Render and deliver (
guide-prepare-renders-for-delivery): the 16:9 master, a small copy for chat, and a 9:16 cut if the person posts vertically. Draft the note that goes with it in the person's voice, leading with the video, with no claim the repo contradicts.
Choices this workflow makes
- The repo's own words and identifiers on screen, the metaphor in the pictures. Stills and clips carry no text; every word is composited.
- The brand from the project's site, not a guess.
- Word times from the TTS alignment, not a paid transcript; whisper only checks the words.
- Stylized, never photoreal, with one recurring character as the user.
Dead ends
- Pitching a feature the repo "doesn't have yet" from an old plan: the repo had shipped it months earlier. Read the repo before writing a line about it.
- Arrow lists drawn straight over a busy toy scene: unreadable. On chips they read.
- A chip cued exactly on its word in a 2 s shot was on screen under a second. Cue quick-montage chips from the shot's start.
- Turnarounds sometimes come back as a 4x2 grid instead of 2x2: cut the views by the grid you got.
- Waiting on
taskswhile renders ran from several sessions timed out for half an hour on a call that had already failed and been refunded. Readhistoryfor its status and re-run with a new seed.
Worked example
Acme Co.'s open-source CLI toolkit, from its repo and project site. 16:9 1920×1080, 45 s. Brand from the site: a dark background, one green accent, a mono for identifiers and a sans for headlines, a terminal window as the signature element.
| Part | Picture | On screen |
|---|---|---|
| Opening | A tin-toy character arrives in a toy town | maintainer, project name, one line with its module count, the install command in a terminal card |
| Each module | The character visits the module's shop | a chip with the module's identifier on its word |
| Montage | Three 2 s shots of the town at work | chips cued from each shot's start |
| End card | The town at dusk, held 2 s | headline, install command, repo URL, credit |
Notes on the way: the brief pitched a module the repo had already shipped, so that line was rewritten from the repo; montage chips cued on their words flashed by and were moved to each shot's start. Cost at list prices for a job of this size (3 style frames, a turnaround, about 14 stills on nano banana 2.1 at 2K, voice, about 50 s of H3 Max at 768P): about $6, the titles and renders free.


