Why most AI-edited videos look like garbage
Everybody's first try at AI editing is a caption app. You get the same yellow bouncing words as ten million other reels, and zero graphics that actually mean anything. The problem isn't the AI. The problem is the tool gives it a menu of three presets and calls it a day.
The fix is to skip the caption apps completely and have the AI write the edit as code. HTML for the layout, CSS for the look, a timeline for the motion. That means the AI can build anything it can describe. A versus card. A fake terminal typing out your prompt. A follow button that clicks itself. All timed to the words in your transcript.
What's actually in the edit
Watch the reel again and here's what you're looking at:
- Karaoke captions. Three or four words at a time, big and bold, on a dark glass plate over my chest. The word I'm saying pops orange, everything else stays cream.
- A versus card that slides “GPT-6 Astra” in on the left when I name it, punches an orange VS badge in, then slides “Fable 5.1” in on the right.
- A giant orange zero that slams in and shakes when I say I've never edited a video.
- A fake prompt file that types itself out in a terminal window, with a “1 PROMPT” sticker that slaps on when I say “single prompt” and a “214 lines” pill that pops on “very long time.”
- A comment bubble that types the word “edit” when I say it, then a reply from me appears saying the guide's been sent.
- A follow button that gets clicked, ripples, and flips to “Following” the second I say “follow me.”
Every one of those sits in the empty space above my head. None of them ever cover my face.That's a hard rule in the prompt and it's the thing that separates an edit from a mess.
The one rule: illustrate the sentence
The trick isn't animation. It's mapping. Before any graphic gets built, the AI reads the transcript and marks the beats worth illustrating: a comparison, a number, a claim, a tool name, a call to action. Each of those gets exactly one graphic, timed to the word.
| What I said | What showed up |
|---|---|
| “Who edits this video best, GPT-6 Astra or Fable 5.1” | Versus card, each name revealed when spoken |
| “I’ve never edited a single one of my videos” | Giant orange 0 next to “Videos I’ve ever edited” |
| “Edited with a single prompt” | Terminal window typing the prompt, “1 PROMPT” sticker slaps on |
| “Took me a very long time to write” | “214 lines” counter pops on |
| “Just comment edit” | Comment bubble types “edit”, then my reply appears |
| “Follow me for more” | Follow button clicks itself and flips to Following |
Your script gets its own graphics. A tutorial becomes numbered steps. A pricing rant becomes oversized numbers. A story becomes a timeline. Do not copy my graphics onto your video. Copy the method.
The look (and how to make it yours)
These are the exact settings from my edit on a 1080 x 1920 canvas. Swap the colors and fonts for your own brand. The prompt below asks for them.
| Element | My treatment |
|---|---|
| Canvas | 9:16, 1080 x 1920, 30 fps, H.264 |
| Caption font | Archivo, weight 900, expanded width, uppercase, 74 px |
| Caption plate | Dark grey glass, 62% opacity, 18 px blur, 26 px corner radius |
| Caption position | Centered, 1330 px from the top. Over the chest, clear of Instagram’s buttons |
| Active word | Brand orange #FF5B1F, scales to 1.14x with a snappy overshoot, 0.11 s |
| Other words | Cream #F4EDE0 |
| Graphic cards | Near-black #1D1D20, thin #2C2C30 border, 28 px radius, soft shadow |
| Card placement | The top zone, 150 to 480 px from the top, above the head |
| Card entrance | 0.3 s, scale 0.9 to 1, 30 px rise, overshoot ease |
| Card exit | 0.2 s fade with a slight rise and shrink |
| Orange rule | One orange hero element per card. Never two. |
| Vignette | Soft dark gradient top and bottom so overlays and captions pop |
| Sound | Original voice only. No music, no sound effects |
Two things make this look expensive instead of cheap. First, no system fonts, ever. Inter, Roboto, and Arial read as “AI made this.” Second, one accent color used sparingly. If everything is orange, nothing is.
The tools I actually used
| Tool | What it did |
|---|---|
| Claude Code (Fable 5.1) | Read the transcript, planned the beats, wrote the whole composition, fixed its own lint errors, checked the frames, rendered |
| HyperFrames | The video framework. Your edit is one HTML file plus a GSAP timeline, rendered in headless Chrome to MP4. Free and open source from HeyGen |
| Whisper (faster-whisper, small.en) | Word-level transcript with timestamps. Runs locally, no API key |
| FFmpeg and ffprobe | Inspected the source and pulled reference frames so Claude could see where my head was |
| Google Fonts | Archivo and IBM Plex Mono, downloaded locally so the render never depends on the network |
No stock GIFs. No AI video clips. No caption app. Every graphic was drawn with code, which is why it's sharp at any size and matches the brand exactly.
Total render time for an 18 second reel: 40 seconds on a MacBook.
Install it in two minutes
Two things need to be on your machine: Node.js 22 or newer and FFmpeg. Then tell Claude Code:
Prefer to do it manually? Paste these into your terminal one at a time:
If doctor shows green checks for FFmpeg and Chrome, you're ready.
The copy-and-paste editing prompt
Fill in the brackets and paste this into Claude Code from the folder your video is in. If you don't have brand colors, write “none” and it'll ask you three quick questions or pull the look from a reference reel you like.
Step by step, what happens when you run it
- Inspect. Claude probes the file, pulls five frames, and figures out where your head is.
- Transcribe. Whisper gives it every word with a start and end time.
- Plan. It reads the transcript and picks the beats. Ask it to show you the plan before it builds.
- Build. One HTML file: video layer, vignette, five or six graphic cards, twenty-something caption groups, and a timeline that fires every pop on the right word.
- Check. Lint catches missing animation cleanups. Snapshots catch layout bugs. Mine caught collapsed word spacing and a terminal that didn't wrap. Both fixed before render.
- Render. One command, 40 seconds, done.
Next video, you swap the file and the transcript, rewrite the beats, render again. That's the whole system.