render-myth-vs-fact
Assemble a myth-vs-fact kinetic-typography explainer video ad (≈29.5s, 9:16) from N myth/fact pairs + hook / turn / punch copy + palette + a brand end-card PNG + a VO track — a hook, 3 red-strike MYTH cards that flip to teal-check FACT cards (per-line strikethrough that crosses EVERY wrapped line),…
Install / Use
npx skills add gooseworks-ai/goose-skills --skill render-myth-vs-factInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Tags
Our assessment of render-myth-vs-fact
render-myth-vs-fact scores 83/100 on our quality scale, 3194th of 4,581 Development & Engineering skills we index.
Its SKILL.md is 8.5 KB long, split into 7 sections and no code examples: a thorough specification that gives an agent plenty to work with.
With 1,222 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 33 days ago, so render-myth-vs-fact is actively maintained.
- Our last check on 2026-10-14 found the source still online.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
render-myth-vs-fact compared with similar skills
All 4 of these similar skills score higher than render-myth-vs-fact; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| render-myth-vs-fact (this skill)by gooseworks-ai | 83 | 1.2k | 33d ago | SKILL.md |
| taste-skillby Leonxlnx | 100 | 102.4k | today | CLAUDE.md |
| ai-job-searchby ai-job-search-dev | 100 | 65.7k | 4d ago | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 45.0k | 5d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 33d ago | SKILL.md |
Frequently asked questions
- How do I install render-myth-vs-fact?
- Run
npx skills add gooseworks-ai/goose-skills --skill render-myth-vs-fact. The install tabs above show the steps for each supported agent. - Which AI agents does render-myth-vs-fact work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is render-myth-vs-fact safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is render-myth-vs-fact still maintained?
- The repository was last updated 33 days ago, so render-myth-vs-fact is actively maintained.
Skill content
View source on GitHubname: render-myth-vs-fact
description: Assemble a myth-vs-fact kinetic-typography explainer video ad (≈29.5s, 9:16) from N myth/fact pairs + hook / turn / punch copy + palette + a brand end-card PNG + a VO track — a hook, 3 red-strike MYTH cards that flip to teal-check FACT cards (per-line strikethrough that crosses EVERY wrapped line), a "what actually works" turn, an optional proof reveal, a punch line, and a static end card. DETERMINISTIC assembly with ZERO AI-gen visuals — HTML hyperframes rendered frame-exact via Playwright (window.renderAt(t), animation a pure function of beat-local time), Whisper beat-snap to VO word onsets, concat at a uniform fps, karaoke .ass captions burned last (suppressed on the proof + end-card beats), and a VO + optional music mix (music −20 dB, amix normalize=0, tail fade). FREE (Python + Playwright + ffmpeg); the recipe supplies the copy / palette / end-card / VO and gates the paid VO / music / Whisper calls to their own capabilities. Use for the myth-vs-fact format.
status: active
render-myth-vs-fact
The free, deterministic renderer for the myth-vs-fact video ad format — the sound-off-safe kinetic-typography explainer that busts N common myths and hands the viewer a credible resolution. Red-strike MYTH cards flip to teal-check FACT cards over a VO (voice + tone are the caller's choice; the demo used a calm-authority expert), then a "what actually works" turn + an optional proof reveal + a punch line + a static brand end card.
Every on-screen word is a deterministic HTML hyperframe — no AI image/video gen, no b-roll, no character. Visuals are free (no paid calls). The only metered spend is upstream (VO + Whisper word-timestamps + an optional music bed), gated to its own capabilities. This capability OWNS the whole FREE assembly: beat-snap → render → captions → mix → burn → master. Iterate the cut for free; re-roll only the offending paid audio beat.
It ports a validated earlier build — brand-neutralised,
config-driven, and portable (no /Users, no clients/; everything via --config +
--work-dir).
SOUND-OFF SAFE is the whole point: every claim is legible on-screen and the VO only reinforces it. VO-FIRST: render the VO, extract Whisper word onsets on the RENDERED audio, then snap every beat boundary + strike wipe + reveal to those onsets.
The 8-beat spine (roles)
hook → 3× myth-fact (the flip triad — identical grammar so it reads as a pattern) →
turn (the "what actually works" pivot) → proof (optional actives/proof reveal, omit if
empty) → punch (full-frame closer) → end-card (the static brand PNG). Each beat carries
its role, duration, and its copy; ONE role template renders any pair.
Scripts (free — Python + Playwright + ffmpeg, no paid calls)
scripts/beat_snap.py— VO-first alignment. FAL Whisper word-timestamps on the RENDERED VO → re-snap every beat boundary to the nearest word onset. Writesbeat-manifest.json+whisper/words-flat.jsoninto the work dir.--no-whisperkeeps the config durations un-snapped for a fully offline run.scripts/render_beats.py— the deterministic renderer. Permgbeat: pick the role template underhyperframes/, inject the beat's copy + palette + fonts aswindow.BEAT, drivewindow.renderAt(t)frame-by-frame via Playwright, screenshot each frame → ffmpeg at EXACTLY the configured fps (default 25/1). Theend-cardbeat is built from the pre-supplied brand PNG (scale/crop + a ~0.35s fade-up) — never generated per run.scripts/make_captions.py— karaoke.assfrom the manifest + Whisper words. ≤3 words per cue; close on a >0.4s gap / beat-window edge / sentence-ending punctuation. Captions are burned ONLY in caption-allowed windows; the proof + end-card beats are suppressed.scripts/compose.py— the assembler: concat the beats → mix VO + optional music (music −20 dB,amix normalize=0, ~0.8s tail fade) → burn the.assLAST → master mp4.scripts/config.example.json— the shape of the brandconfigthe recipe binds (the demo build, a made-up houseplant-care brand, as a worked reference).scripts/hyperframes/— the bundled hyperframe scaffold:_shared.css(palette-tokened tokens + card/tag/fact/pill/chain type),_shared.js(theinitRenderer/springScale/buildLineStrikes+strikeLinesper-line-strike /popIn/revealWordshelpers + config injection), and one template per role (beat-hook.html,beat-myth-fact.html,beat-turn.html,beat-proof.html,beat-punch.html).
Inputs (all via --config + a runtime work dir — NO hardcoded paths)
config.json carries: fps (25) / width / height; vo + optional music +
mix{music_db:-20, tail_fade:0.8}; palette (the five CSS-var tokens bg, myth_strike,
fact_accent, headline_ink, accent); brand_name; display_font; end_card_png +
end_card_fade; caption_style; suppress_beats; and beats[] — each {n, role, duration, captions, cues{...}} plus the role's copy:
- hook:
eyebrow,hook_line,emphasis,strike_word - myth-fact:
myth_index,myth_line, and eitherfact_line(a[bracketed]phrase becomes the accented payload) ORfact_clauses[](a staggered clause chain) - turn:
turn_slate,turn_sub([brackets]→ emphasis) - proof:
proof_eyebrow,proof_items[]({name, badge}),proof_footnote - punch:
punch_line - end-card: none (built from
end_card_png)
The recipe's myth_fact_pairs, hook_line, turn_slate, punch_line, palette,
end_card_png, and optional actives_or_proof map onto these beats 1:1. See
config.example.json (a worked example — the Fernhollow houseplant demo; its copy and
palette are that brand's, never defaults).
Choices
The creative calls the caller makes upstream (the video-format recipe asks the user). This renderer never picks them — it only consumes the rendered files and copy:
- Narrator voice → the
vofile (made bycreate-vo-elevenlabs). The demo used a calm expert voice. - Tone → the VO direction + the hook / turn / punch copy. The demo was calm-authority, warm, plain-language.
- Music → the optional
musicfile (made bycreate-music-elevenlabs). The demo used a calm airy pad + sparse warm keys, no drums.
The palette is a brand fact (brand kit), not a choice.
Craft rules (load-bearing — faithful to the source molecule)
- MYTH strikethrough is PER-LINE. Measure each wrapped line box (
Range.getClientRects, deduped to one rect per visual line) and lay one red bar at each line's vertical MIDDLE, driven as ONE continuous L→R sweep. A single fixed-Y rule reads as an underline the moment the headline wraps. - The end card is the pre-built brand PNG — NEVER generated per run. Scale/crop to the canvas with a short fade-up; it carries its own baked logo + claim + CTA.
- Animation is a pure function of beat-local time — no
setTimeout, no CSS keyframes — so Playwright seeks frame-exact and the render is fully reproducible. - Every beat mp4 is exactly the configured fps (25/1).
render_beats.pyenforces + warns; a mismatch makes the concat demuxer silently drop frames. - All text fits the 88% safe area at the ~15% spring-overshoot PEAK, not at rest.
- Captions burned LAST, ≤3 words/cue, closing on >0.4s gap / window edge / sentence end.
The ASS
Events Format:line MUST carry theNamefield or every cue gets a leading-comma artifact. Suppress the proof/footnote + end-card beats (two text layers at one spot both go unreadable). - Mix constants are validated — music
−20 dBunder the VO,amix normalize=0(with normalize on the bed pumps), ~0.8s tail fade. Sound-off must still work without the bed. - Keep the MYTH triad's flip grammar + internal timing identical so it reads as a pattern (anaphora).
Requires
- Python 3 + Playwright with Chromium (the kit provides it) for the frame-exact
hyperframe render, and ffmpeg/ffprobe on PATH. If
Playwright is unavailable,
compose.py+make_captions.py(the concat / mix / caption path) still run; onlyrender_beats.pyneeds the browser. watch(QC the final master — the red strike crosses the vertical MIDDLE of EVERY wrapped myth line, the VO is intelligible, captions are legible with no card collision, suppression is correct on the proof + end-card beats, framerate is uniform 25/1, no clipping, every claim is legible sound-off). The recipe gates the paidcreate-vo-elevenlabs(VO),create-music-elevenlabs(bed), and FAL Whisper calls — this capability itself makes NO paid calls.
Related Skills
taste-skill
102.4kAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
ai-job-search
65.7kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
45.0kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
