Precision Affiliates Edge Method

Edge Method ยท CapCut edit automation

Editing the Edge Method videos in CapCut, from the storyboard, without touching the timeline

Matt Loui's "Claude edits CapCut" workflow (video 5N1moUCsVhI, his skill zip and prompt doc, all consumed 15 Oct 2026) mapped onto our production: the approved short script, the clip-strip storyboard, the HeyGen talking head, the Veo B-roll and the approved stills. Nothing here is built yet. This page is the plan for Ryan to read and decide on.

1. How Matt's workflow actually works

The trick is not computer use and not a CapCut plugin. CapCut desktop stores every project as plain JSON on disk, and Claude writes that JSON directly while CapCut is closed. When the project is reopened, the full timeline is there: clips cut on the voice, keyframed zooms, captions, music with volume keyframes, sound effects on their own tracks. Because it is a real timeline, anything can be tweaked by hand afterwards.

Why this fits usThe hard part of our production is exactly the part his workflow solves: taking a storyboard with timed beats and a pile of approved assets and turning it into a coherent, captioned, cut-on-the-voice timeline that Ryan can still open and tweak. Everything upstream of the edit (script, voice, images) we already do our own way and do not need from him.

2. What transfers to us, what is dropped

Part of Matt's skillVerdictWhy
Writing the CapCut project JSON directly (build_capcut.py, templates, six-copy install, backup + md5, install_to_project.py)keepThe core mechanism. Forked, not rewritten.
Word-level alignment of the voice to the script (align_vo.py, whisper method, pause correction, words.json / words.txt)keepOur cuts and captions are both driven by spoken words. We run it on the HeyGen render's audio.
Time expressions wN / eN / cN / end with offsetskeepLets the storyboard's "words over this clip" become cut times that survive re-timing.
Cut rule (cut lands in the pause before the first word, a frame or two early, snapped to whole frames)keepThe ad study calls for hard cuts on the spoken beat.
Caption fitting and placement (textfit.py: measured font, safe area, busy-area avoidance, pop-in scale keyframes)keep, re-tunedRe-measured for a 1080x1920 canvas and Ryan's caption spec (white box, black text, blue word highlight, two lines; section 6).
Audio levelling (BS.1770 loudness, music ducked under the voice with volume keyframes, effects levelled against the voice, peak ceiling)keepNeeded the moment we add music or effects. Idle until then.
Preview renderer (preview.py: MP4 + a still per caption, mix peak and loudness)keep, extendedMust render video sources (HeyGen, Veo), not just stills. This is the thing Ryan approves before anything is installed.
Validation (no gaps, no overlaps, frame-snapped starts, keyframes inside clips, last clip reaches the end)keepWhat keeps CapCut from rejecting the file.
Sound library indexing and cue search (scan_library.py, sfx_cues.json, analyze_audio.py)laterUseful once Ryan points at a music and effects folder. Not needed for the first edit.
Script writing, Higgsfield voice and image generation, character sheets, shot-list prompts, contact sheetsdropWe have the approved script, the HeyGen voice and lip sync, Nano Banana stills and Veo clips. Different media, our own approval loop on the production sheet.
16:9 1920x1080 canvas, photo-only video track, 150 words a minute pacing, YouTube extras (thumbnails, chapters)dropOurs is 9:16 1080x1920, video clips with source offsets, split screens, overlays, Meta delivery.
Route B and Route C delivery (cloud session with device tools; zips and a double-click installer)dropThis session runs on Ryan's Mac with the repo and his home folder reachable. Route A only.

3. What we already have per ad

Gluco Armor ad01-short is the worked example. Everything the edit needs already exists or is being made by the production session. The builder reads them; it never generates media.

