Claude Skill

render-cgi-sizzle

Assemble a 3D-CGI app sizzle — nano-banana CGI plates (blank-glow floating phone + smoky-black studio + amaranth rim-light + placeholder burst shapes) plus PIL compositing of the REAL App Store screenshots onto the bezel + burst-out overlays, driven by Kling 3.0 i2v steady-float

LLM Mart · 0 points · 7 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download gooseworks-ai-goose-skills-skills_ads_capabilities_render-cgi-sizzle-e1592ee.zip · 12 KB
Part of gooseworks-ai/goose-skills — 44 skills

Install

skills CLI npx skills add https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/capabilities/render-cgi-sizzle
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install gooseworks-ai-goose-skills@llmmart
Git git clone https://github.com/gooseworks-ai/goose-skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole gooseworks-ai/goose-skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

render-cgi-sizzle

Assembles the 3D-CGI app sizzle video format: a gold-trimmed phone floats in a smoky-black studio while six app features demo one per beat — each beat bursts REAL App Store UI elements out of the phone in 3D with amaranth rim-light + bokeh, then everything collapses back into the screen at a climax ("200+ classes. One app.") + a brand end card over a premium-tech bed. It reads as an Apple-keynote product film, not UGC and not a physical-product shoot.

This capability ships the recipe (scripts/config.example.json) + a config→step map (scripts/PIPELINE.md) + the FREE-assembly how-to (scripts/README.md). It documents the FREE, deterministic assembly between the paid model calls:

  • nano-banana CGI plates (paid, separate cap) render only the phone shell + smoky-black studio + amaranth rim-light + bokeh + placeholder burst shapes; the screen is left a blank warm glow on purpose, and every plate is --anchored on beat 1 so the phone/studio stay identical across beats.
  • PIL real-UI compositing (FREE) — auto-detect the bright phone-screen bbox in each plate and feather the REAL App Store screenshot into the bezel → scene-NN-composite.png; bake real burst-out overlays (e.g. climax instructor portrait tiles, rim-light baked before rotation) around the plate. The on-screen UI + faces + wordmark are ALWAYS real assets — never AI-rendered, so no claim is invented and nothing reads fake.
  • Kling 3.0 i2v steady-float (paid, separate cap) drives each composite; the burst-out pops/settles while the phone + screen stay locked. Any beat Kling garbles drops to a FREE Ken-Burns FFmpeg push-in (zoompan, heavier on the climax) — the shipped demo used this path for the feature beats.
  • Assembly + finalize (FREE) — dice + intercut concat (timeline locked from the measured VO durations), audio mix (sidechain-duck the music under VO, loudnorm -14 LUFS master), PIL brand end card (real wordmark, never AI), then 1.15x speed + anti-AI grain master.

See scripts/README.md for the full FREE-assembly detail and scripts/PIPELINE.md for the config-field → source-step map.

Run

Config-and-PIPELINE capability (no re-built runnable pipeline here). Copy scripts/config.example.json → config.json, edit the brand/beats/screens, and follow scripts/PIPELINE.md:

VO first (locks the timeline) → nano-banana CGI plates → PIL screen composites → burst-climax overlays → Kling i2v clips (Ken-Burns fallback per garbled beat) → PIL end card → captions → sidechain-ducked mix → 1.15x speed + grain.

Output: 1080x1920, ~22.6s H.264 (+ AAC music). 6 feature beats + PIL end card.

Contract

  • REAL UI, always PIL — never AI. Every app screen, instructor face, and the wordmark is the real asset composited via PIL. AI plates only ever render the phone shell, studio, bokeh, and placeholder burst shapes. This is the format's whole credibility and the guard against invented claims.
  • Kling for the float, Ken-Burns fallback per beat. If a Kling beat garbles the burst-out UI, distorts the phone, or animates the screen, fall that beat to a FREE Ken-Burns push-in — never ship a garbled beat.
  • Anchor every plate on beat 1 so the phone/studio read identical across beats (one shoot).
  • Timeline locked from the measured VO durations, never planned word counts.
  • The paid steps — nano-banana plates, Kling 3.0 i2v beats, ElevenLabs VO + music — are separate capabilities (create-image-fal, create-video-fal, create-vo-elevenlabs, create-music-elevenlabs); the recipe orchestrates them and gates the spend.
