A love song's music video, made five ways with AI
Claude made five music videos for a love song from my game, each a different way. What broke in each, how the newest keeps its setting consistent, and how it compares with the one drawn in code.
Claude has now made five music videos for “Moonlight at the Waterline”, the love song from BLACKWATER, the cave-diving zombies game I built in four days. In the song a man waits all night at the end of a stone jetty with a lantern, while someone he loves dives a sea cave across the bay. We never see who.
The versions made with AI models kept failing the same way. The model copied whatever it was shown, mistakes included. So the new one paints every shot of him over a 3D set of the jetty, blurred until only the layout is left to copy. I think the one drawn in code might still be the better video.
The new one is 34 shots over 2:45, painted to look like a film still from 1968. Most of the motion comes from MiniMax-H3 (H3 for short), an AI video model. Three shots of rising bubbles are drawn in code. The final render ran on a rented graphics card for $2.44.
The new one next to the one drawn in code
I like the version eight agents drew in code a lot. Both are timed to the same song, so they play in sync. Click a lyric line and both jump to it.
- (the jukebox / the title)
- The tide is slowly creeping up the sand
- The evening breeze is chilling on my hand
- Your empty coat is sitting here with me
- I'll watch the silver ripples on the sea
- And I'll wait for you
- The lighthouse throws its long and lonely beam
- While far below you chase an underwater dream
- I check my pocket watch and sigh once more
- The bubbles rising slowly to the shore
- You're a little late, my love
- Moonlight at the waterline
- I'm keeping vigil by the sea so blue
- But deep down dark where secrets stay
- The heavy water keeps the things it likes
- So please come back to me
- I see your oxygen bubbles rise
- Floating up into the starry skies
- My heart beats double time
- Under the pale moonshine
- Oh, tell me you're alright
- The water keeps what it likes
- But you will return
- Won't you, my love?
The code version never loses its one idea, his lantern above the water and her lamp below. Every word is readable before it’s sung. Its weak spots are hands, her coat, and a jump from kneeling to sitting at the drop. The new one has a real place. The jetty and the town stay the same from every angle, and the camera rises, circles him and sinks through the waterline. It also took three rounds of stills and seven thrown-out takes, and one round sat twelve days waiting on my answer.
What each version taught me
- v1 copied an old story draft from the game’s folder. It put the wrong lover on the jetty, because my prompt never said who sings.
- v2 fixed the casting. Up close, its people still looked like game models.
- The whole-song H3 cut copied its gray guide. It repeated one composition about a dozen times, and every shot lasted exactly one bar.
- The code version had no image or video model that could copy anything. Eight agents made it in 80 minutes, and that might be why it holds up so well.
- The new one copied its 3D set too, box houses and all. Blurring the set before painting over it fixed that.
- Naming a light’s owner paints the owner. “A diver’s lamp” put a diver in 9 of 11 cave frames.
- A painted last frame has to fit the camera move. When it didn’t, H3 jumped straight to it instead of moving.
Five videos, one song
In the player above, the new one is labeled v4.
| Version | Date | How it was made | What was wrong |
|---|---|---|---|
| v1 | 27 Sep | 3D models built in Blender, filmed inside the Godot game engine | The wrong person on the jetty, the cave creature shown instead of hinted at, lyrics out of frame |
| v2 | 27 Sep | The same, after one paragraph of notes from me | Right casting, crude faces up close |
| The H3 cut | 27 to 28 Sep | v2’s frames as a guide for the MiniMax-H3 video model | The same shot again and again, every cut on the bar, small soft lyrics |
| The code version | 4 Oct | Eight agents drawing every frame in code, no image or video model | Hands, and a coat that reads like a loaf of bread |
| v4, the new one | 17 Oct | AI paintings over a 3D set, animated by MiniMax-H3 | Seven takes thrown out before it was done |
The first three versions
Claude built the first two cuts in Blender, a free 3D program, and filmed them inside Godot, a free game engine. There was no AI video at all. This is v2.
So I asked for the whole song through H3. Claude gave it v2’s frames as a guide (a previs, a rough version of every shot). It also painted over those frames with Qwen-Image, an AI image model, to make the still each clip ends on. That came to 33 six-second clips chained end to end, about 2.9 hours on my laptop’s graphics card.
It looked more like a film and less like a game. I told Claude it was “a lot better, but is still extremely subpar”. H3 copied the guide’s one composition, him from behind with the moon on the water, about a dozen times. Every shot lasted exactly one bar, so the edit has no shape.
Everything else wrong with the H3 cut
- The lyrics were pasted back on in spots chosen for the Godot framing, small and thin over different pictures.
- Her gear changed from shot to shot.
- Bubbles rose to a visible surface, even though the prompt said you never see the surface.
- It rendered at 736x416, so it was soft.
Here are frames from across the whole cut. It’s row after row of the same shot.
What I cut from the first plan
The new one started with a brief that called v2 the bar to beat. Claude’s first board had 38 painted keyframes. A board is a set of stills, one per key moment, that I OK before any video gets made. I cut these four ideas.




