Render a designed 'value prop' video from a config — 3-5 noun-phrase benefit claims (<=4 words each) revealed sequentially over per-SKU product visuals, one crisp editorial frame per claim (hook sticker -> N claim beats -> brand end card). Deterministic PIL/HTML beat renderer frame-stepped via Playwright and encoded with FFmpeg, sound-off legible, hard cuts, uniform pacing. FREE (no paid calls); music is added separately (create-music-elevenlabs). Use for the value-prop format.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the render-value-prop skill
Render a designed 'value prop' video from a config: a hook sticker, then one beat per short noun-phrase benefit claim (<=4 words each — "Drug-Free", "Zero Sugar", "NSF Certified"), each pairing the claim headline with a per-SKU product visual (the hero SKU rotates beat to beat so the eye anchor shifts), then a brand-wordmark end card. Text + product carry the spot — no narration, no talking head — and it is built to be legible sound-off. Every beat is a pure function of beat-local time t (deterministic PIL start frames + Playwright hyperframes + FFmpeg); no CSS keyframes, no setTimeout. FREE (no paid calls); music is a separate capability (create-music-elevenlabs), or ship silent for $0.
render_master.py --config config.json --project <dir> -> <dir>/finals/master-clean.mp4 (silent),
1080x1920, deterministic, $0. The renderer is fully config-driven — palette, copy, SKUs,
pacing, hook, logo and end card all come from config.json (schema = ad_sample.recipe.config;
see config.example.json). Nothing is hardcoded to one brand. build_storyboard_preview.py is an
optional free preview gallery for the gate; build_text_overlays.py is optional (transparent
text-zone PNGs for compositing claims over a motion clip). Both preview scripts take their ink,
background, brand name and logo from shot-list.yml project: or the project's config.json
(neutral fallbacks otherwise). shared/beat-templates/ are reference layouts with placeholder copy;
the renderer does not read them.
The value-prop recipe asks these of the user; this capability renders whatever the config says.
music — the bed under the claims, or silent (sets music_brief, consumed by
create-music-elevenlabs, not this renderer). Asked of the user; the demo used calm ambient
sleep music.background — what the claims sit on (sets palette.bg). Asked of the user; the demo used
white with a navy headline. palette.ink comes from the brand kit.Environment: run with a Python that has Playwright (override the frame-render interpreter with
RENDER_PYTHON); ffmpeg is auto-discovered (FFMPEG env > PATH > common prefixes). The frame
renderer render_hyperframe.py is bundled in scripts/ — no external atom to fetch.
palette.ink color on palette.bg;
the per-beat accent color (from value_props[].accent — a SKU-accent slug or a hex) is the
accent rule, not the headline.palette.bg to the product image's
background color for seamless compositing (free — avoids a paid background-removal step).config.logo; otherwise it
falls back to a typographic brand_name wordmark (many brands ship only a favicon).music — the bed under the claims, or silent (sets music_brief, consumed bybackground — what the claims sit on (sets palette.bg). Asked of the user; the demo usedFull video production sequence with script review, actual ingredient choices, controlled generation, editing, evidence-based quality review, polish, captions and delivery. A host binding supplies project storage, authentic approvals, provider access and billing.
Build a vox-pop street interview video ad. An interviewer with a handheld mic asks passers-by one question about the brand's product, they give blunt wrong guesses, one gives the real answer, and the cut lands on a branded end card. Generates the takes through the GooseWorks fal proxy (Seedance 2.0 with native voice), then grades, re-cuts, captions and gates them locally. Use for the street-interview format.
Write the words of a short-form video ad (voiceover, dialogue, chat bubbles, on-screen lines) the way performance creative teams do instead of from a blank page. Builds the script from the buyers' own words, the beat sheet of an ad that already works and three deliberately different angles, filters them with a rule check and a second non-Claude model, and takes the strongest into the review with the other two as one-line swaps. Use it in every video ad run before any paid step, and whenever the user asks to write, rewrite or improve a video ad script or says a script sounds generic or AI-written.
Teach your coding agent to build fast, cheap value prop video ads from a brand's logo and product images, using HTML instead of a video model.