$npx -y skills add gooseworks-ai/goose-skills --skill render-stopmotion-hand-swatch-cycleAssemble a stop-motion hand-swatch-cycle product-demo ad from a config — a sequence of still PLATES (one hand swiping a single-barrel cosmetic across a cream skin-patch, the barrel + swatch changing per plate while the hand, background, crop, and lighting stay locked) is PNG→mp4
| 1 | # render-stopmotion-hand-swatch-cycle |
| 2 | |
| 3 | Assemble a **stop-motion hand-swatch-cycle** ad from a config: a fast, tactile product demo where a |
| 4 | single hand swipes ONE cosmetic barrel across a cream "skin-patch" test surface, and the shade of |
| 5 | the barrel AND the painted swatch stripe changes on every frame while the hand, background, crop, |
| 6 | and lighting hold still — cycling the variant family so the viewer self-identifies their match, then |
| 7 | a hero-pick payoff and a branded end card. This capability is the **FREE, deterministic assembly** — |
| 8 | the per-plate PNG→mp4 loop encode, the concat-demux, the end-card render, and the music mux. |
| 9 | |
| 10 | `scripts/config.example.json` is the worked example (DIBS Beauty "Pick Your Match", ~16.6s 1080×1920 |
| 11 | 9:16, ~24 cycle plates + finale beats + a 3s end card); `scripts/PIPELINE.md` maps every config |
| 12 | block to its source step and `scripts/README.md` documents the free assembly. |
| 13 | |
| 14 | ## Run |
| 15 | |
| 16 | This is the **FREE, deterministic** assembly stage — it spends nothing. The paid inputs are separate |
| 17 | capabilities — the master-anchor plate + the per-shade / motion / finale plates + the end-card hero |
| 18 | BG (`create-image-gpt-image-fal`, gpt-image-2 EDIT mode, each plate anchored to the SAME |
| 19 | master-anchor — never chained), and the music track (`create-music-elevenlabs`, or a brand-supplied |
| 20 | mp3). Given the ordered plate PNGs + per-plate holds + the end-card hero BG + the brand logo SVG + |
| 21 | the music track, `render-stopmotion-hand-swatch-cycle` loop-encodes each plate at its hold, |
| 22 | concat-demuxes with hard cuts into a silent master, appends the HTML-rendered end card, and muxes the |
| 23 | music under it → the master. Re-cuts (re-timed holds, a re-ordered cycle, a swapped end card) reuse |
| 24 | the existing plates / track and cost **$0**. |
| 25 | |
| 26 | ## Contract (the free assembly) |
| 27 | |
| 28 | - **Still plates, not i2v — held for tuned durations.** Each plate is a static PNG loop-encoded |
| 29 | (`ffmpeg -loop 1 -t <pose_hold_ms>`) to 1080×1920 @ 30fps crf18. This is stop-motion — discrete |
| 30 | held frames, no camera moves, no character animation. Do not animate the plates. |
| 31 | - **Fast stop-motion cadence, HARD cuts.** Motion / half-painted plates hold 150–250ms, per-shade |
| 32 | plates ~380ms (or ~1000ms for a slower cycle), hero / bookend beats 1100–1800ms; average ~380ms. |
| 33 | Concat-**demux** the plate mp4s in order with hard cuts (`ffmpeg -f concat`) — NO dissolves. The |
| 34 | frame-swap tactility is the whole point; a crossfade erases it. |
| 35 | - **Concat-demux, not filter_complex.** The plates are silent stills, so the `concat` demuxer over |
| 36 | the ordered plate list is correct and cheapest. (`filter_complex` is only needed when clips carry |
| 37 | mismatched audio — these don't.) |
| 38 | - **The music carries it — no VO.** A pre-sourced brand instrumental (128–130 BPM works well), |
| 39 | volume ≈0.4, fade in/out. Do not add a spoken voiceover or a second bed. |
| 40 | - **End card via Playwright HTML from the real logo SVG — never AI-render brand text.** A serif |
| 41 | tagline + sans subtitle + the real logo SVG composited over a hero product/swatch BG by an HTML |
| 42 | template (Chromium headless), rendered to a silent ~3s clip. A diffusion model garbles a wordmark. |
| 43 | - **Music plays UNDER the end card with a fade tail — no silent tail.** Mux the track over the whole |
| 44 | video including the end card, fade over the last ~0.5s so the video ends WITH the music. |
| 45 | - **FFmpeg composite, deterministic, FREE.** Loop-encode each plate, concat-demux on hard cuts, |
| 46 | append the end card, mux the music with a fade tail → a 1080×1920 h264+aac master (~16.6s). No paid |
| 47 | calls, no keys (beyond the Playwright/Chromium the end-card render needs). |