InputWhere it is todayFormatWhat the builder does with it
Approved script, three hooksblood-sugar-glucoarmor/rewrite1-short-FINAL.md + approvals JSONHook 1/2/3 + body + CTA, 299 to 321 words per hookThe word sequence every cut and caption is indexed against.
Storyboard, clip-strip format (15 Oct)production/ad01-short/storyboard-hooks.json, storyboard-v3.jsonPer beat: text, clips[] each with words, frames[], split, label; options with approved/rejected statusEach clip's words becomes a cut time; frames name the media; split stacks two clips.
HeyGen talking head (the master audio and Kristian's picture)heygen-upload/04-heygen-renders/: hook1 4.7 s, hook2 12.9 s, hook3-full 1:501080x1920, 25 fps, 48 kHz stereo MP4, frame-tiled and checkedV1 Kristian clips (trimmed per beat by source offset) and A1 the one audio track.
Veo B-roll from the approved stillsbeing generated now by the other session (nine clips planned)9:16, 720p, 8 s, silentV2 clips for B-roll beats and the lower half of splits; a beat longer than 8 s needs two clips or a hold.
Stills for push-insheygen-upload/03-broll-for-the-edit/ 08 doctor, 09 institute, 10 liver renderPNG/JPG 9:16Photo segment with a slow keyframed scale (the skill already does this).
Overlay layers named in the storyboardnot made yet, mine to supply: medication box + red X (beat 9), quote card (beats 13/14), three white chevrons (beat 16)PNG with alpha, made deterministically (never by an image model)V3 overlays with alpha keyframes.
Word timingexists for the ElevenLabs reads (vo/*.words.json), NOT for the HeyGen audiowhisper words with start/endRe-made from the HeyGen render's audio in step 1.
Caption styleRyan's spec 15 Oct + reference 1019.mp4 (section 6)white box, black bold text, blue highlight on the spoken word, two linesText segments generated from words.json.

4. Our pipeline, step by step

Scripts live in scripts/meta_video/capcut/ (forks of Matt's, same names where the logic is his). Work files per ad in campaigns/meta-video/<offer>/production/<ad>/edit/. Nothing paid is spent in any step.

Step 0. One-off setup: CapCut on the Mac, and a harvest project Ryan, about 15 minutes, once

Step 1. Word timing of the master audio automatic

Step 2. Beats to cuts automatic, then shown on the production sheet

Step 3. Asset manifest automatic, with a stop on anything missing

Step 4. The edit plan automatic from the storyboard, hand-adjustable

Step 5. Build the CapCut project file automatic

Step 6. Preview and look automatic render, then every frame looked at, then Ryan

Step 7. Install into Ryan's CapCut project Ryan: 4 steps in CapCut, then "done"

Step 8. Later: sound effects, music, the "reassess" loop

5. The timeline the builder writes (9:16, 1080x1920)

TrackWhat is on itSourceNotes
T2 Word highlightOne blue-box word per spoken word, sitting behind that word in the chunkwords.jsonStarts and ends with the word. Blue rgb(50,140,252).
T1 CaptionsTwo-line chunks, black bold text on a white rounded boxwords.jsonOn the seam in splits, at the 60 percent baseline on full-frame beats. Holds while its words are spoken.
V3 OverlaysMedication box + red X (beat 9), quote card (beats 13 to 14), chevrons (beat 16)PNGs we makeAlpha keyframes for slide-in and fade.
V2 B-roll / split bottomVeo clips, stills with push-inApproved assets onlyIn a split: cropped and positioned to the lower half.
V1 Kristian / split topHeyGen render, trimmed per beat04-heygen-rendersSource offset = timeline time for hook 3; see section 7 for hooks 1 and 2. In a split: cropped to the upper half.
A1 Master audioThe HeyGen render's audio, unbroken, unity gain04-heygen-rendersThe one voice track. Nothing else carries speech.
A2 Veo soundPour, plate, berriesVeo clipsOn, low under the voice; Ryan judges it in CapCut and mutes it there if it fights the voice.
A3, A4 Effects, musicLater (step 8)A folder I buildLevelled against the voice; music lifted on the CTA.
Frame rateHeyGen renders at 25 fps, Veo at 24, CapCut defaults to 30. Ryan's call: keep the source quality, add none. The timeline runs at 25 fps to match the talking head that is on screen most of the time; Veo clips are resampled by CapCut either way. Cuts snap to timeline frames, which is what the ad study's hard cuts need.

6. Captions

Ryan's spec (15 Oct): black text on a white background box, a blue highlight on the word as it is read, two lines on screen. Reference: the auto insurance ad 1019.mp4, measured below. The builder writes them; CapCut's auto-captions and HeyGen's subtitles stay out.

Reference at 8 s: white rounded box, black bold text, the spoken word on a blue box
Reference at 15 s: the highlight moves word by word; the line stays until its last word is spoken
ElementReference (measured on 1019.mp4, 1080x1920)Ours
BoxWhite, rounded corners, 110 px tall for one line, centred, three words wide (x 223 to 856)Same box, two lines, sized to the longest line, rounded corners
TextBlack, heavy geometric sans (Poppins or Open Sans Bold look), Title Case, three words a lineSame font weight and colour; two lines of 2 to 4 words; Title Case as the reference, or caps if Ryan prefers
HighlightThe word being spoken sits on a blue rounded box, rgb(50,140,252), swapped word by word on the voiceSame blue, one blue box per word timed from words.json; the box moves across both lines
PositionBox centre at 29 percent of frame height (the reference is a product crush with nothing in the top third)Where the storyboard puts captions for Kristian: on the seam in the splits, at the 60 percent baseline on full-frame beats, never over the chin or the jar
TimingA line holds while its three words are spoken, then the next line replaces itA two-line chunk holds while its words are spoken (about 1 to 2 s), broken at pauses and punctuation, never across a cut; 25 fps timeline

Why the builder writes them, not CapCut's auto-captions

7. Three hooks from one body

Ryan's rule: one HeyGen render is the underlying audio for the whole video, and the hooks are swappable heads. The approved reads already work this way (one body, three heads), and the HeyGen renders follow it: hook 3 is the full script, hooks 1 and 2 are head-only clips.

8. Decisions (Ryan, 15 Oct 2026)

  1. Captions: mine, in this edit step, never at video generation. Written by the builder from the word timing (section 6 says why that beats CapCut's auto-captions). Style: white box, black text, blue highlight on the spoken word, two lines.
  2. Highlight colour: the blue from the reference, rgb(50,140,252).
  3. Frame rate: whatever keeps the source quality, nothing upscaled: the timeline runs at the HeyGen render's 25 fps and 1080x1920, Veo's 24 fps clips are resampled by CapCut either way. Export 1080p.
  4. Veo native sound: the clips come with their sound; it goes on A2 and Ryan judges it in CapCut (mute there if it fights the voice). Test, not decided.
  5. Music: not yet.
  6. Sound effects: later, and mine to find or make and file in a folder; nothing for the first ad.
  7. Overlay PNGs (medication box, red X, quote card, chevrons, whatever the storyboard calls for): supplied by me, built deterministically, approved on the sheet like any asset.

9. What has to be proven first, before any ad is built this way

10. Build order and what Ryan does

PhaseWhat I buildWhat Ryan doesDone when
A. Prove itHarvest templates from his CapCut; words.json from the HeyGen audio; the builder for video clips, splits, stills, captions; the preview renderer for video sources; a six-second hook 1 buildInstalls CapCut, makes the Harvest project, quits; later imports the hook 1 folder and opens the resultThe six seconds open in CapCut with the split, the captions and the cut on "diabetes." where the storyboard says
B. First full adGA ad01-short hook 3 end to end: cut table on the sheet, manifest, plan, build, preview, installApproves the cut table and the preview on the sheet; four CapCut steps; exportsRyan has an exported MP4 of ad 01 hook 3 that he would run
C. Variants and soundHooks 1 and 2 projects; an effects folder I build; the reassess diffTweaks in CapCut if he wantsThree hook projects installed; effects on all three if wanted
D. Every other adNothing new: a storyboard in the clip-strip format plus approved assets is the only input. Ads 02 to 05, SugarReset, Olivaro run through the same stepsApproves storyboards and previews on each sheetEach ad is a production sheet with an Edit stage ticked

Cost of the edit step itself is zero. The only paid inputs (HeyGen credits, Veo credits, stills) are already in the production pipeline and unchanged by this.

11. Reference material filed