Claude Code · June 2026

How Fable edited
its own launch video

The raw material

17 takes, 4 scenes

Intro
5 takes + a re-shoot
C001
C002
C003 ✓
C004
C017
Thought partner
6 takes
C005
C006
C007
C008
C009
C010 ✓
Goals & verification
3 takes
C011
C012 ✓
C013
Be more ambitious
3 takes
C014
C015 ✓
C016
Sony masters · S-Log3 · 4K · ≈25 GB · ✓ = made the cut
Where it ends up

…and the finished cut

Graded, animated, design-reviewed
4K · 24 fps · 3:00
Step 01

One prompt kicks off the whole edit

The prompt — in full
I'm processing the recording of a bunch of videos in @Fable-Full-Recording/ the script for them is in @Fable-Full-Recording/fable5script.md. I want you to run the eleven labs transcription service on them. Then stitch together the best shots, into one final clip. A few notes: there are multiple take per scene, the best takes are usually the ones at the end with the fewest ums, but that can change. I also re-shot the first scene at the end. They should all be organized by timeline. For a few of them I start the video saying "Hey [name]" as a way of starting the sentence warm, we should cut that out. Create a JSON file for the video that shows per scene, each clip we're using and the time ranges from them. Then, create a final scene using ffmpeg. Orchestrate this all using workflows. /goal dont stop until you have a final video
Taste in, pipeline out: transcribe → select → EDL → cut, all from this one message.
Step 01

Listen to every take

17 takes through Whisper, locally on the M4 Max — every word timestamped.
Whisper hears “Thariq” as “Sark.” The timestamps still land.
// work/transcripts/A004C003.json
"words": [
  { "word": " Hey",    "start": 1.02, "end": 1.50 },
  { "word": " it's",   "start": 1.90, "end": 2.04 },
  { "word": " Sark",   "start": 2.04, "end": 2.24 },
  { "word": " from",   "start": 2.24, "end": 2.42 },
  { "word": " the",    "start": 2.42, "end": 2.54 },
  { "word": " Claude", "start": 2.54, "end": 2.86 },
  { "word": " Code",   "start": 2.86, "end": 3.12 },
  { "word": " team",   "start": 3.12, "end": 3.38 }
]
Step 02

Subagents pick the best takes

“The final take inside C012 is flawless — zero ums… the ‘Hey [name]’ warm-up ends at 66.40; cut-in at 66.45 sits in the silent gap.”
selection_rationale · final-edit.json
17
takes read
4
scenes cast
0
ums kept
One subagent per scene, verifiers double-checking. Every cut lands in silence.
Step 03

The edit is a JSON file

// final-edit.json — every cut, with its reasoning written down
{ "scene": 1, "title": "Part 1: Intro",
  "candidate_takes": ["C001", "C002", "C003", "C004", "C017 (re-shoot)"],
  "selection_rationale": "C017 is incomplete — 5.8s dead pause mid-sentence, disqualified.
                          C003 is the cleanest complete take: zero ums, clean ending.",
  "clips": [{ "clip": "A004C003", "start": 1.89, "end": 60.81,
              "first_words": "Hey everyone, it's Thariq..." }] },

{ "scene": 2, "title": "Thought Partner",    "picked": "C010" of 6 takes — "only one fully on script" },
{ "scene": 3, "title": "Goals & Verification", "picked": "C012" of 3 — "cut-in sits in the silent gap" },
{ "scene": 4, "title": "Be More Ambitious",   "picked": "C015" of 3 takes }
ffmpeg executes the JSON — then Claude re-transcribes its own cut: “zero ums.”
7 min  raw folder → verified 2:50 cut
Step 03

ffmpeg stitches the first cut

The very first take — straight off the sensor
flat S-Log3 · no grade yet
From the prompt
Then, create a final scene using ffmpeg. /goal dont stop until you have a final video
# one frame-accurate cut per pick
ffmpeg -ss 1.89 -to 60.81 \
  -i A004C003.MP4 → cuts/seg1.mp4
# then join the four picks
ffmpeg -f concat -i concat.txt \
  -c copy fable5-final.mp4
A watchable 2:50 within minutes — the grade comes next.
Step 04

Write the color grade from scratch

The prompt
the color grading feels a bit too muted, can you fix that? make some examples of how we might regrade and let me choose one
neutral709
warm_filmic
punchy
teal_orange
7 hand-written .cube LUTs, S-Log3 → Rec.709. No preset packs.
Step 04

