---
name: black-mirror
description: "Create real-footage archive video edits in the Black Mirror local style: Internet Archive/public-domain clip hunting, random fire archival source selection, fast chops, split-screen/multi-panel collage, mirrored/negative/edge panels, monochrome CRT/tape grade, and no-AI-looking motion. Use when the user asks for Black Mirror edits, archive-sourced videos, split-screen archival chaos, non-AI video collages, random Internet Archive clip edits, or videos like the Telegram split-screen/no-red cut."
---


# Black Mirror

Black Mirror is a local edit system for making chaotic real-footage archive videos: public-domain or cleared archival clips, fast documentary chops, split-screen panels, monochrome tape texture, and no AI scene generation unless the user explicitly asks.

This is not a request to imitate the TV show. Treat "Black Mirror" as the user's name for this archive-sourced split-screen tape-edit language.

## Core Taste

- Source real footage first: Internet Archive, public-domain films, user clips, government films, home movies, VHS transfers, newsreels, old commercials, educational films, industrial films, travel footage, weird demonstrations, sports, rituals, nightlife, street footage, animals, machines, crowds, labs, kitchens, anything visually alive.
- Prefer randomness with taste. Do not stay locked to industrial footage; use industrial only when it is the strongest source.
- Make chaos through editing and layout, not seizure flashes.
- Keep the footage photographic. Real camera imperfections, grain, exposure rolloff, motion blur, awkward framing, tape damage, and old compression are the point.
- Default palette when no style is specified: `classic_crt`, a black/white green-cyan CRT tint with vignette, scanlines, grain, and controlled contrast. Do not overuse it; choose or combine modes when repeated renders start feeling samey.
- Avoid red marks by default. Use no red lines, no red boxes, and no red scars unless the user asks for red.
- Avoid AI tells: smooth synthetic subjects, fake faces/hands, over-polished camera moves, fantasy scene continuity, glossy generated lighting.

## Workflow

1. Gather context: ask for a theme only if the user has one. Otherwise choose a loose search cloud such as `night city`, `public access`, `home movies`, `science`, `fashion`, `sports`, `industrial`, `travel`, `newsreel`, `shopping mall`, `machines`, `ritual`, `ocean`, or `crowd`.
2. Search Internet Archive with `scripts/ia_find_video.py` or direct `advancedsearch.php` calls. Prefer public-domain/CC items and always inspect metadata before using.
3. Download 1-3 promising videos. Do not download huge files blindly; prefer usable MP4/H.264 derivatives under a few hundred MB for iteration.
4. Generate contact sheets and scout for fire frames before editing.
5. Cut short source segments, usually 0.4-0.85s each for chaotic edits or 1-3s each for moodier edits.
6. Render the split-screen edit with `scripts/black_mirror_split_edit.py` or a custom ffmpeg graph.
7. QC with a dense contact sheet. The result should look like real footage seen through a cursed multi-monitor tape wall.
8. Open the final MP4 and provide the path plus source URLs/licenses.

## Internet Archive Discovery

Use the helper to search and optionally download candidates:

```bash
python3 ~/.codex/skills/black-mirror/scripts/ia_find_video.py \
  --query 'collection:prelinger AND (home movies OR fashion OR science OR city)' \
  --limit 20 \
  --download \
  --out-dir ./black_mirror_sources
```

Good source veins and query ideas live in `references/archive-veins.md`; read it when searches feel too samey.

License discipline:

- Prefer items marked public domain, CC0, Creative Commons, government/public access, or known reuse-friendly collections.
- Do not assume every Internet Archive item is cleared just because it is downloadable.
- Save or cite the item URL and visible license/rights field in the final response when delivering a finished edit.

## Split-Screen Edit

Use the bundled renderer for the Telegram-style split-screen chaos:

```bash
python3 ~/.codex/skills/black-mirror/scripts/black_mirror_split_edit.py \
  --input ./source.mp4 \
  --output ./black_mirror_split.mp4 \
  --duration 16 \
  --seed 444
```

For multiple sources:

```bash
python3 ~/.codex/skills/black-mirror/scripts/black_mirror_split_edit.py \
  --input ./source_a.mp4 \
  --input ./source_b.mp4 \
  --input ./source_c.mp4 \
  --output ./black_mirror_mash.mp4 \
  --duration 18 \
  --seed 777
```

The renderer builds micro-segments through a layout/cut engine layer. If no layout engine is specified, it uses `random_mix`, which chooses from the full cut-engine pool per segment. Use `--seed` only when you want repeatability; otherwise the renderer generates a fresh seed so the structure does not keep repeating.

### Layout / Cut Engines

The renderer supports 50+ layout/cut engines. List them with:

