---
tier: hero
reliability: 4.4 # presenter still .3 + i2v .3 + bria matte (alpha, ~21s, commercial-licensed) .9 + ffmpeg composite .9; one of the most reliable hero playbooks — Bria matting is fast + clean
---

# Green-Screen-Free Studio — any clip → any set ⭐

> Paste this whole file (with the BRIEF filled in) into Claude cowork, chat, or Code with the Storyboard MCP attached. Shoot a presenter on *any* background — a messy desk, a hotel room, a webcam — and drop them onto a clean broadcast set, a brand backdrop, or a city skyline. **No green screen, no studio.**

## What you'll get

- Your presenter clip, **cleanly matted** (Bria VRMBG 3.0 — commercial-use licensed), composited onto **N branded sets**.
- A **set-switcher** hero (one clip → studio → brand → city) and a **before/after** split that sells the effect.
- A subtle **licensed** music bed.

**The wow:** real green-screen-free keying — clean hair edges, kept desk props — in **~20 seconds of matting**, then composite onto any backdrop you generate. The whole "key + replace background" loop on one network, no chroma suit required.

**Reference run (our showcase):** ≈$1.5 · ≈8 min end-to-end · 1 clip → matte (Bria, ~21s, real alpha) → 3 sets + switcher + before/after. The cheapest + most reliable of the five flagships. See the [example](/chapters/greenscreen-free-studio-example.html).

## The caps

| Step | Cap |
|---|---|
| Presenter still (or use an uploaded photo) | `gpt-image` / `mai-image-2.5` |
| Animate to a talking/gesturing clip | `seedance-i2v` / `kling-v3-turbo-i2v` / `grok-imagine-video` |
| **Matte the background (the marquee)** | **`bria-video-bg-remove`** (VRMBG 3.0) — `background_color:'Transparent'` for a real alpha webm |
| Live / webcam keying | `bria-video-bg-remove-rt` (real-time tier) |
| Crisp fast alternative | `pixelcut-video-bg-remove` |
| Branded backdrops | `gpt-image` (clean, empty sets) |
| Composite + set-switcher + bed | `ffmpeg` + `sonilo-t2m` (licensed) |

## Tell the agent about the spot

```yaml
presenter:        # OPTIONAL image/clip URL; omit to generate a presenter
script_or_motion: # what they say/do (for the i2v if generating)
sets:             # backdrops, e.g. ["broadcast studio", "warm brand gradient", "city skyline at dusk"]
matte_engine:     # bria (default) | bria-rt (live) | pixelcut
music_brief:      # bed mood (optional)
aspect:           # 9:16 | 1:1 | 16:9
launch_slug:      # e.g. greenscreen-free-studio
```

## How the agent should run this (interaction contract)

1. **CONFIRM (1 message).** Restate presenter + sets + matte engine. Cheap pipeline (~$1–2) — start without a long gate.
2. **SOURCE CLIP.** Generate/accept the presenter still → animate to a ~5s clip (`seedance-i2v`), OR take the user's uploaded clip (host local files via `scripts/host-local-file.sh`).
3. **MATTE.** `bria-video-bg-remove` with `background_color:'Transparent'` → an **alpha webm**. **Verify alpha** (decode one frame to RGBA; alpha extrema must include 0). Default (no color) bakes the background **black** — not keyable; always pass `'Transparent'`.
4. **BACKDROPS.** Generate N clean, **empty** sets with `gpt-image` (no people; match the aspect). Match the lighting direction to the presenter for realism.
5. **COMPOSITE.** ffmpeg overlay the alpha webm over each backdrop (`format=yuva420p` on the fg). Build a **set-switcher** (xfade between sets) + a **before/after** split. Add a ducked `sonilo-t2m` bed.
6. **DELIVER.** Set-switcher hero + before/after + per-set exports + one honest line.

## What can disappoint (cap ceilings)

- **Default output is opaque-on-black** — you MUST pass `background_color:'Transparent'` to get a usable alpha matte. (Named colors only: Transparent/Black/White/Gray/Red/Green/Blue/Yellow/Cyan/Magenta/Orange — no hex.)
- **Bria keeps connected foreground props** (the desk, mug, notebook in front of the presenter stay) — usually a plus, but frame the source so nothing unwanted touches the subject.
- **Lighting mismatch** between presenter and a generated set reads as fake — match the key-light direction + color temp in the backdrop prompt (we matched golden-hour rim light for the skyline set).
- **temp.bria.ai URLs expire** — download the matte immediately and re-host.

## When you're done

```
✅ Green-screen-free set: public/launches/{launch_slug}.html
✅ Matte (alpha) + N set composites + set-switcher + before/after
Total spent: $X.XX
```

## What to do next
1. **Live tier** — for a webcam/stream, swap to `bria-video-bg-remove-rt`.
2. **More sets** — each new backdrop is one `gpt-image` + one ffmpeg composite (the matte is reused).
3. **Brand the set** — `ffmpeg-overlay` a logo / lower-third (see hyperframes-lower-third).

---

## Notes for the agent (only read if a step fails)

**Bria contract.** `bria-video-bg-remove` takes `video_url` + optional `background_color` (named). For compositing yourself, use `'Transparent'` → VP9 alpha webm. Fast cap (~20s); via `create_media` (action='animate', source_url, model_override) or direct-SDK `POST /inference {"capability":"bria-video-bg-remove","params":{"video_url":"…","background_color":"Transparent"},"timeout":300}`.

**Composite recipe.** `ffmpeg -loop 1 -i bg.png -c:v libvpx-vp9 -i matte.webm -filter_complex "[0:v]scale=W:H:force_original_aspect_ratio=increase,crop=W:H[bg];[1:v]format=yuva420p[fg];[bg][fg]overlay=0:0:shortest=1,format=yuv420p[v]" -map "[v]" -t <dur> out.mp4`. Decode the webm with `-c:v libvpx-vp9` so the alpha plane is read.

**Verify alpha.** `ffmpeg -c:v libvpx-vp9 -i matte.webm -frames:v 1 -pix_fmt rgba probe.png`, then check the alpha channel extrema includes 0 (transparent). If it's (255,255), you got the opaque-on-black default — re-request with `'Transparent'`.