Files (goose-skills)
  • scripts
    • config.example.json 12.7 KB
      {
        "_comment": "MasterClass 'App Sizzle (3D CGI)' \u2014 the worked example (clients/masterclass/ad-runs/run-03-run-03). Copy to config.json and edit. A ~22.6s premium 3D-CGI app-demo sizzle: a gold-trimmed phone floats in a smoky-black studio; 6 app features demo in sequence \u2014 each bursts REAL App Store UI elements outward in 3D with amaranth rim-light + bokeh, then settles back into the phone at the climax. 1080x1920 9:16. ALL on-screen UI is composited via PIL from real App Store screenshots \u2014 NEVER AI-rendered. Per beat: a nano_banana_2 CGI plate (blank-glow phone + placeholder burst-out shapes) -> PIL screen composite (real screenshot onto the bezel) -> kling3_0 i2v steady-float clip (Ken-Burns FFmpeg fallback if Kling garbles the burst-out UI). VO durations are LOCKED from the rendered ElevenLabs audio before the timeline is cut. Final is sped 1.15x + anti-AI grain.",
        "brand_name": "MasterClass",
        "width": 1080,
        "height": 1920,
        "fps": 24,
        "final_speed": 1.15,
        "target_duration_sec": 22.6,
        "studio_look": {
          "background_hex": "#0A0A0A",
          "rim_light_hex": "#E32652",
          "rim_light_direction": "upper-left",
          "phone": "single iPhone 15 Pro, gold/champagne titanium frame, floating center-frame at ~5-12 degree tilt toward camera, screen ON showing only a uniform warm glow (UI composited in post)",
          "bokeh": "warm amaranth sparkles + a few cool-white highlight orbs drifting in the empty space",
          "register": "Apple-keynote 3D CGI product render \u2014 glossy bezel reflections, soft ground shadow, premium luxury grade, no people, no hands, no faces, no English text on the plate",
          "reference_pin": "Pinterest pin 1119566788643692467 ('Ultra-Smooth 3D CGI Advertisement'), re-paletted from champagne studio -> smoky-black + amaranth"
        },
        "cgi_plate": {
          "model": "nano_banana_2",
          "provider": "fal",
          "base_prompt": "Premium 3D CGI advertising still, 9:16 vertical product render. A modern smartphone is the subject, photographed from DIRECTLY IN FRONT so we see the FULL DISPLAY SCREEN facing us. The phone floats centered in frame, tilted only 5 degrees left. The DISPLAY SCREEN is ON and shows ONLY a uniform soft warm glow \u2014 completely blank, NO icons, NO UI, NO text. Slim gold/champagne titanium edges catching warm light. SETTING: smoky-black studio backdrop (#0A0A0A), soft amaranth-red rim-light (#E32652) raking from upper-left. Warm amaranth bokeh sparkles + cool-white highlight orbs drift around the phone. Faint window-stripe shadows on the dark floor. LOOK: Apple-keynote 3D CGI product render. Glossy bezel reflections. Soft realistic ground shadow. Premium luxury feel. NEGATIVE: NO back of phone, NO camera lenses, NO people, NO faces, NO English text, NO logos, NO multiple phones, NO furniture.",
          "anchor": "beat 1 plate is generated first, then beats 2-6 are anchored on it (--anchor scene-01-plate) so the phone/studio stay identical across beats; each beat appends its burst-out element layer to base_prompt"
        },
        "screen_composite": {
          "method": "PIL \u2014 auto-detect the bright warm phone-screen bbox in the plate, resize the real App Store PNG to fit, warm-tint 6%, brightness +5%, feather into a rounded-rect mask so it sits inside the bezel",
          "hard_rule": "the on-screen UI (instructor faces, course cards, video tiles, brand poster) is ALWAYS the real App Store screenshot \u2014 never AI-rendered. Instructor portraits are the real Cuban/Ramsay/Perel App Store faces."
        },
        "beats": [
          {
            "id": "beat-01-discovery",
            "label": "Discovery \u2014 For You feed",
            "screen": "screen-01.png",
            "screen_role": "MC 'For You' tab",
            "burst_out": "3 glass-morphic instructor portrait tiles (Cuban, Ramsay, Perel \u2014 REAL faces from screen-01) 3D-pop out toward camera at three depths with parallax",
            "burst_out_source": "real_screenshot_pil",
            "plate_element_layer": "placeholder rectangular glass-morphic tiles popping out toward camera at different depths; real portraits composited in PIL post",
            "kling_motion": "Steady cinematic locked-tripod 3D camera, no shake no wobble. Phone holds centered; three instructor portrait tiles gently 3D-pop outward toward camera, settling at three depths with parallax. Warm amaranth bokeh drifts upward. Phone screen content stays exactly as shown.",
            "kenburns_fallback": "slow zoom 1.00->1.06 push-in on the full-bleed App Store screen (build_v2_clips.py)",
            "vo": "Two hundred world-class instructors. One feed.",
            "vo_actual_duration_sec": 3.71,
            "t_start_sec": 0.0,
            "t_end_sec": 4.11
          },
          {
            "id": "beat-02-library",
            "label": "Library \u2014 catalog breadth",
            "screen": "screen-02.png",
            "screen_role": "MC Library",
            "burst_out": "a deck of 5-7 course thumbnail cards fans out in 3D like a magician spreading cards, each catching the amaranth rim-light",
            "burst_out_source": "real_screenshot_pil",
            "plate_element_layer": "fan of 5-7 rectangular glass-morphic placeholder cards spread like a hand of playing cards at varied depth/rotation; real course tiles composited from screen-02 in PIL",
            "kling_motion": "Phone holds steady at center; the fan of course-thumbnail cards spreads wider across the screen plane like a magician's deck cascading, each card rotating a few degrees toward camera and catching the rim-light. Phone screen content stays exactly as shown.",
            "kenburns_fallback": "slow zoom 1.00->1.06 push-in on screen-02",
            "vo": "Cooking. Writing. Photography. Business. Strategy.",
            "vo_actual_duration_sec": 4.99,
            "t_start_sec": 4.11,
            "t_end_sec": 9.4
          },
          {
            "id": "beat-03-bite-size",
            "label": "Bite-size lessons / Up Next",
            "screen": "screen-03.png",
            "screen_role": "MC Lesson player",
            "burst_out": "one large video-thumbnail tile ejects forward toward camera + two 'Up Next' pills cascade in behind from the right edge",
            "burst_out_source": "real_screenshot_pil",
            "plate_element_layer": "one large portrait glass-morphic video tile ejecting forward + two stacked pill placeholders cascading from the right",
            "kling_motion": "Phone holds steady; the video tile eases forward toward camera with a slight grow-in; the two Up-Next pills gently cascade and settle; sparkles drift down. Phone screen content stays exactly as shown.",
            "kenburns_fallback": "slow zoom 1.00->1.06 push-in on screen-03",
            "vo": "Lessons that fit a coffee break.",
            "vo_actual_duration_sec": 1.72,
            "t_start_sec": 9.4,
            "t_end_sec": 11.62
          },
          {
            "id": "beat-04-cross-device",
            "label": "Cross-device orbit",
            "screen": "screen-04.png",
            "screen_role": "MC 'My Learning'",
            "burst_out": "small generic 3D iPad + Apple TV remote + MacBook mockups orbit the phone clockwise (one rotation across ~3.5s), parallax so iPad passes in front, remote behind",
            "burst_out_source": "ai_generic_devices",
            "plate_element_layer": "generic iPad/TV-remote/laptop mockups orbiting the phone at mid-depth with BLANK screens (no UI, no text \u2014 would conflict with the phone screen)",
            "kling_motion": "Phone holds locked at center; the three device mockups slowly rotate clockwise in orbit at constant velocity, parallaxing \u2014 iPad front-left nearer camera, TV remote behind, MacBook crossing front-right. Phone screen content stays exactly as shown.",
            "kenburns_fallback": "slow zoom 1.00->1.06 push-in on screen-04",
            "vo": "Mobile. Tablet. Web. TV.",
            "vo_actual_duration_sec": 3.97,
            "t_start_sec": 11.62,
            "t_end_sec": 15.99
          },
          {
            "id": "beat-05-audio-offline",
            "label": "Audio + Offline",
            "screen": "screen-05.png",
            "screen_role": "MC Audio player",
            "burst_out": "a large glass headphone icon + a glass download-arrow icon eject outward from the phone with soft glow trails, settling left and right",
            "burst_out_source": "ai_generic_icons",
            "plate_element_layer": "large translucent glass headphone icon (left) + glass download-arrow icon (right) ejecting outward, glowing from within, PURELY ICONIC SHAPES with NO text labels",
            "kling_motion": "Phone holds steady; the glass headphone and download-arrow icons glow brighter and pulse outward a tiny amount with warm glow trails toward the phone; sparkles drift. Phone screen content stays exactly as shown.",
            "kenburns_fallback": "slow zoom 1.00->1.06 push-in on screen-05",
            "vo": "Listen on the run. Download for the flight.",
            "vo_actual_duration_sec": 2.35,
            "t_start_sec": 15.99,
            "t_end_sec": 18.94
          },
          {
            "id": "beat-06-the-pitch",
            "label": "The pitch \u2014 CLIMAX",
            "screen": "screen-06.png",
            "screen_role": "MC brand poster ('LEARN FROM THE BEST. BE YOUR BEST.')",
            "burst_out": "NO new burst \u2014 all floating elements from prior beats gently collapse BACK into the phone screen; amaranth rim-light intensifies, bokeh thickens; optional baked burst-climax portrait tiles ring the phone (build_burst_climax.py)",
            "burst_out_source": "collapse_in",
            "plate_element_layer": "phone tilted ~9 degrees toward camera (subtle push-in), no floating elements outside the phone (collapsed in), rim-light INTENSIFIED, denser bokeh \u2014 reads as the climax hero composition",
            "kling_motion": "Phone holds in a hero composition; the amaranth halo slowly intensifies and bokeh thickens for a climax payoff; the phone subtly nudges a few degrees closer to camera (very slow push-in). Phone screen content stays exactly as shown.",
            "kenburns_fallback": "heavier zoom 1.00->1.10 push-in on the scene-06 CGI plate (visual punctuation)",
            "vo": "Two hundred plus classes. One app.",
            "vo_actual_duration_sec": 3.0,
            "vo_gain_db": 2,
            "is_climax": true,
            "t_start_sec": 18.94,
            "t_end_sec": 23.0
          }
        ],
        "end_card": {
          "method": "PIL composite (no AI)",
          "canvas_hex": "#0A0A0A",
          "amaranth_bar": {
            "hex": "#E32652",
            "width_px": 800,
            "height_px": 6,
            "y": 960
          },
          "wordmark": {
            "asset": "masterclass-wordmark.svg",
            "width_px": 480,
            "baseline_y": 900
          },
          "tagline": {
            "text": "Learn from the best.",
            "font": "Montserrat",
            "size_px": 56,
            "weight": "medium",
            "color": "#FFFFFF",
            "y": 1020
          },
          "vignette": true,
          "dwell_sec": 3.0,
          "captions_suppressed": true
        },
        "voiceover": {
          "provider": "elevenlabs",
          "voice": "Eryn",
          "voice_id": "dMyQqiVXTU80dDl2eNK8",
          "model_id": "eleven_v3",
          "voice_settings": {
            "stability": 0.45,
            "similarity_boost": 0.75,
            "style": 0.1,
            "use_speaker_boost": true
          },
          "direction": "Confident, declarative, restrained. Apple-keynote spec-sheet cadence. NOT lyrical, NOT breathy. Each line lands beat-for-beat with the on-screen feature.",
          "note": "render all 6 cues FIRST, ffprobe each MP3, then lock the beat windows from the MEASURED durations (never from planned word counts)"
        },
        "music": {
          "provider": "elevenlabs_music",
          "prompt": "A premium tech advertisement underscore, cinematic and modern. Slow build over ~27 seconds. Sparse low piano notes establish the first 4 seconds. Add soft warm synth pad at 4s. Gentle pulsing rhythm (no drums \u2014 synth pulses) enters at 12s. Subtle string swell at 18s. Full warm string + piano resolution at 22s. NO vocals, NO lyrics, NO chant. Hopeful, confident, premium. Apple keynote register. Key of D major.",
          "trim_intro_sec": 2.5,
          "force_instrumental": true,
          "no_artist_names": true
        },
        "audio_mix": {
          "vo_bus": "loudnorm -23 LUFS, de-ess, high-pass 80Hz",
          "music_bus": "loudnorm -23 LUFS, sidechain-compress with VO as key (ratio 20:1, attack 5ms, release 250ms), duck -9dB under VO",
          "climax_boost": "+2dB VO on beat-06",
          "master_bus": "loudnorm -14 LUFS (IG/TikTok safe), -1.5 dBTP true peak"
        },
        "captions": {
          "style": "klap_restrained_white_sans",
          "treatment": "line-by-line, one cue per beat, NO karaoke pills (MC premium register)",
          "font": "Helvetica Neue 44, white, thin outline, lower-third",
          "suppress_on_end_card": true,
          "timing": "fade in +0.05s after VO start, fade out +0.20s after VO end"
        },
        "finalize": {
          "speed": "1.15x (setpts=PTS/1.15 on video, atempo=1.15 on audio, pitch preserved) -> 26.0s master becomes ~22.6s",
          "grain": "anti-AI grain pass on the final master",
          "codec": "1080x1920 H.264, AAC 256k"
        },
        "post_production": {
          "music": {
            "default": "on",
            "note": "cinematic bed under the VO, default on"
          },
          "captions": {
            "default": "on",
            "note": "restrained Klap line-by-line captions, default on"
          },
          "end_card": {
            "default": "on",
            "note": "real-wordmark brand end card, default on"
          }
        }
      }
      
    • PIPELINE.md 3.7 KB
      # PIPELINE — config → source steps
      
      This molecule ships the **recipe** (`config.example.json`), not a re-built runnable
      pipeline. The engine is the working scripts from the source run
      `clients/masterclass/ad-runs/run-03-run-03/working/` (plus its `edits/` finalize).
      This maps each config field to the step that consumes it.
      
      ## Order of operations
      
      VO first (locks the timeline) → CGI plates → PIL screen composites → burst-climax →
      Kling clips (Ken-Burns fallback per garbled beat) → end card → captions → mix → 1.15x + grain.
      
      ## Field → step map
      
      | config field | source step | what it does |
      |---|---|---|
      | `voiceover.*` (voice_id, model_id, voice_settings, beats[].vo) | `render_eryn_vo.sh` | One curl per beat → MP3 → `ffprobe` duration. The measured durations become `beats[].vo_actual_duration_sec` and drive the beat windows. |
      | `studio_look.*`, `cgi_plate.*`, `beats[].plate_element_layer` | `gen_plates.py` | nano_banana_2: beat-1 plate first (blank warm-glow phone in a smoky-black + amaranth studio), then beats 2-6 `--anchor`ed on it, each appending its per-beat burst-out placeholder layer. Screen is left blank on purpose. |
      | `beats[].screen`, `screen_composite.*` | `composite_screens.py` | PIL: auto-detect the bright phone-screen bbox in each plate, resize + warm-tint + brightness-bump + feather the **real** App Store screenshot into the bezel → `scene-NN-composite.png`. Never AI-render the UI. |
      | `beats[].burst_out` where `burst_out_source: real_screenshot_pil` (climax portraits) | `build_burst_climax.py` | PIL: real instructor portrait tiles with rim-light baked BEFORE rotation (so frame + portrait rotate as one unit) + amaranth glow + drop shadow, ringed around the climax plate. |
      | `beats[].kling_motion`, `cgi_plate.provider` | `gen_clips.py` | Kling 3.0 i2v (fal): each composite → a steady-float clip; burst-out pops/settles while the phone + screen stay locked (`--mode std`, no-shake negative prompt). PAID, largest spend. |
      | `beats[].kenburns_fallback`, `fps` | `build_v2_clips.py` | FFmpeg `zoompan` Ken-Burns push-in per beat (heavier zoom on the climax) — the **fallback** for any beat Kling garbles. This is the path the shipped demo master used. |
      | `end_card.*` | PIL end-card composite (in `build_v2_clips.py` / edits) | Smoky-black canvas + amaranth bar + wordmark SVG (480px) + tagline (Montserrat 56px) + vignette → a static `end-card.png` held for `dwell_sec`. Captions suppressed here. |
      | `captions.*` | `build_captions.py` | Restrained line-by-line ASS: one cue per beat, offsets from the measured VO windows, fade in +0.05s / out +0.20s, no karaoke pills, suppressed on the end card. |
      | `music.*`, `audio_mix.*` | ElevenLabs Music + FFmpeg mix (`audio/`) | Premium-tech bed → trim the sparse intro → loudnorm → sidechain-duck under VO (+2dB VO on the climax) → master loudnorm -14 LUFS. |
      | `finalize.*` (`speed`, `grain`, `codec`) | FFmpeg finalize (`edits/`) | Concat the beat clips + end card, then `setpts=PTS/1.15` (video) + `atempo=1.15` (audio, pitch preserved) → ~22.6s, plus the anti-AI grain pass → `master-final-v4-compressed.mp4`. |
      
      ## Notes
      
      - **Two model surfaces only:** nano_banana_2 (plates) + Kling 3.0 (float clips). Everything
        else (screen composites, burst-climax, end card, captions, mix, finalize) is free/deterministic.
      - **The demo master is the Ken-Burns cut.** `build_v2_clips.py` (push-in on the real screens +
        CGI climax plate) is what shipped as `master-final-v4-compressed.mp4`; `gen_clips.py` is the
        intended Kling primary, kept for beats that hold up under i2v.
      - **Anchor discipline:** all six plates share the beat-1 phone/studio via `--anchor`, so the
        sequence reads as one continuous product film.
      
    • README.md 4.3 KB
      # render-cgi-sizzle — FREE assembly
      
      This capability ships the **recipe** (`config.example.json`) + a config→step map
      (`PIPELINE.md`) for the 3D-CGI app-sizzle format, plus this note documenting the
      **FREE, deterministic assembly** — everything between the paid model calls. The paid
      steps (nano-banana CGI plates, Kling i2v float clips, ElevenLabs VO + music) are separate
      capabilities; the recipe orchestrates and gates them. Everything below is $0
      (PIL + FFmpeg), keeps the real UI + wordmark pixel-crisp, and never makes an AI or paid call.
      
      ## What's FREE here
      
      ### 1. PIL real-UI composite (the format's whole credibility)
      The nano-banana plate renders only the **phone shell, smoky-black studio, amaranth
      rim-light, bokeh, and placeholder burst-out shapes** — the screen is left a blank warm
      glow on purpose. Then, deterministically in PIL:
      
      - **Screen composite** — auto-detect the bright warm phone-screen bbox in each plate,
        resize the **real App Store screenshot** to fit, warm-tint ~6%, brightness +5%, and
        feather it into a rounded-rect mask so it sits inside the bezel → `scene-NN-composite.png`.
        The on-screen UI (feeds, cards, players, instructor faces) is ALWAYS the real screenshot —
        never AI-rendered, so no claim can be invented and nothing reads fake.
      - **Burst-out overlays** — where the burst-out element is real UI (e.g. the climax
        instructor portrait tiles), bake the real portraits as glass-morphic tiles with the
        rim-light baked BEFORE rotation (so frame + portrait rotate as one unit) + amaranth glow +
        drop shadow, ringed around the plate. Where the burst-out is a generic device/glass icon,
        the AI plate's placeholder shape is used as-is (no real UI to protect).
      
      ### 2. Ken-Burns FFmpeg fallback (per beat)
      Kling 3.0 i2v is the intended primary for the steady-float motion, but any beat where Kling
      garbles the burst-out UI, distorts the phone, or animates the screen content drops to a FREE
      Ken-Burns push-in: FFmpeg `zoompan` slow zoom (`1.00→1.06` on feature beats, heavier
      `1.00→1.10` on the climax) over the composite. The shipped demo master used this path for the
      feature beats — don't ship a garbled Kling beat when the free push-in is clean.
      
      ### 3. Dice + intercut concat
      Normalize every beat clip to one fps/codec, then concat the beats in order + the end-card
      clip. Hard assembly, no dissolves; the timeline is locked from the **measured VO durations**
      (each beat window = its `ffprobe`'d MP3 length), so the cut lands beat-for-beat with the VO.
      
      ### 4. Audio mix (sidechain duck + loudnorm)
      - VO bus: `loudnorm -23 LUFS`, de-ess, high-pass 80Hz.
      - Music bus: premium-tech bed → trim the sparse intro (`music.trim_intro_sec`, default 2.5s)
        → `loudnorm -23 LUFS` → **sidechain-compress with the VO as key** (ratio 20:1, attack 5ms,
        release 250ms), ducking ~-9dB under VO; +2dB VO on the climax beat.
      - Master bus: `loudnorm -14 LUFS` (IG/TikTok safe), -1.5 dBTP true peak.
      
      ### 5. End card (PIL, never AI)
      Smoky-black canvas + amaranth bar + the brand's **real wordmark** (SVG/PNG, never
      AI-rendered) + tagline (Montserrat) + vignette → a static `end-card.png` held for
      `end_card.dwell_sec`. Captions are suppressed here (the composited text is the message).
      
      ### 6. Finalize — 1.15x speed + anti-AI grain
      Concat done, apply `setpts=PTS/1.15` (video) + `atempo=1.15` (audio, pitch preserved) to
      tighten the ~26s cut to ~22.6s, then an anti-AI grain pass → the H.264 (+ AAC) master.
      
      ## Contract
      
      - Deterministic + FREE (PIL + FFmpeg); no paid calls, no AI-rendered UI/faces/wordmark.
      - The screen is ALWAYS the real App Store screenshot composited via PIL; the plate's screen
        is left blank on purpose. If AI leaks UI/a face onto the screen, regenerate the plate with a
        blank warm-glow screen and re-composite.
      - Phone/studio stay identical across beats (the paid plates are `--anchor`ed on beat 1;
        preserved here). Ken-Burns is the per-beat fallback for any garbled Kling beat.
      - Timeline is locked from the measured VO durations, never planned word counts.
      - The paid steps — nano-banana plates, Kling 3.0 i2v beats, ElevenLabs VO + music — are
        separate capabilities (create-image-fal, create-video-fal, create-vo-elevenlabs,
        create-music-elevenlabs); the recipe orchestrates them and gates the spend.
      
      See `PIPELINE.md` for the full config-field → source-step map.
      
  • tests
    • smoke-test.md 1.4 KB
      # Smoke Test
      
      Copy `scripts/config.example.json` → `config.json`, follow `scripts/PIPELINE.md` for the
      cgi-app-sizzle format — the FREE assembly documented in `scripts/README.md` runs the PIL
      real-UI composite, Ken-Burns FFmpeg fallback, dice+intercut concat, sidechain-ducked mix,
      PIL end card, and 1.15x speed + grain finalize. Output 1080x1920, ~22.6s, deterministic.
      
      Pass when:
      - **PIL screen composite** feathers the REAL App Store screenshot into each plate's phone
        bezel → `scene-NN-composite.png`; the on-screen UI + faces are the real screenshot, never
        AI-rendered, and the plate's screen was a blank warm glow.
      - **Ken-Burns fallback** produces a clean FFmpeg `zoompan` push-in for any beat Kling garbles
        (heavier zoom on the climax); no garbled Kling beat ships.
      - **Concat** joins the beats (order + timeline locked from measured VO durations) + the PIL
        end card into one normalized-fps master.
      - **Audio mix** sidechain-ducks the music under VO and loudnorm's the master to -14 LUFS.
      - **End card** is a PIL composite of the real wordmark (never AI); captions suppressed there.
      - **Finalize** applies 1.15x speed (pitch preserved) + anti-AI grain → H.264 (+ AAC).
      
      The FREE assembly (PIL + FFmpeg) makes NO paid or AI calls. The paid steps — nano-banana
      plates, Kling 3.0 i2v beats, ElevenLabs VO + music — are separate capabilities the recipe
      orchestrates and gates.
      
  • SKILL.md 4.4 KB
    ---
    name: render-cgi-sizzle
    description: Assemble a 3D-CGI app sizzle — nano-banana CGI plates (blank-glow floating phone + smoky-black studio + amaranth rim-light + placeholder burst shapes) plus PIL compositing of the REAL App Store screenshots onto the bezel + burst-out overlays, driven by Kling 3.0 i2v steady-float per beat with a per-beat Ken-Burns FFmpeg push-in fallback when Kling garbles the UI, then VO/music mix (sidechain duck, loudnorm) + 1.15x speed + anti-AI grain finalize. The on-screen UI, instructor faces, and wordmark are ALWAYS real assets composited via PIL — never AI-rendered. The paid steps (plates, i2v clips, VO, music) are separate capabilities; this ships the config + PIPELINE + FREE assembly and the recipe orchestrates the spend. Use for the cgi-app-sizzle video format.
    status: active
    ---
    
    # render-cgi-sizzle
    
    Assembles the **3D-CGI app sizzle** video format: a gold-trimmed phone floats in a
    smoky-black studio while six app features demo one per beat — each beat bursts REAL App
    Store UI elements out of the phone in 3D with amaranth rim-light + bokeh, then everything
    collapses back into the screen at a climax ("200+ classes. One app.") + a brand end card
    over a premium-tech bed. It reads as an Apple-keynote product film, not UGC and not a
    physical-product shoot.
    
    This capability ships the **recipe** (`scripts/config.example.json`) + a config→step map
    (`scripts/PIPELINE.md`) + the FREE-assembly how-to (`scripts/README.md`). It documents the
    FREE, deterministic assembly between the paid model calls:
    
    - **nano-banana CGI plates** (paid, separate cap) render only the phone shell + smoky-black
      studio + amaranth rim-light + bokeh + placeholder burst shapes; the screen is left a blank
      warm glow on purpose, and every plate is `--anchor`ed on beat 1 so the phone/studio stay
      identical across beats.
    - **PIL real-UI compositing (FREE)** — auto-detect the bright phone-screen bbox in each
      plate and feather the REAL App Store screenshot into the bezel → `scene-NN-composite.png`;
      bake real burst-out overlays (e.g. climax instructor portrait tiles, rim-light baked before
      rotation) around the plate. The on-screen UI + faces + wordmark are ALWAYS real assets —
      never AI-rendered, so no claim is invented and nothing reads fake.
    - **Kling 3.0 i2v steady-float** (paid, separate cap) drives each composite; the burst-out
      pops/settles while the phone + screen stay locked. Any beat Kling garbles drops to a **FREE
      Ken-Burns FFmpeg push-in** (`zoompan`, heavier on the climax) — the shipped demo used this
      path for the feature beats.
    - **Assembly + finalize (FREE)** — dice + intercut concat (timeline locked from the measured
      VO durations), audio mix (sidechain-duck the music under VO, loudnorm -14 LUFS master), PIL
      brand end card (real wordmark, never AI), then **1.15x speed + anti-AI grain** master.
    
    See `scripts/README.md` for the full FREE-assembly detail and `scripts/PIPELINE.md` for the
    config-field → source-step map.
    
    ## Run
    
    Config-and-PIPELINE capability (no re-built runnable pipeline here). Copy
    `scripts/config.example.json` → `config.json`, edit the brand/beats/screens, and follow
    `scripts/PIPELINE.md`:
    
    VO first (locks the timeline) → nano-banana CGI plates → PIL screen composites → burst-climax
    overlays → Kling i2v clips (Ken-Burns fallback per garbled beat) → PIL end card → captions →
    sidechain-ducked mix → 1.15x speed + grain.
    
    Output: 1080x1920, ~22.6s H.264 (+ AAC music). 6 feature beats + PIL end card.
    
    ## Contract
    
    - **REAL UI, always PIL — never AI.** Every app screen, instructor face, and the wordmark is
      the real asset composited via PIL. AI plates only ever render the phone shell, studio, bokeh,
      and placeholder burst shapes. This is the format's whole credibility and the guard against
      invented claims.
    - **Kling for the float, Ken-Burns fallback per beat.** If a Kling beat garbles the burst-out
      UI, distorts the phone, or animates the screen, fall that beat to a FREE Ken-Burns push-in —
      never ship a garbled beat.
    - **Anchor every plate on beat 1** so the phone/studio read identical across beats (one shoot).
    - **Timeline locked from the measured VO durations**, never planned word counts.
    - The paid steps — nano-banana plates, Kling 3.0 i2v beats, ElevenLabs VO + music — are
      separate capabilities (create-image-fal, create-video-fal, create-vo-elevenlabs,
      create-music-elevenlabs); the recipe orchestrates them and gates the spend.
    
  • skill.meta.json 311 B
    {
      "slug": "render-cgi-sizzle",
      "category": "capabilities",
      "domain": "ads",
      "tags": [
        "ads"
      ],
      "installation": {
        "base_command": "npx goose-skills install render-cgi-sizzle",
        "supports": [
          "claude",
          "cursor",
          "codex"
        ]
      },
      "requires_skills": [
        "watch"
      ]
    }
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related