```bash
python3 ~/.codex/skills/black-mirror/scripts/black_mirror_split_edit.py --list-layout-engines
```

Use `--layout-engine` or `--cut-engine` to pick the structural edit language. Combine engines with `+` or commas:

```bash
python3 ~/.codex/skills/black-mirror/scripts/black_mirror_split_edit.py \
  --input ./source_a.mp4 \
  --input ./source_b.mp4 \
  --output ./black_mirror_switcher.mp4 \
  --duration 18 \
  --style raw_archive+grain_light \
  --layout-engine surveillance_bank+postage_pile+filmstrip_crawl
```

Use `--layout-engine random5` for a deterministic five-engine subset based on `--seed`, or omit `--seed` for a fresh surprise each render.

Useful starting points:

- Maximum variety: `random_mix`, `shuffle_wall`, `off_air_switcher`, `channel_zap`.
- Dense walls: `surveillance_bank`, `contact_sheet`, `arcade_grid`, `crowd_wall`, `casino_cameras`.
- PIP/overlays: `picture_in_picture`, `postage_pile`, `mirror_tunnel`, `mainframe`, `neon_pips`.
- Strips/bands: `vertical_panic`, `horizontal_broadcast`, `filmstrip_crawl`, `ladder_scan`, `terminal_columns`.
- Slower moods: `city_planner`, `ocean_monitor`, `travelog_slide`, `courtroom_feed`, `classroom_projector`.
- Old exact behavior: `legacy_loop`.

### Style Modes

The renderer supports 50+ finishing modes and accents. List them with:

```bash
python3 ~/.codex/skills/black-mirror/scripts/black_mirror_split_edit.py --list-styles
```

Use `--style` or `--mode` to pick a finishing grade. Combine modes with `+` or commas:

```bash
python3 ~/.codex/skills/black-mirror/scripts/black_mirror_split_edit.py \
  --input ./source_a.mp4 \
  --input ./source_b.mp4 \
  --output ./black_mirror_color_wall.mp4 \
  --duration 18 \
  --seed 777 \
  --style raw_archive+scanline_light+grain_heavy
```

Use `--style random3` for a deterministic three-mode surprise based on `--seed`.

Use a contact sheet or source scout image to pick a base grade automatically, then add accents:

```bash
python3 ~/.codex/skills/black-mirror/scripts/black_mirror_split_edit.py \
  --input ./source_a.mp4 \
  --input ./source_b.mp4 \
  --output ./black_mirror_auto_wall.mp4 \
  --duration 18 \
  --seed 777 \
  --auto-style-from ./qc/source_contact.jpg \
  --style grain_light
```

Useful starting points:

- Color-preserving: `raw_archive`, `public_access`, `soft_vhs`, `color_bleed_vhs`, `shopping_channel`, `neon_preserve`, `field_recorder`.
- Cold surveillance: `cold_cctv`, `airport_security`, `off_air_blue`, `wet_pavement`, `payphone_glow`.
- Monochrome: `classic_crt`, `newsprint`, `xerox`, `silver_halide`, `archive_news`, `darkroom_print`.
- Warm film: `sixteen_mm_warm`, `eight_mm_home`, `sun_faded`, `desert_broadcast`.
- Combinable accents: `scanline_light`, `scanline_heavy`, `grain_light`, `grain_heavy`, `vignette_soft`, `vignette_deep`, `contrast_punch`, `soft_blur`.

## Manual Ffmpeg Notes

If writing a custom graph:

- Use `trim`, `setpts`, `scale`, `setsar=1`, `crop`, `hflip`, `negate`, `edgedetect`, `xstack`, `hstack`, `vstack`, and `overlay`.
- Normalize every panel before concatenating: same dimensions, same frame rate, square pixels.
- Offset panels in time so one frame contains multiple moments from the same source.
- Map or reconstruct original source audio where possible; filtered archive narration and room tone help the edit feel real.
- Add texture with `eq`, `noise`, `drawgrid`, and `vignette`; avoid full-frame flashing unless the user asks.

## QC

- Make a dense contact sheet:

```bash
ffmpeg -y -hide_banner -loglevel error -i ./black_mirror_split.mp4 \
  -vf "fps=2,scale=240:-1,tile=8x4" -frames:v 1 ./contact.jpg
```

- The contact sheet should show varied panel layouts, real photographic detail, and strong frames.
- If it looks like a random grid, use fewer sources and stronger time offsets.
- If it looks too calm, shorten segment durations and add more split layouts.
- If it looks too seizure-heavy, reduce negative/edge panels and avoid white flash bars.
- If it looks AI, discard AI sources and return to real archive footage.
