Render a 'brand identity reveal' video from a config — a single poster frame in a real, softly-lit space (real wall, soft-focus plant in the corner, dappled leaf shadow, illuminated poster) whose artwork HARD-CUTS through ~10 on-brand poster mockups (hero product, IG post, hanging banners, sticker sheet, logo lockup, poster, two lifestyle stills, packaging, big icon) then holds on a brand end card. The environment plate is one create-image-fal generation; the mockups are real-DOM HTML frame-stepped via Playwright, perspective-composited into the detected frame quad with the plate's real leaf-shadow multiplied back onto each poster (reads as behind glass), sequenced by FFmpeg. Deterministic assembly, FREE (the plate comes from create-image-fal, the bed from create-music-elevenlabs), music bed only and approved brand copy only. Use for the brand-identity-reveal format.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the render-brand-identity-reveal skill
Render the 'brand identity reveal' format from a config. The signature is a single fixed poster frame in a REAL, softly-lit space (the illuminated poster-frame look of a shop, café, cinema or metro — the setting and wall are chosen per video): a real wall, a real soft-focus plant in the lower-left corner, dappled leaf shadow. The artwork INSIDE the frame HARD-CUTS (no crossfade) through 11 beats — 10 on-brand poster mockups + a brand END CARD held ~3s. Music bed only, NO voiceover; copy is baked into each mockup, never overlaid as captions.
This capability is the FREE assembly only. The paid parts are separate generic
capabilities the recipe names — create-image-fal (the one-shot environment plate) and
create-music-elevenlabs (the bed). Never re-implement them here.
The calling recipe asks the user these before any paid step; this capability only reads them from config. The worked example (Touchland) values are examples, never defaults.
config.plate.setting (demo: premium boutique interior).config.plate.wall_style (demo: sage subway tile).config.music.direction (demo: upbeat playful pop).create-image-fal, flux-pro ultra, 9:16) — an empty lit
poster frame in a real space, high-res so the camera can be pushed closer by cropping.
Pick a wall color that makes the brand's poster colors POP (complement of the dominant hue).scene.html), one poster per beat, built from the
brand's real assets + approved copy, frame-stepped via Playwright (render_art.py, bare
mode, device_scale_factor 2).measure_frame.py detects the blank poster interior quad;
composite.py perspective-warps each poster into it AND multiplies the plate's real
leaf-shadow/light back onto the poster (so it reads as behind glass) + a glass sheen;
build_video.sh sequences the frames with the music bed.config.json — copy scripts/config.example.json (the Touchland worked example) and edit
(canvas, plate prompt + setting + wall_style from the user's choices, camera crop, per-beat durations, end-card copy). Schema + per-file working-dir
layout are documented in scripts/PIPELINE.md.<mask> if the only source has an occluding element). Approved copy only.CAP=skills/ads/capabilities/render-brand-identity-reveal
RUN=<project>/working # holds scene.html + assets/ + the create-image-fal plate in bg/
python3 $CAP/scripts/recrop.py 0.72 0.13 # camera distance (bigger frac = bigger frame); src = first bg/plate_*.png
python3 $CAP/scripts/measure_frame.py # detect the blank poster interior quad
python3 $CAP/scripts/render_art.py # render each poster standalone (Playwright, dsf 2)
python3 $CAP/scripts/composite.py # warp into frame + shadow multiply + sheen
bash $CAP/scripts/build_video.sh $RUN/concat.txt $RUN/music.mp3 out.mp4 13.05 1.0Then watch the master (music-only, every poster legible, shadow falls across the art, end
card holds). See scripts/PIPELINE.md for adapting scene.html per brand.
display (a per-state display:flex silently overrides a
display:none toggle and paints one state over all others).recrop.py), don't regenerate.display: rule beat the visibility toggle; use
opacity.evaluate(fn, arg) didn't switch state in a loop → bake the beat index into the
JS string and return the applied state to assert it.config.plate.setting (demo: premium boutique interior).config.plate.wall_style (demo: sage subway tile).config.music.direction (demo: upbeat playful pop).config.json — copy scripts/config.example.json (the Touchland worked example) and editFull 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.