$npx -y skills add heygen-com/hyperframes --skill changelog-videoTurn a weekly changelog .md into a finished branded changelog video (square 1080, ~45-60s, Annie VO, animated brand background, mock-UI visualizations, lowkey captions). Use when the user provides a changelog/digest markdown and wants the weekly video, or says "changelog video".
| 1 | # Changelog → Branded Video |
| 2 | |
| 3 | Input: a changelog .md (themes + items, like the weekly HyperFrames digest). |
| 4 | Output: a lint-clean, seam-gate-green HyperFrames project in |
| 5 | `projects/active/weekly-changelog-<range>/`. Render only when asked. |
| 6 | |
| 7 | **Load first, non-negotiable:** `motion-doctrine` (+ `cut-the-curve`, |
| 8 | `oversized-cursor` if a cursor appears, `seam-craft`) and `captions-overlay`. |
| 9 | This skill supplies the changelog-specific pipeline; the doctrine supplies the |
| 10 | motion law. |
| 11 | |
| 12 | ## The prime directive: visualize, don't list |
| 13 | |
| 14 | Every theme is illustrated by an **animated mock of the actual UI or a |
| 15 | faithful analog** acting out the change in experience — never text bullets. |
| 16 | Route every theme/item through `references/visualization-registry.md` BEFORE |
| 17 | writing the script; the registry decides ui-recreate / ui-analog / terminal / |
| 18 | checklist. Text checklist is the LAST resort, reserved for genuinely |
| 19 | non-visual items (reliability fix lists). |
| 20 | |
| 21 | ## Pipeline |
| 22 | |
| 23 | ### 0 · Bootstrap the project from THIS skill's assets — non-negotiable |
| 24 | |
| 25 | **Do this before writing any composition HTML. Skipping it always produces a video that looks like a similar project you built before, NOT this skill's brand — that's the single most common way this skill goes off-brand.** The skill's assets, fonts, and scaffold are the skill; the SKILL.md prompt is a router. |
| 26 | |
| 27 | ```bash |
| 28 | mkdir -p project/assets/fonts |
| 29 | cp <SKILL_DIR>/assets/fonts/*.woff2 project/assets/fonts/ |
| 30 | cp <SKILL_DIR>/assets/bgm.mp3 project/bgm.mp3 |
| 31 | ffmpeg -y -stream_loop 15 -i <SKILL_DIR>/assets/bg-pattern.mp4 -t <TOTAL> \ |
| 32 | -vf "scale=1080:1080,fps=30,eq=saturation=0.72,drawbox=c=black@0.5:t=fill" \ |
| 33 | -an -c:v libx264 -crf 20 -pix_fmt yuv420p project/assets/bg-pattern-<TOTAL>s.mp4 |
| 34 | cp <SKILL_DIR>/examples/master-skeleton.html project/index.html |
| 35 | ``` |
| 36 | |
| 37 | Then **read `references/build-spec.md` end-to-end** (not skimmed) — it defines the brand tokens (TT Norms Pro + ABC Solar Display + TT Norms Mono, cream `#f5f6f4`, rationed green `#5ef17c`, glass cards with green-tinted borders, kicker/sec-chip pill shape, 32px caption rail at `top: 990`) that every scene inherits from the scaffold. |
| 38 | |
| 39 | Only THEN begin steps 1-6 below. Steps 1-4 (parse, route, script, VO) plan what goes into the scaffold; step 5 fills placeholders (`<RANGE>`, `<TOTAL>`, `<CUT_N>`, `<DUR_N>`, scene bodies) inside the already-copied `project/index.html` — you do NOT rewrite the scaffold's chrome, fonts, palette, or layout shell. |
| 40 | |
| 41 | If you catch yourself reaching for `cp` on a prior video's `index.html`, or writing your own `@font-face` declarations, or designing a WebGL shader background instead of using the encoded bg-pattern MP4 above: STOP. Delete the current `index.html` and restart at the `cp` of the master-skeleton scaffold. Rebuilding scene content on the right scaffold is cheaper than retrofitting brand into the wrong scaffold. |
| 42 | |
| 43 | ### 1 · Parse + editorial cut |
| 44 | |
| 45 | - Extract: week range, headline stats (releases, commits), themes, items. |
| 46 | - **Budget: 45-60s total.** Title ≤2s, outro ≤3.5s, 4 themes ≈ 9-12s each. |
| 47 | - Per theme keep ONE hero visualization + at most 3 spoken items. Everything |
| 48 | else exists only as the outro's "full digest" pointer. Cutting is the job: |
| 49 | a changelog with 30 items still yields ≤14 spoken beats. |
| 50 | - Order themes by story: marquee feature → product surface → performance → |
| 51 | reliability (the digest usually already reads this way). |
| 52 | |
| 53 | ### 2 · Visualization routing |
| 54 | |
| 55 | For each theme, pick the surface from `references/visualization-registry.md` |
| 56 | and write one line: `theme → surface → the 2-4 sequenced actions the mock |
| 57 | performs, each tied to a script phrase`. If no registry surface fits and no |
| 58 | faithful analog exists, it's a checklist scene — don't invent fake UI for |
| 59 | something we can't represent honestly. |
| 60 | |
| 61 | ### 3 · Two-layer script (spoken vs display) |
| 62 | |
| 63 | Write the script as **token lines** per `references/script-voice.md`: |
| 64 | conversational register, every technical term carrying a `spoken` phonetic |
| 65 | form from `references/lexicon.json` while `display` keeps standard spelling. |
| 66 | Captions show `display`; the VO reads `spoken`. Any term not in the lexicon: |
| 67 | STOP and ask the user how it's pronounced, then add it to the lexicon. |
| 68 | Save as `script-tokens.json` in the project. |
| 69 | |
| 70 | ### 4 · VO — Annie (HeyGen, pinned) |
| 71 | |
| 72 | ```bash |
| 73 | # spoken-layer text only; words JSON = ground-truth timestamps of the SPOKEN text |
| 74 | # Repo-native path: the changelog-video skill runs from the hyperframes repo root, |
| 75 | # so it uses the tracked hyperframes-media TTS helper directly (no `npx hyperframes |
| 76 | # skills` install step). If you've copied the skill into another repo, swap in |
| 77 | # your own path |