My notes said you should never see her face or be able to tell the diver’s gender. No old man, and a lot more camera movement. The note that shaped everything after it was about the place. “In every clip of him standing there the surroundings are slightly different.”



My other notes on the first board
- Bubbles breaking the surface by the jetty made no sense when she’s far across the bay.
- No bubble-to-moon dissolve.
- The reel was in the water in some shots and not in others. Some shots had a dock and some didn’t.
Building the jetty in 3D first
I suggested painting him once and spinning a camera around him with H3 to get a 3D model. Claude tested it first. H3 made up the side it couldn’t see, a whole town of colored houses included, and the props around him moved. Every run would invent a different place.
So Claude built the place first, in Blender, from code. A jetty, a headland with a lighthouse, a line of cork floats out to the cave, and the moon pinned to one spot. Every shot of him became a painting over a render of that set from the shot’s own camera.


How each painting knew what its camera could see
The prompt for each painting named only what that camera could actually see. Claude worked that out by checking the line of sight from the camera to every landmark. Without it, a view facing away from the sea came back with a moon and a lighthouse pasted in.
My next note said “the 3d space doesn’t change every time like it used to”. But now the paintings stuck to the set too much. The town was flat, identical box houses, because that’s how the set had it. “Because your previs has no trees, there are no trees in the image.”
Blurring the set so only the layout gets copied
The fix was to give the painter less. Claude now blurs the set render before Qwen-Image sees it, and the prompt says to keep the camera, the horizon and the big shapes, and to paint every surface fresh. The town became one wide painting of cottages on a wooded hillside, hung on a curved card in the set, 120 metres behind the jetty. Every camera sees the same town from its own angle.
Same shots, three ways. Strictly over the set, loosely with no town, and loosely with the painted town.
H3 gets no guide video this time. Each clip only moves between its painted first and last frames. There’s a setting that’s supposed to make H3 follow a guide less. A test on Earthlight, an episode of my AI TV series, found it changed almost nothing at any value between 0.55 and 0.85. How much of a guide gets copied depends on what you put in the guide.
The cave, the retakes and the ending
Six shots came back for retakes, one of them twice. Most had the same cause. A painted last frame has to be a believable end of the camera move, or H3 cuts to it instead of moving there.
The cave lamp, the render, the retakes, the ending and the bubbles
The cave lamp. The caves got no set at all. They’re painted from words, very dark, lit by a beam from outside the frame. The first batch put a diver in 9 of 11 frames, because the prompt said “a diver’s lamp”, and naming the light’s owner paints the owner. The light is now just a shaft from somewhere outside the picture, and the cave is empty.


Twelve days, then $2.44. Claude had asked me to OK about four and a half hours on my laptop’s graphics card, and the board sat waiting twelve days for my answer. When I finally approved it, a rented 48 GB cloud card (an L40S) did the work instead. That was 37 clips at 1344x768 with the last shot as a chain of four, plus 20 paintings and 2 keyframes. The card ran 2 hours 8 minutes, about an hour and 41 of it actual GPU work. A separate Claude session ran the rented machine and picked up each batch as it was ready. It cost $2.44.
Six retakes. Then Claude checked every clip frame by frame, and six shots came back, one of them twice.






When the painted last frame fit the move, H3 moved beautifully, like the arc around him that slides the town off the left of the frame and brings in the open bay. Where Qwen had painted the end from another height or angle, H3 didn’t move at all. It cut, or cross-faded, to the last frame in the first half-second. Those shots now run from their first painting alone.
The ending in three takes. The last shot is one unbroken move down the cave to his lantern, four clips chained together, and it took three tries. With only a start and an end frame, H3 invented the middle. The far light became a candle seen from straight above, and then the picture wiped across to the ending. A middle frame fixed the third clip. Taking the end frame off the fourth removed the last wipe.



Where the bubbles come from. They never come from the edge of the screen. They seep from cracks in the rock far out under the bay, then fill the whole night sky above him. They’re drawn in 3D through each shot’s camera, and hidden behind him and the stones by a cut-out mask made from the clip itself.