Assemble a short-form 'vignette' ad from clean product cutouts composited over a kinetic background video — birefnet cutout, then a cold-open text card + product carousel + annotated specimen-sheet end card, plus loudnorm + separate-pass music mux. FREE assembly (PIL + rsvg + FFmpeg); the recipe supplies the config and gates the paid BG/cutout/music calls to their own capabilities. Use for the vignette format.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the render-vignette skill
Assemble a short-form 'vignette' ad from clean product cutouts composited over a kinetic background video. Motion lives in the BG video; the product rides on top as a static cutout layer. Music-led, zero VO, sub-12s, loopable — it reads muted because the product label + on-screen copy carry the message. Defaults to the V-CARD structure: a cold-open text card → a product carousel under one shared BG → an annotated specimen-sheet end card.
strip_product_backgrounds.py — birefnet cutout of each PDP shot to clean hard-edge alpha (no halo/shadow).render_overlays.py — PIL + rsvg-convert render the cold-open card (cold_open_text in cold_open_font, dead-center) + the annotated specimen-sheet end card (brand SVG logo + end_card.lines annotations) as transparent 1080x1920 PNGs. Text colour follows end_card.logo_variant. FREE.composite_variants.py — one FFmpeg filter_complex per BG variant: BG (palette-aware dim) → cold-open overlay → cutouts (width-anchored, vertically centered y=(H-h)/2) → end card. h264 crf20 yuv420p +faststart 30fps. FREE.music_and_mux.py — instrumental music bed from config.music.prompt → acompressor + loudnorm I=-18:TP=-2:LRA=9 → muxed into every variant in a SEPARATE pass with explicit -map 0:v:0 -map 1:a:0. The mux is FREE; the music generation is a paid call that in prod routes through create-music-elevenlabs.Every script reads config.json (--config <path>, $VIGNETTE_CONFIG, <project>/config.json or scripts/config.json) and exits naming any missing required field — there are no built-in demo values.
The recipe asks the user these before any paid step; this atom only reads the result from config. The demo build's value is an example, never a default.
bg_motif — the kinetic background's subject. Arrives as bg_concepts[].brief (BG sourced upstream). Demo: chrome molecular swarm / black ink blooming in cream.bg_palette — the background's colour feel. Arrives as bg_concepts[].dim (heavy/light dim) + end_card.logo_variant (logo + text colour). Demo: cream with chrome + ink accents.music — the instrumental bed's feel. Arrives as music.prompt (no brand names — ElevenLabs rejects them). Demo: slow ambient minimal electronic ~90 BPM.y=(H-h)/2) so mixed-shape SKUs share one visual mid-line — never bottom-anchor (squat jars jump). For 9:16 scale by WIDTH (~75% tall bottles, ~65% squat jars).saturation=0.50); naturally-contrasty BG → lighter dim (saturation=0.85).-map 0:v:0 -map 1:a:0 (single-pass composite+mux silently ships 1 kbps garbage audio).strip_product_backgrounds.py calls fal-ai/birefnet/v2 directly via a fal_helpers shim (sys.path.insert into a shared atoms dir + from fal_helpers import ...). It is bundled here because the cutout is an intrinsic assembly step, but in prod the birefnet cutout should route through create-image-fal (the fal-proxy capability that bills the Ads agent) rather than hitting fal.run directly. Treat the direct-fal path as a gap to close; the recipe gates the cutout to gooseworks fetch create-image-fal.source/t2v-outputs/<slug>.mp4 so the composite is source-agnostic. There is no Pexels fetcher bundled here; that lives in the recipe's playbook.music_and_mux.py also uses the fal_helpers shim for the ElevenLabs music generation; in prod that generation routes through create-music-elevenlabs, and only the loudnorm + separate-pass mux run locally as FREE assembly.bg_motif* — the kinetic background's subject. Arrives as bg_concepts[].brief (BG sourced upstream). Demo: chrome molecular swarm / black ink blooming in cream.bg_palette* — the background's colour feel. Arrives as bg_concepts[].dim (heavy/light dim) + end_card.logo_variant (logo + text colour). Demo: cream with chrome + ink accents.music* — the instrumental bed's feel. Arrives as music.prompt (no brand names — ElevenLabs rejects them). Demo: slow ambient minimal electronic ~90 BPM.Full 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.