create-image-fal
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Assemble a creator picture-in-picture product-listicle ad from a config — the creator stays FULL-FRAME the whole beat (voice plus lips generated together per beat, no separate VO, no cut to a full-frame product shot), and on each product beat three persistent overlays ride on
$ npx -y skills add gooseworks-ai/goose-skills --skill render-creator-pip-listicle --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/render-creator-pip-listicleContext preview
The summary Claude sees to decide when to auto-load this skill.
Assemble a creator picture-in-picture product-listicle ad from a config — the creator stays FULL-FRAME the whole beat (voice plus lips generated together per beat, no separate VO, no cut to a full-frame product shot), and on each product beat three persistent overlays ride on
name: render-creator-pip-listicle description: Assemble a creator picture-in-picture product-listicle ad from a config — the creator stays FULL-FRAME the whole beat (voice plus lips generated together per beat, no separate VO, no cut to a full-frame product shot), and on each product beat three persistent overlays ride on top for the WHOLE beat — a title pill top-center, the DEMO in a rounded PiP window top-right (the brand's real UGC clip MUTED, or for a no-UGC brand the product's own autocropped UI still / screen-recording sized to fill the window), and a bottom product card (rounded thumbnail plus 'N · CATEGORY' small-caps plus product NAME in a serif face). Hook plus CTA beats are the creator full-frame with the title pill only. Assembly builds ONE full-1080x1920 transparent overlay PNG per beat, overlays it on the creator clip (cover-scaled to 1080x1920) for the whole beat keeping the native audio, concats all beats, then burns captions LAST as timed PIL PNG overlays (this ffmpeg has no libass) timed deterministically from the known per-beat script. This is the FREE deterministic assembly stage (overlay-PNG build plus cover-scale composite plus concat plus PIL-PNG caption burn); the creator anchor and the N native talking clips come from create-image-fal (Seedream v5 Pro) and create-video-fal (Seedance 2.0). Use for the creator-pip-listicle format. status: active
Assemble a **creator picture-in-picture product listicle** ad from a config: an AI creator counts down N products in the brand's own voice, and **the creator stays FULL-FRAME the whole time — there is NO cut to a full-frame product shot, ever.** On each product beat, three persistent overlays ride on top of the full-frame creator for the WHOLE beat: (1) a **title pill** top-center (persistent, it carries the listicle title), (2) the **DEMO** in a rounded **PiP window top-right** — the brand's real UGC clip (MUTED), or for a no-UGC brand the product's own demo (a real screen-recording, or an autocropped high-res product-UI/dashboard still sized to fill the window), and (3) a **product card** pinned bottom (rounded thumbnail left + "N · CATEGORY" small-caps + product NAME in a serif face like Georgia). Hook + CTA beats are the creator full-frame with the **title pill only** (no PiP/card). The creator's voice + lips are generated **together, natively** per beat — there is no separate voiceover. This capability is the **FREE, deterministic assembly** — build the per-beat overlay PNG, cover-scale the creator clip + composite the overlay, concat all beats, and burn the captions.
`scripts/config.example.json` is the worked example (DIBS Beauty "5 products that replaced my whole makeup bag", ~46s 1080×1920 9:16, a hook + 5 product beats + a CTA); `scripts/PIPELINE.md` maps every config block to its source step and `scripts/README.md` documents the free assembly.
This is the **FREE, deterministic** assembly stage — it spends nothing beyond the caption burn. The paid inputs are separate capabilities — the creator anchor (`create-image-fal`, **Seedream v5 Pro**, model `bytedance/seedream/v5/pro/text-to-image` with **no `fal-ai/` prefix**) and one native Seedance talking clip per beat (`create-video-fal`, model `bytedance/seedance-2.0/reference-to-video`, `generate_audio=ON`, the SAME seed across beats so the face holds, 720p default). Given those native clips + the brand's real UGC demo clips (or the product's own autocropped UI stills / screen recordings) + the real product photos + the brand palette + the title copy, `render-creator-pip-listicle` builds ONE full-1080×1920 transparent overlay PNG per beat (title pill always; + demo PiP top-right + bottom product card + rank number on product beats), cover-scales the creator clip to 1080×1920 and overlays the beat's overlay PNG for the **whole beat** while keeping the native audio, concats all beats, and burns the captions last → the master. Re-cuts reuse the existing native clips + overlays and cost **$0**.
**Anchor gotcha (Seedream v5 Pro, not gpt-image-2/Seedream-v4).** Seedance 2.0's partner-validation gate REJECTS photoreal faces from **gpt-image-2 AND Seedream v4** ("may contain likenesses of real people"); a **Seedream v5 Pro** face passes. Generate a **FRESH** anchor with `create-image-fal`, model `bytedance/seedream/v5/pro/text-to-image` (no `fal-ai/` prefix) — reusing an existing photoreal face from another project also trips the gate.
**Clip gotchas (Seedance 2.0).** A **REJECTED submit STILL bills** via the fal-proxy — **pre-flight ONE test clip (the hook)** and confirm it renders before firing the batch. Presigned anchor URLs expire ~1h → re-host the anchor if a batch runs long (else "Failed to download the file" mid-batch). The intermittent fal "User is locked: Exhausted balance" is the proxy's upstream fal account (not your GooseWorks credits) → retry with backoff.
continuous full-frame creator clip; the product content lives in overlays, never in a full-frame cutaway. `per_beat_shots = 1`.
Seedance take (`generate_audio=ON`); this stage never adds a VO or a lip-sync pass. The creator clip's native audio plays continuous across the whole beat; the demo PiP's audio is **muted** (else the voice doubles).
creator: (a) the **title pill** top-center (persistent, `title_pill.on=true` — carries the listicle title, kept short to fit one line); (b) the **DEMO PiP** top-right; (c) the **product card** bottom. Hook + CTA carry the **title pill only**.
never AI-regenerated) — OR, for a brand w
Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Repo: gooseworks-ai/goose-skills
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Generate a single photoreal or designed image with OpenAI gpt-image via fal.ai. Supports gpt-image-1 (default, fixed sizes — the FAL fallback for Higgsfield's…
Generate an instrumental music bed via ElevenLabs Music, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Trims any sparse intro, loudnorm, fades…
Image-to-video (or text-to-video) via any FAL video model (Kling, Seedance, Veo), ROUTED THROUGH THE GooseWorks fal-proxy so the call bills the Ads agent. The…
Generate a voiceover (VO) clip via ElevenLabs text-to-speech, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Voice id + script text come from…
Scrape competitor ads from Google Ads by domain. Returns ad creatives, formats, and campaign details. Use for competitive ad research and messaging analysis.