Build a Video to Shorts Pipeline

Step 4 of 9 · About 10 minutes per idea

Assemble Each Idea Into a Clip Plan

Turn every surviving idea into exact segment timestamps, with the strongest line moved to the front. This is where an idea becomes something you can render.

What you get

One clip plan per idea: ordered segments in seconds, the cold open line, the overlay list, and the CTA beat.

The slate from step 3 has ideas and approximate timestamps. A clip plan has exact ones, in playback order, ready to hand to the renderer. The difference is precision and sequence.

Move the strongest line to the front

Almost nobody says their best line first. In conversation the setup comes first and the payoff lands thirty seconds later. On a vertical feed you have about two seconds, so the payoff has to open the clip and the setup follows it.

This is why non contiguous assembly matters. A clip that opens on the payoff from minute 38, then cuts back to the setup at minute 12, reads as deliberate editing. A clip that plays the conversation in order reads as a recording someone forgot to edit.

Get the exact segment boundaries

Segments are expressed in seconds against the original video, not the rough cut. Keep it that way. The renderer trims from the source, so a plan written against the rough cut will drift by however much the cut removed.

Paste into Claude Code
For each Tier 1 idea in episodes/<date>/shorts-slate.md, produce a clip plan.

Read work/ep-test.words.json to find the exact word boundaries. Do not guess
timestamps from the slate, look them up in the word timings.

For each idea write episodes/<date>/plans/S<n>.json with this shape:

{
  "id": "S1",
  "title": "the short title",
  "thesis": "one sentence",
  "goal": "community" | "services",
  "segments": [
    {"s": 2988.4, "e": 3013.2, "why": "the payoff line, opens the clip"},
    {"s": 228.1, "e": 253.6, "why": "the setup, plays second"}
  ],
  "coldOpen": "the exact words the viewer hears first",
  "overlays": [{"at": 1.2, "text": "$500 vs $3"}],
  "cta": "the closing line",
  "layout": "split" | "face"
}

Rules:
- Segment boundaries must land on word boundaries from the words JSON, with a
  small pad so the first word is not clipped.
- Order segments for the VIEWER, not chronologically. The strongest line goes
  first even if it happened last.
- Total runtime target 20 to 55 seconds. Flag anything longer.
- layout is "face" when there is nothing worth showing on screen, and "split"
  when a screen share or demo carries the point.

Tell me which ideas you could not resolve to clean word boundaries.
Check it worked
Read each plan's coldOpen string on its own. It should be a complete, punchy sentence that makes sense with zero setup. If it needs the next segment to make sense, it is not a cold open, it is just the beginning.
Where this bites
Watch the total runtime. Ideas that need 90 seconds to land are usually two ideas wearing a coat, or one idea that is not actually that interesting. Split it or kill it rather than shipping a long clip nobody finishes.

Questions

Can a clip use three or four separate segments?

Yes, and the good ones often do. The constraint is not how many pieces, it is whether each piece is a complete thought and whether the joins are invisible to someone who was not there.

Should segments come from the original video or the rough cut?

The original. The rough cut has shifted every timestamp after its first removal. Plan against the source and let the renderer trim from the source.

Talk it through

Stuck on this step?

Free 30 minutes. Bring the error, the transcript, or the clip that will not pass the gate, and we will work through it.