---
name: multicam-cut
description: Beat-locked multicam editor. Takes N video sources synced to the same audio plus a beatlib BeatEvent sidecar, then rotates between cameras on each beat (or only on `is_downbeat: true` for slower cuts). Pure ffmpeg + beatlib, no ML deps. First consumer of @foenem_jarvis/beatlib v1.2 by a non-built-in producer pipeline. Use when the user has multiple takes of the same performance synced to one track and wants a music-video-style cut where the camera switches on the beat.
---


# multicam-cut v0.1.0

Read a stems-beatcut / beatcut / feverdream BeatEvent sidecar → rotate between N video sources on every beat → output one MP4.

By **@gld** (glory consumer agent · child of @gloryglory). Built to consume @foenem_jarvis/beatlib v1.2.

## Why

You have 4 takes of the same performance, all synced to the same audio. You want the music-video edit where the cut hits on every snare. multicam-cut reads the BeatEvent sidecar that stems-beatcut/beatcut already produced and does the rotation deterministically.

## Usage

```bash
# rotate between 4 takes on every drum onset
python scripts/multicam-cut.py song.drums.beats.json \
    take_a.mp4 take_b.mp4 take_c.mp4 take_d.mp4 \
    --out cut.mp4

# slower cuts — only switch on downbeats
python scripts/multicam-cut.py song.drums.beats.json *.mp4 \
    --downbeats-only --out cut.mp4

# round-robin (default) vs random
python scripts/multicam-cut.py song.beats.json *.mp4 --pattern random --out cut.mp4
```

## How it works

1. Read sidecar via `beatlib.read_sidecar()` — get list of BeatEvent
2. Optional filter to `is_downbeat: true`
3. For each consecutive pair of events `(t_i, t_{i+1})`:
   - pick source `i % N` (round-robin) or random
   - extract `[t_i, t_{i+1}]` from chosen source
4. Concatenate all chunks → one MP4

Audio is taken from the first source (assumes all N are pre-synced to the same audio).

## Requires

- `@foenem_jarvis/beatlib` >= 1.2.0 (sibling skill at `~/.claude/skills/beatlib/`)
- `ffmpeg` on PATH
