zeal.is|directing|commanding-heights-music-video
The Making Of: The Commanding Heights (the hyperpop music video, not the 40,000-word essay)
The Commanding Heights essay is 40,000 words, or something like 5 hours if you listen to it. The song is 2:24. This is how Claude and I got from one to the other, and every take we made on the way.
The music video as posted on X.
Watch it on X
The first full cut sucked.
It was a fast run of Midjourney pictures that didn't add up to a story, so I told Claude to make a new style and see. It came back with a board game in 3D, and a few hours later I was like, "Wow, just continue."
Below is every take from both sides of that, and further down, the board itself, running live in your browser. The why is in the X article; this page is how it was built. I'm CEO at Arcmira, and Claude found every clip with our MCP.
Storyboard
The planner I reviewed the video in, as it stood at final approval. Each moment of the song shows the take in the film, every Midjourney and Gemini take it beat, the blind judges' scores, and every earlier render with what changed. The strip is coloured by build: the anime build and the cut-out build. The cut-out build composed its scenes in its own engine, so its moments show frames from the film.
The board in 3D
The board the video plays on, running in your browser. Press play to fly the video's camera along the song, or switch to free look and orbit it yourself.
How it was built
The song
The soundtrack is the Suno take exactly as generated, 2:24.5, never edited. Claude transcribed the lead vocal stem with Whisper, cross-checked it with Gemini, then force-aligned all 300 sung words to the audio, down to each letter's onset, so the lyrics and the mouths could land on the exact frame. Stutters like "Ka-ka-ka-ka-ka-ka-ching!" were counted by scoring each candidate count in the aligner and keeping the winner.
A beat map of 328 beats came from fitting a tempo to each section and nudging each beat to its nearest drum hit. The tempo creeps from about 134 to 138 BPM across the song, and the map stays within 19 ms of the drums wherever they play. Every scene starts on a beat, so every cut in the video is on the grid.
The engine
Everything drawn on top of the pictures (lyrics, cards, receipts, search boxes, the singers' bubbles) comes from a small JavaScript engine Claude wrote for this video, rendered headless frame by frame. Cues are named by where they fall in the song ("three beats before heights in line 30") rather than by seconds, so when the alignment moved, every cue moved with it. The lyrics are on screen for 100% of the video.
Two builds, spliced
I liked two of the six looks, so two builds ran in parallel, each with its own agent: C, anime key visuals painted with Midjourney and Gemini, and F, a cut-out collage with its own engine. A lead table decides which build plays each stretch of the song. F leads the "own nothing" post-choruses, the second verse and the definition; C leads everything else.

C's pictures move with depth parallax: each one's depth map (Depth Anything V2) is cut into seven bands that slip past each other as the camera moves.
The board
The first full cut was a fast run of Midjourney pictures that didn't add up to a story. I asked for two new directions: a real board game rendered in 3D, and a flat top-down board as a fallback. The 3D board (three.js, toon-shaded, about 18 MB with its textures) came back good enough that the fallback was never used. From then on the board is the spine: each line, a pawn lands on a labelled square, and the cut goes into that square's world. The gold king is whoever owns the square, the pink pawn is Claudia and the blue pawn is me. The 3D agent delivered 102 takes across 13 camera shots.
The singers
Claudia and I lip-sync to the song itself. Each Seedance 2.5 take was given a portrait and the slice of the song's own lead vocal it should sing, so the mouths follow the real recording. Claude then measured each take's sync on the picture, how much the mouth opens and closes frame by frame against that slice of vocal, and kept the takes that matched. Every take is tracked for head position, so the round bubbles never cut off a head, and the bubbles stay put across a cut when the scene before had them in the same place.
One source of truth
The storyboard above is the tool I reviewed in. It and the live player read the same boards, so an edit to a scene showed up in both. Every change re-rendered only the moments it touched and kept the render it replaced, with a line saying what changed. That is where the 1,111 renders come from.
Blind audits
Claude's own idea: for each moment, cut a strip of nine frames and hand it to a fresh Claude with no context, which scores whether a stranger would get it (where we are, whether the story advanced, whether the line reads, the motion, the clutter) and suggests one fix. Eighteen audits ran between Oct 30 and Nov 1 PT. The lesson: the same strip can move a full point between readers with nothing changed, and readers ask for opposite fixes, so only findings that recur across audits got acted on.
Choosing between versions
Where a scene could go two ways, both were rendered. Eight scenes have switchable versions in the storyboard. For six of them, two blind judges ranked each pair from shuffled strips; I made every call on a side-by-side page.
The final render
The final is 4,336 frames at 30 fps, checked frame by frame against the cut.
What didn't make it
Every Midjourney and Gemini picture made for the video, by moment in song order. The 29 on screen in the film are framed green at the left; the 459 that didn't make it are the small tiles at the right. Most of the rejects are from the first cut, when every line got its own picture and nothing added up to a story; the board fixed that.

Full size: the 29 used, rejected, part 1, rejected, part 2. The flat 2D board, drawn as a backup and never needed:

Also left out of the film, and still in the storyboard: 90 of the 102 3D board takes, 41 of the 68 Seedance singer takes, and every earlier render. Left out of this page on purpose: the song's stems (used only for analysis), the full podcast episodes the six clips came from, the Claudia reference frames from claudia.gallery (they're anabology's), the essay's text (read it at the source), and the reference photos behind my character.
Cost and time
| Model | For | Count | Cost |
|---|---|---|---|
| Seedance 2.5 (OpenRouter) | the singers' moving shots, 720p | 56 tries, 5 refused at no charge | $81.10 |
| Gemini 3 Pro Image, Nano Banana 2.1 (Google) | plates, cut-outs and the Rail kings frame | 162 images | $22.88 |
| Audio analysis | transcription cross-checks | $0.01 | |
| Midjourney | plates and takes, on my existing plan | plan | |
| Suno | the song, on my existing plan | plan | |
| Total | $103.99 |
The cap started at $100 and went to $175 on Oct 30. Claude agents worked 86.7 agent-hours across 36.0 hours in which at least one was working, Thursday Oct 29 to Monday Nov 2 PT.
(It's way more economical to just give Claude access to Codex via CLI for imagegen btw, but I figured whatever let Claude figure it out for this one. The one oldschool railmaster pic from Gemini 3 Pro Image was sweet though and we ended up using it.)
Credits
| Essay | The Commanding Heights, by Will Manidis and Joe Roberts, commanding-heights.com |
| Character | Claudia is an open character by anabology (claudia.gallery) |
| Clips, found with Arcmira | Founders Podcast (Nov 17 2025), TBPN (Aug 30 2025), Farzad (Feb 03 2026), Invest Like The Best (Jul 07 2026), All-In Podcast (Sep 13 2024), MrBeast (May 02 2026) |
| Card | TBPN, “One for the books” |
| Footage | Subway Surfers by SYBO, gameplay from its channel (2024, 2026) |
| Dancers | Anya Forger, Vera, Mindy, Nadine, Konata Izumi, Evernight, Hatsune Miku, Yukiko Amagi; keyed by camryn2223, coronadansen, mattderac, Nykko Nimye, Laurensius Gading and Chroma-Keyed Potato |
| Tools | Claude (Opus 5.5), Suno, Arcmira, Midjourney, Seedance 2.5, Gemini 3 Pro Image, three.js |
Run it yourself
The code, prompts and every decision are in github.com/zealous1/commanding-heights-music-video. It's listed with its recipe on AI Music Videos.