跳到正文
cccskills
免费在 GitHub 公开

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), 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.

中文简介正在准备中。当前显示原文说明。

实测评分 未实测

查看安装方法

包含的文件(15)

  • SKILL.md8.7 KB
  • scripts/beat_snap.py6.1 KB
  • scripts/compose.py6.8 KB
  • scripts/config.example.json4.3 KB
  • scripts/hyperframes/_shared.css6.7 KB
  • scripts/hyperframes/_shared.js7.8 KB
  • scripts/hyperframes/beat-hook.html3.2 KB
  • scripts/hyperframes/beat-myth-fact.html4.1 KB
  • scripts/hyperframes/beat-proof.html2.9 KB
  • scripts/hyperframes/beat-punch.html1.2 KB
  • scripts/hyperframes/beat-turn.html1.9 KB
  • scripts/make_captions.py4.6 KB
  • scripts/render_beats.py7.3 KB
  • skill.meta.json337 B
  • tests/smoke-test.md5.6 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

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 cost $0. 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 the validated build from the Clinikally "acne myths" run — 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. Writes beat-manifest.json + whisper/words-flat.json into the work dir. --no-whisper keeps the config durations un-snapped for a fully offline run.
  • scripts/render_beats.py — the deterministic renderer. Per mg beat: pick the role template under hyperframes/, inject the beat's copy + palette + fonts as window.BEAT, drive window.renderAt(t) frame-by-frame via Playwright, screenshot each frame → ffmpeg at EXACTLY the configured fps (default 25/1). The end-card beat is built from the pre-supplied brand PNG (scale/crop + a ~0.35s fade-up) — never generated per run.
  • scripts/make_captions.py — karaoke .ass from 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 .ass LAST → master mp4.
  • scripts/config.example.json — the shape of the brand config the recipe binds (the brand-neutralised Clinikally values as a worked reference).
  • scripts/hyperframes/ — the bundled hyperframe scaffold: _shared.css (palette-tokened tokens + card/tag/fact/pill/chain type), _shared.js (the initRenderer / springScale / buildLineStrikes + strikeLines per-line-strike / popIn / revealWords helpers + 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 either fact_line (a [bracketed] phrase becomes the accented payload) OR fact_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 Clinikally acne build; 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 vo file (made by create-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 music file (made by create-music-elevenlabs). The demo used a calm clinical 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.py enforces + 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 the Name field 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 dB under 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 chromium (pip install playwright && playwright install chromium) 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; only render_beats.py needs 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 paid create-vo-eleven (VO), create-music-elevenlabs (bed), and FAL Whisper calls — this capability itself makes NO paid calls.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Research supported advertising promises from a specific buyer's context, current product facts, customer language and observed ads. Turn them into static, video or copy ideas; match video ideas to actual recipes and save a product-scoped angle bank for write-video-ad-script. Product-led discovery can use verified facts without reviews. Reference persistence and reach are observations, not proof of performance.

中文简介正在准备中。当前显示原文说明。

gooseworks-ai/goose-skills12642026年10月24日 更新

Analyze ad campaign performance data (Google, Meta, LinkedIn) to identify what's working, what's wasting budget, and specific cut/scale/test recommendations. Runs statistical analysis, funnel diagnostics, and multi-channel budget reallocation with specific dollar-amount shift recommendations and scenario modeling.

中文简介正在准备中。当前显示原文说明。

gooseworks-ai/goose-skills12642026年10月24日 更新

For paid lead-gen and participant-recruitment ads, replaces vanity CPA with true CAC per qualified lead by joining ad-platform data with downstream funnel events, surfaces tracking gaps, and classifies every creative into Scale / Keep / Investigate / Cut.

中文简介正在准备中。当前显示原文说明。

gooseworks-ai/goose-skills12642026年10月24日 更新

The intake stage of a Meta ad harness. Researches the brand first, states what it assumes, and asks only what it cannot infer and what would change money, claims or legal exposure if guessed wrong — at most four questions a turn, in plain business language. Writes the brand's stable facts (ads/brand.md), the campaign brief, and a log of what was asked vs assumed. Use it when someone wants to run Meta ads and the brand's ad facts are not yet recorded.

中文简介正在准备中。当前显示原文说明。

gooseworks-ai/goose-skills12642026年10月24日 更新

Checks paid ads against the ad platform's rules (Meta, TikTok, Google, LinkedIn and others) and the brand's category rules: the copy, on-image or on-screen text, pictures and people. Rewrites what can be fixed honestly, adds the disclosures that are needed, and flags anything that needs a human or legal review, with one pass, fixed or flag line per ad and platform. Use alone when you already have the ad text or images and know where they will run; otherwise run the playbook for the job (e.g. make-static-ads, make-content, email-lifecycle).

中文简介正在准备中。当前显示原文说明。

gooseworks-ai/goose-skills12642026年10月24日 更新

Analyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.

中文简介正在准备中。当前显示原文说明。

gooseworks-ai/goose-skills12642026年10月24日 更新

查看 gooseworks-ai 的全部技能

报告此技能的问题