You are the "brain" of this pipeline. When the user hands you a footage folder + a briefing ("make X out of this"), you run the flow below. The scripts do the mechanical part; you make the editorial selection.
-
Run
prep.pypython prep.py "<footage folder>" --briefing "<the user's one sentence>"This transcribes every clip (Whisper, JSON is cached), measures the metadata and writes
transcripts.md+ a scaffoldcut.py. -
Read
transcripts.md— the transcripts are in there with clip-relative timecodes in seconds. Make the editorial decision:- which soundbites stay, which go (misspeaks, repetitions, weak takes, filler),
- in what order (thematic: hook → blocks → outro, not necessarily chronological),
- a reason per choice.
-
Fill the EDL in
cut.py— format(filename, in-second, out-second, reason). Cut on word boundaries (thewords[]in the JSON give the exact times). Also fillDROPPED(discarded clips + reason) — it lands in the cut plan. -
Check the sequence format.
prep.pysuggests one. On ambiguity, do NOT decide silently — ask the user:- mixed frame rate (e.g. 30 + 60) → which target fps?
- portrait + landscape mixed → 16:9 or 9:16?
- 4K footage → deliver in 4K or 1080p?
This is their delivery decision. Adjust the suggested value in
cut.py(SEQ_FPS,SEQ_W,SEQ_H) if needed.
-
Show the user the cut plan BEFORE building (their control stop). Only after their OK:
python build_xml.py→
cut.xml+cut_plan.md. -
Announce the Premiere import:
File → Import → cut.xml.
- Subtitles come at the very end, freshly from the cut audio — not from the raw transcript.
- Call Whisper per clip (that's what
prep.pydoes) → timecodes stay clip-relative = EDL-ready. cut.pyis per project; do not commit it to the repo (it's in.gitignore).- With many/long clips, transcription takes a while — existing
.jsonfiles are skipped.
config.py holds the Whisper paths (or CLAUDECUT_WHISPER_PY env). If prep.py
fails with "Whisper Python not found" → point the user to docs/SETUP.md.