product-cf · v0.1.0 · 2026-06-14 · sha256 6a50c9cf603411cf

product-cf v0.1.0A

Immutable. This exact content is served forever at /api/v1/blob/6a50c9cf603411cf.

---
name: product-cf
description: Turn a single product photo into a CF-style (commercial) 9:16 vertical short — the product stays a pixel-perfect real cutout while the world moves around it (2.5D camera push, label light-sweep, liquid/particle B-roll intercut, beat-aligned cuts). Use when the operator has ONE product still (a beverage can, bottle, cosmetic, gadget) and wants an ad-feel Shorts/Reels/TikTok clip without distorting the product label or generating hands. Builds ON TOP of the music-video skill (reuses its beat detection, Pexels B-roll, shaders) — does not replace it.
license: MIT
compatibility: Requires ffmpeg, the music-video skill (and its deps: aubio CLI, jq, Pexels key or demo mode), and a rembg venv for background removal (PRODUCT_CF_VENV, default ~/.cache/melons-ai/venvs/product-cf). macOS or Linux.
metadata:
  authors: MelonS-Agents
  version: "0.1.0"
  pipeline-source: agents/missions/product-cf/run.sh
  builds-on: music-video
  spec: agentskills.io
  added: "2026-06-14"
allowed-tools: Bash(bash:*) Bash(ffmpeg:*) Bash(ffprobe:*) Bash(curl:*) Bash(jq:*) Read Write
---

# product-cf

Make a commercial-film-feel (CF) vertical short from **one product
photo**.  The defining constraint: **never regenerate the product.**
Generative video distorts labels and mangles hands — exactly the two
things a product ad cannot afford.  So the product stays a real,
pixel-perfect cutout and *the world moves around it*.

## Why a separate skill (not a music-video mode)

`music-video` is music-as-primary-audio + free-to-morph mood B-roll.
`product-cf` differs on all three split criteria:

| criterion       | music-video        | product-cf                      |
|-----------------|--------------------|---------------------------------|
| primary input   | a music file       | a product **photo**             |
| trigger intent  | "make a music vid" | "make an ad for this product"   |
| hard invariant  | none               | product label integrity (never morphs) |

So product-cf is its own skill, but it **reuses** music-video as a
black box for the parts that overlap (beat detection, Pexels B-roll,
9:16 render, shaders).  music-video's `run.sh` is never edited.

## The technique (compositing + 2.5D, no I2V on the product)

1. **Cutout** — `rembg` removes the background → product PNG with alpha.
2. **2.5D camera move** — product gets a slow push-in / drift; the
   background scene moves at a different rate → parallax depth.  Product
   pixels never change, only the virtual camera.
3. **Label light-sweep** — a specular highlight travels across the
   label, masked to the product alpha.  The "premium product shot" tell.
4. **Motion lives around the product, not on it** — splashes, ice,
   condensation, bokeh come from liquid B-roll (music-video's Pexels
   layer) **intercut** with the hero shot, or composited as foreground
   particles.  "Shaking / pouring / drinking" is *implied* via these
   cuts — the real product is never touched by a hand or liquid.
5. **Beat-synced assembly** — music-video supplies beat-aligned cut
   points; hero shots land on the strong beats, B-roll fills between.

## Usage

```
agents/missions/product-cf/run.sh <short_id> <product_image> [keywords_csv] [music_file]
```

- `<product_image>` — one still (png/jpg). Clean, single product, any background.
- `keywords_csv` — mood/B-roll keywords for the world around the product
  (e.g. `"water splash,ice cubes,citrus slice,condensation droplets,studio light"`).
- `music_file` — optional; falls back to music-video demo music.

## What it produces

- A **1080×1920** mp4, beat-aligned, product label intact throughout.
- Intermediate hero clip(s) under the mission `outputs/` for review
  before the full assembly.

## Stages worth knowing

- `scripts/product-hero.sh` — the cutout + 2.5D + light-sweep core
  (standalone-testable; produces one hero clip from one photo).
- `agents/missions/product-cf/run.sh` — orchestrator: hero layer +
  music-video B-roll base → beat-synced final.

## Upgrade paths (not default)

- **Local I2V** (Wan2.2 / LTX) for *background scenes only* — never the
  product body (label-distortion risk).
- **Paid I2V** (Kling / Runway) for product motion — best quality but
  **money-firewall**: requires explicit operator confirmation.