produce-episode
Produce an evidence-backed software explainer episode from a storyboard — demo video, README GIF + MP4, code-diff story, before/after product narrative. Use when the user asks for a demo video, an explainer, an episode, social/YouTube cuts of a feature, or "turn this change into content". Builds on the readme-walkthroughs skill (capture layer) and the episodes/ manifest structure.
适合你,如果你需要把软件功能变化快速做成演示视频和图文解说。
npx oh-my-skill add homenshum/noderoom/produce-episodecurl -fsSL https://oh-my-skill.com/install.sh | bash -s -- homenshum/noderoom/produce-episodenpx oh-my-skill verify homenshum/noderoom/produce-episode怎么用
技能原文 SKILL.md
Produce Episode
Turn the repo's real engineering into an evidence-backed explainer. An episode is a structured artifact (episodes/<id>/), never an ad-hoc recording. The recurring story grammar:
I tried to make X → the demo exposed Y → so I built Z → old behavior → the code → the mental model → the new behavior → the proof artifact generated from this repo.
Inputs
episodes/$ARGUMENTS/brief.md— thesis, audience, claims-with-evidence tableepisodes/$ARGUMENTS/storyboard.yaml— ordered scenes; each hastype,status: ready|staged,narration,source(for ready scenes) andevidence(always)
Hard rules
- Never invent product behavior. Every claim grounds in: a code path, a git diff, a live capture, a test result, or fixture data. The brief's claims table is the contract.
- No secrets/tokens/real customer data in any frame or output. Captures use fresh throwaway rooms (
GIF-*codes) on deterministic seeds. - Capture the failure before the fix when possible (
failure_capturescenes). If a failure can't be reproduced honestly, mark the scenestaged— do not fake it. - Deterministic fixtures over live external data; live-LLM scenes get
retries+ fresh rooms.
Stage 0 — audience-world research (recognition before persuasion)
Before any scene is written, load the audience file the brief names from episodes/_audiences/<name>.yaml (doctrine + fluency grid: episodes/_audiences/README.md). Content has THREE layers, in order: product proof → context recognition → cultural fluency. The scenario comes from the audience's world (their meetings, documents, anxieties), the feature appears INSIDE it — never the reverse. Use the audience's lexicon_use naturally; never the lexicon_avoid words; honor every trust_signals_required entry in the demo itself (shown, not narrated). Aesthetic rule: quiet competence, not loud wealth.
Procedure (what runs TODAY)
- Read
brief.md+storyboard.yaml; verify everyreadyscene'ssourceandevidenceexist. - Capture layer:
npm run walkthroughs [featureIds]— the readme-walkthroughs skill owns this (specs → live capture →remotion/walkthrough.data.js). Respect all its pitfalls. - Render layer:
npm run walkthroughs:render— emits BOTHdocs/walkthroughs/<id>.gif(two-pass palette, ≤10MB) and<id>.mp4(H.264, the episode/social source material). - Proof pack: README "Watch it work" section embeds the GIFs; the storyboard's ready-scene MP4s are the cut list for a 60s vertical/short edit.
- Voiceover (WIRED):
npx tsx scripts/walkthroughs/voiceover.ts <episodeId>— ElevenLabs TTS per scene narration →voiceover/<scene>.mp3+timings.json, then the reconciliation pass (a scene's visual must outlast its narration +0.5s; >12s narration → split the scene). Key resolves env →.env.local→../nodebench-ai/.env.local; never print or commit it. - Quality gate before calling it done: all
readysources exist on disk · no secrets visible in frames · every claim in brief.md still points at real evidence · GIFs within size budget · the app still runs (live-DOM check).
6b. Video judge (WIRED): npx tsx scripts/walkthroughs/judge-video.ts <episodeId> [renders/x.mp4] — Gemini video understanding watches the actual render and scores 8 dimensions (state clarity, caption sync, pacing, audio, legibility, proof-feel, safety, restraint) with timestamped defects → judge.md/judge.json. P0 defects block publishing; P1 fix before posting; P2 log and ship (do NOT enter a re-render polish loop for P2s — the judge said publish).
- Trust-signal check (for audience-targeted episodes): does the demo SHOW sensitive-context awareness (fixture data, fresh rooms)? source provenance? review-before-action? Does it avoid wealth stereotypes, imprecise language, and overclaiming?
- Cultural-fluency eval — score 0–2 each, evidence required: context accuracy (would this scenario happen in their world?) · language fluency (native, not forced) · status restraint (no cheap luxury signaling) · trust awareness (privacy/discretion/review addressed) · decision relevance (real decisions, not generic productivity) · proof quality (credible evidence shown). Anything scoring 0 blocks publishing.
- Write
episodes/$ARGUMENTS/report.md: which scenes rendered, which are staged and why, sizes, evidence links, trust/fluency scores.
Distribution (learned the hard way)
GitHub cannot inline-play an MP4 you committed — a blob link opens a download page, which is a dead-end handoff. Ship episodes as: (1) copy the MP4 into the app's public/episodes/ (gitignored — the deploy uploads it, the repo doesn't double-store it) so it plays at https://noderoom.live/episodes/<id>.mp4 in any browser with sound; (2) commit a small poster.jpg (~30KB, ffmpeg frame grab at 540w) and embed it in the README as a click-through link to that URL. The only way to get a TRUE inline player in a README is manually drag-dropping the MP4 into GitHub's web editor (not automatable) — the poster+link pattern is the automated equivalent. GIFs stay the inline format for the short walkthroughs; episodes keep audio, so they ship as MP4 links.
The "before" scene has TWO honest modes — pick deliberately
- Guards-removed variant of our app (branch like
demo/v0-naive-agent): same UI, safety removed. Label the build ON SCREEN. Use when the story is "here is exactly what our guard prevents." - Different-stack baseline — the same feature attempted on a typical build: Streamlit, shadcn/Tailwind + a conventional backend, assistant-ui-style chat frontends. This is usually the MORE truthful "before": those apps are not broken, they simply don't have live shared state, versioning, or review by construction — which is most viewers' actual starting point. Honesty rule: never frame the other stack as bad; frame it as "what most of us build first, and where it structurally stops." Real baseline footage exists in the ParselyFi/ Streamlit captures of the feature-walkthrough-gif repo — reuse before building new baselines.
Staged stages (interfaces defined, NOT yet built — do not pretend they ran)
failure-replay: drive the SAME spec against av0-*git tag in a worktree to record the naive version failing. Needs tags or a fixture flag that disables the guard being demoed.code-zoom: extract the 20–40 relevant lines percode_diffscene, animate old→new with callouts in a Remotion code panel.motion-diagram: Motion Canvas vector scenes formotion_canvasbeats (lock→draft→merge).voiceover-elevenlabs: narration.mp3 + timings.json from the scenes'narrationfields, then a timing-reconciliation pass (lengthen holds or split scenes, never rush narration).publish-pack: per-platform copy (YouTube/LinkedIn/X/README) from the same brief — same truth, different frequency.
v1 acceptance (the milestone this skill exists for)
One command-chain produces, from a deterministic scenario: docs/walkthroughs/<feature>.gif + <feature>.mp4 + the README snippet — all regenerable, all evidence-linked. That exists today for the 5 NodeRoom features; the episode cut (60s short) is assembled from the ready-scene MP4s.