Edit a reel
Everything runs on the person's own Mac. No paid services. The one script that does the work is
scripts/edit.sh in the repo root, which calls scripts/edit_reel.py beside this file.
The person is not technical. Talk in plain Australian English, short sentences, no jargon. Say what you are about to do before you do it, then say what happened. Never use em or en dashes.
Contents
- Quick path
- Getting the video
- What one edit does
- Settings the person can ask to change
- Before you hand it over: the checks
- Reading the result back to them
- Things that go wrong
- Hard rules
Quick path
- Check the set up is done:
scripts/setup.sh --check. If it says NOT READY, followCLAUDE.md(the onboarding), do not improvise installs. - Get the video (see below), then run:
- one named file:
scripts/edit.sh "<path to video>" - the newest N in the Inbox folder:
scripts/edit.sh --latest 3
- one named file:
- Run the checks below, look at the pictures, read the captions, then report.
A 30 to 60 second clip takes about one to two minutes on an Apple chip Mac, longer on an older one.
Getting the video
In this order, stopping at the first that works:
- A file they name or drag in. Use it where it is. Never move or delete their original.
- The Inbox folder. Anything they AirDropped or dropped into
Inbox/(in the repo folder). - iCloud Photos. Only if iCloud was set up (
docs/ICLOUD.md). Their Apple ID email is inconfig.jsonundericloud_apple_id. Runscripts/icloud-fetch.sh <apple id> 30.- It prints
ICLOUD_FETCH_OKwhen it worked. The newest videos land inInbox/. - It prints
ICLOUD_FETCH_FAILEDwhen the sign in has expired (it lasts about two months) or was never done. Do not try to fix it yourself: tell them, and walk them throughdocs/ICLOUD.mdstep "Signing in again". They type the password and the 6 digit code into their own Terminal, never into the chat. - "Newest" means the most recently filmed. Videos just filmed can take a few minutes to reach iCloud, so if the one they mean is missing, tell them and offer to try again in a minute.
- Before editing, list the newest videos with their lengths
(
ffprobethe duration) and confirm which one they mean if there is any doubt.
- It prints
- Nothing works. Offer the fallback: AirDrop the video to their Mac, or drag it into the Inbox folder.
What one edit does
In order:
- Cuts, by sound. Finds where the voice really starts and ends from the loudness of the audio, not from caption times (speech to text times at the very start of a clip can sit inside the silence and hide dead air). Trims the quiet at the start and end, and shortens long pauses. Cuts are placed at the quietest moment nearby and each seam has a 15 ms fade, so no word is clipped. Sentences are kept whole; nothing is removed that was not dead air.
- Mirror check. Front camera clips are often mirrored. Reads any text in frame (signs, screens, shirts) normal and flipped with OCR and flips the video only if real words read correctly flipped. Never judged by eye. If there is no readable text it leaves the video alone and says so in the report.
- Crop to 9:16 and scale to 1080x1920 (landscape clips are cropped to the middle).
- Colour. Measures a few frames and applies a small exposure, contrast and saturation correction, capped so it can never look overdone, with a before/after sheet. HDR iPhone clips are mapped to standard colour first.
- Studio sound. Noise removal, voice EQ, de-esser, compressor, limiter, then loudness to
-14 LUFS. This was tuned by measurement. Ears decide: if it sounds harsh, thin or over
processed, drop
audio.strengthtolight. - Captions. Transcribes the cleaned sound, then draws captions with Pillow. Inside phone safe zones (x 90 to 960, y 250 to 1520 on a 1080x1920 frame) so buttons and the app's own text do not cover them. The active word changes colour. The outline stays dark. No coloured boxes behind words, because they go soft over a face.
- Outputs.
Edited/<name>-edited.mp4and, inEdited/checks/<name>/:contact-sheet.jpg,colour-before-after.jpg,caption-frame.png,captions-words.txt,report.json.
Settings the person can ask to change
All in config.json in the repo root (created from config.default.json, which is never edited).
The person never touches the file. They say it in plain words and you change it, run the edit
again, and show them. Full word to setting table: docs/STYLE.md.
Examples:
- "Make the captions yellow" sets
captions.highlight_color(the active word) orcaptions.color(all words). Ask which if unclear. - "Bigger captions" raises
captions.sizeby about 12 (default 78). Keep the result inside the safe zone: the script reportsinside_safe_zone. - "Move the captions up" sets
captions.positiontomiddleorupper. - "One word at a time" sets
captions.styletoword. "Lines" sets it back toline. - "No captions" sets
captions.enabledto false. - "Less colour" lowers
grade.strengthby 0.2. "No colour grading" setsgrade.enabledfalse. - "Cut it tighter" sets
cuts.tightnesstotight. "Leave more breathing room":gentle. - "Sounds too processed":
audio.strengthtolight. - "Closer on my face":
framing.zoom1.15 (max sensible 1.4). - Name spelled wrong in captions: add it to
vocabulary(helps the listener get it right) and, if it still comes out wrong, toreplacementsas{"heard": "Right Spelling"}.
After a change, re-run the edit on the same video and show the new result. Use Edited/ files;
re-running replaces the old edit of the same name.
Before you hand it over: the checks
The script prints a summary and writes report.json. You still have to look.
- Numbers.
loudness_ok,start_ok,end_okshould all be true. Quiet at the start should be 0.45 s or less and at the end 0.75 s or less. If not, say so and re-run with--tightness tight. - Look at the pictures with the Read tool:
contact-sheet.jpg(is the face in frame, does the picture look natural, are captions inside the screen),colour-before-after.jpg(left is the original, right is the grade: skin natural, not orange or grey, whites not clipped, blacks not crushed) andcaption-frame.png(read every word at full size, can you read each one against the background). - Read the captions. Open
captions-words.txt. Speech to text mishears names and local words (for example a brand name). Fix withvocabularyandreplacements, then re-run. Checkcaption_vs_sound_matchin the report: below 0.9 means something is off, investigate. - Mirror. Look at
report.jsonmirror. Ifdecisionisunknownand there is text in frame (a sign, a screen), look at a frame and check the text reads correctly. If it is backwards, setframing.mirror_fixtoalwaysand re-run. - Dead air by sound. The script runs
silencedetecton the final mix. Do not trust caption times for this.
You cannot listen. Say so honestly: the sound was tuned and measured, but their ears decide.
Reading the result back to them
Short, plain, in this shape:
- Where the file is, and how to open it (Finder,
Editedfolder inside the reel editor folder). - What was cut ("took 1.1 seconds of quiet off the start, shortened two long pauses, 36 seconds down to 33").
- Whether the picture was flipped and why.
- What the sound now measures ("about -14, the usual level for Instagram and TikTok").
- Captions: font, colours, any word you changed.
- Anything you could not fix, and what they can say to change it.
Then ask what they want changed, and offer one or two ideas from the settings list above.
Things that go wrong
- "No speech found": the clip is silent or music only. Tell them.
- Captions in the wrong place or cut off: check
inside_safe_zonein the report; lowersize. - Font not found: the script falls back to Arial Black and prints a note. Offer one of the
built in fonts (
docs/STYLE.md), or download a free font (a.ttffrom fonts.google.com) into~/.reel-editor/fonts/and setcaptions.fontto the file name without.ttf. - A set up tool is missing: run
scripts/setup.sh. If Homebrew is missing, followCLAUDE.md. - Edit takes very long: 4K clips over 3 minutes are heavy. Say so and let it run.
Hard rules
- Never delete or change the person's original video.
- Never ask for, or accept, a password or 6 digit code in the chat.
- No paid services and no uploading their video anywhere. Everything stays on this Mac, except the iCloud download.
- No scroll prompts or "follow me" overlays unless the person asks for them.
- Do not add anything the person did not say: captions show only what was spoken.