Render the logo-equation card ad (7s, 9:16) — partner icon + brand icon joined by a plus sign as an equation, a two-line "= outcome" headline, four numbered steps, and a CTA that hard-cuts in at 2s, on a static black card over timelapse b-roll, no voice. render_card.py draws the two card plates with measured geometry and hard guardrails (the user must confirm the integration is real, no partnership/endorsement/ranking words, no comment-bait CTA, no dashes); compose.py lays the card over the b-roll sped up to read as a timelapse, with an optional bed; measure_motion.py gates the b-roll (a real-time shot reads as a photo). Free, local.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the render-logo-equation-card skill
A card-led format: everything the viewer reads is on a static black card in the top third; under it, b-roll moves like a timelapse to stop the scroll. One animated event: the CTA line hard-cuts in at 2.0s. No voice, no captions, no cuts.
python render_card.py card.json --out-dir work/ # card-no-cta.png, card-with-cta.png
python compose.py --broll broll.mp4 --cards work/ --out ad.mp4 --in 3 --speed 4 [--bed bed.mp3]
python measure_motion.py ad.mp4 --cta-at 2.0 # exit 1 = rejectcard.json:
{"logos": ["partner-icon.png", "brand-icon.png"],
"partner": {"name": "Slack", "integration_confirmed": true},
"headline": ["= your standup, written", "before anyone opens Slack"],
"steps": ["1. Connect your Slack workspace", "2. ...", "3. ...", "4. ..."],
"cta": "Try it free at example.com"}The Slack standup card above is an illustration of the schema, not a default: the headline, the partner and the steps come from the user's brand and choices.
The recipe asks these before any paid step; this renderer only draws what card.json and the
flags say. The demo's value is an example, never a default:
headline_angle — what the "= …" headline promises (time saved, a pain removed, a new
ability, one workflow in one place). Sets card.json headline + steps. Demo: time saved
("= your standup, written before anyone opens Slack").broll_subject — what the timelapse b-roll shows (the product in use, the team working,
a workspace, customers). Picks the --broll clip and window. Demo: the brand's own footage of
work happening.music — the optional --bed (built from the music choice, instrumental, no artist
names) or none (ship silent). Demo: driving minimal electronic, ~144 BPM.Two logos side by side already imply a link between the companies. The platform names another brand only as plain co-existence ("works with"), never as an endorsement, partnership or ranking. So:
partner.integration_confirmed: true or no card. Only when the user confirms the
product really works with the partner (an integration, a plugin, an import).--speed (3-8x) on real footage: the brand's
own clip of the product in use, a team at work, a workspace. measure_motion.py rejects
a mean under 1.5.--fit cover, the default); width leaves black around a landscape
clip.Optional --bed (e.g. create-music-elevenlabs, instrumental, 8s), normalised to -15 LUFS
with a short fade. An organic post can go out silent and take a track in-platform.
headline_angle* — what the "= …" headline promises (time saved, a pain removed, a newbroll_subject* — what the timelapse b-roll shows (the product in use, the team working,music* — the optional --bed (built from the music choice, instrumental, no artistFull 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.