Log in, picture out

S-Log3 off the camera
neutral_cool_desat · the final grade
Step 05 · Graphics

The input: 11 static design frames

The prompt
I've added a bunch of design files for interludes in @Fable-Full-Recording/fable5-assets/ — I want to use remotion to sttich these all together into a final clip that smoothly animates in the assets… please do a first pass.
Just PNGs. No animation spec, no timings.
5 cards + 6 overlays, from fable5-assets/
Step 05 · Graphics

Each PNG is rebuilt as code

The designers’ PNG…
…becomes JSX. Every word, color and beat is now a parameter you can prompt.
// KeypointLedger.tsx — the real component
// Beat 2: right column lights up, left grays + strikes
const beat2 = interpolate(frame,
  [beat2At, beat2At + 12], [0, 1],
  { easing: EASE_OUT });

<div style={{...text, color: cream, opacity: 1 - beat2}}>
  “Is Claude doing the work right?”
</div>
<div style={{...text, opacity: beat2,
             textDecoration: 'line-through'}}>
Step 05 · Graphics

One file sets the feel

// anim.tsx — global timing knobs (frames @ 24fps)
// tweak these first
export const TIMING = {
  reveal: 13,        // element entrance
  stagger: 4,        // gap between siblings
  overlayIn: 10,     // panel slide-in (~430ms)
  overlayOut: 8,     // fade-out
  emphasisDelay: 3,  // clay words tick in late
};
export const EASE_OUT = Easing.bezier(0.16, 1, 0.3, 1);
Six numbers drive every animation in the video. “Make it snappier” is a one-line change.
Step 05 · Graphics

The edit is a cue sheet,
timed by the transcript

// FinalEdit.tsx — overlays land on the word
CUES = [
  // "…it's Thariq from the Claude Code team"
  { id: 'lower-third', at: 1.2,  dur: 4.5 },
  // "Is Claude doing the right work?"
  { id: 'keypoint',    at: 12.2, dur: 25.6 },
  { id: 'three-ways',  at: 43.0, dur: 15.8 },
];
No timeline scrubbing: Claude greps the word timestamps for the phrase and moves the cue.
Step 05 · Graphics

Watch it land on the spoken beat

<KeypointLedger
  beat2At={295} />
Frame 295 is the word “right.”
Step 06

Export the designs to Figma

The prompt
I want my design team to be able to make tweaks to these components…
Then
great now can you also export it to a figma file
A real Figma file via MCP: components, color-grading station, motion page with live-render GIFs.
Fable 5 — Video Graphics (Design Review), built through the Figma MCP
Step 07

A control room for designers — this one is live, try the sliders

Drag the grade sliders, replay the animations, then “copy feedback as prompt” — exact numbers, ready to paste back into Claude Code.
Step 08

Import the redesign
back from Figma

The prompt
the design has been updated in this Figma… can you update the video to match?
Before — cream cards
After — the design team’s minimal pass, rebuilt in code
Step 09

The final render

3840×2160
at exactly 24 fps
4,334 frames
verified still-by-still first
3:00 · 653 MB
done at 6:24 am
Under the hood

The whole edit is a repo

transcripts/*.json
Whisper word timestamps for all 17 takes. Every cut point and overlay cue is grepped out of these, never scrubbed.
final-edit.json
The edit decision list: candidate takes, in/out points, and the written rationale for every pick. ffmpeg executes it.
luts/*.cube
7 hand-written color LUTs, S-Log3 → Rec.709. The grade is plain text — applied by ffmpeg at encode time.
src/cards · src/overlays
11 graphics as React components in Remotion — the designers’ PNGs rebuilt so every word and color is a prop.
anim.tsx · FinalEdit.tsx
Six timing knobs set the feel; a cue sheet lands each overlay on the spoken word from the transcript.
npx remotion render
Headless 4K render, 4,334 frames — Claude screenshots stills to review its own work before each full pass.
No timeline, no project file — the edit is text, so Claude can read it, diff it, and re-render it.
The whole job

By the numbers

17
camera takes, 25 GB raw
7
LUTs written from scratch
11
graphics built as components
~10
re-renders in one night
code → Figma → code round trips
4
days, Jun 6–9
653
MB of finished 4K
0
video editors opened

Edited by Claude Code.

Footage by a camera. Taste by Thariq. Everything in between, by the agent the video is about.

1 / 15