Claude made a music video for my song and cast the lovers the wrong way round
From one prompt, Claude built a 2:51 music video for BLACKWATER's love song in Blender and Godot, with no AI video: new models, 41 shots cut on bar lines, the lyrics set inside the scenes. It put the wrong person on the shore. Both cuts are below, playing in lockstep, with the one paragraph of notes that turned the first into the second.
Claude made a whole music video for “Moonlight at the Waterline” from one prompt, and cast it backwards: a woman waiting on the jetty, a man diving below. In the song it’s the other way round. Five hours of careful work built on a casting choice nobody had asked it to make, and the second cut, three hours later, came from one paragraph of my notes.
The song is the slow 1960s ballad on the jukebox in BLACKWATER, the one about waiting at the waterline for a diver who is late. Both cuts below were made in one Claude Code session on 27 September. Neither uses AI video or gameplay footage: every model was built new in Blender, and every frame was rendered by a script running inside the Godot game at a fixed 24 frames a second.
The prompt
This is what I typed, a little before one in the morning:
Make a music video for moonlight at the waterline. Create brand new scenes and assets and render them in the blender, no gameplay capture and no AI video. Transcribe the lyrics and build the shot list from them, with every cut on a bar line and include the lyrics in the music video in a professional way so that they feel like part of the video instead of just captions.
It went on to ask for a director script, a clay previs with contact sheets, ElevenLabs sound effects under the song, a −14 LUFS master, grade, letterbox and title cards.
Five hours later the session handed back a 2:51 video. It had transcribed the song with two Whisper models and fixed the words they disagreed on by context (“coat” not “cold”, “and sigh” not “inside”). It measured the song at 62.07 BPM in 12/8, so a bar is 3.87 seconds, and built 41 shots from bar numbers rather than by hand. It modelled a woman, a diver, a pale 16-metre eel with paired green lights down its flanks, a cove with a lighthouse and a flooded cave. It placed 43 ElevenLabs effects on the frames where the director script logged them.
The lyrics never sit at the bottom of the frame. They get written in wet sand and taken by the tide, hang along the guide line, show only where the diver’s lamp shines, drift in a breath.
And the woman on the jetty came from a lore draft in the game’s folder about a woman who waits. The session said so in its summary. The clay previs came to me partway through. I didn’t answer until the finished cut.
Both cuts, in lockstep
- (title card: June 1968)
- 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?
Both cuts share the song and the bar grid, so the same second is the same lyric in each. Clicking a line sends both there.
The notes
My reply, at 13:41 the same day, started with “Incredible!” and then listed what was wrong. The line that mattered most was in the middle:
BTW the lover on the surface is the guy, the diver is the girl. Also, whenever you depict the diver, I want it to be close up shots of her and her gear, never a full body shot to give the feeling of mystery because the lover is unsure.
The rest asked for the lyrics that “appear slightly out of view or do not appear when the singer sings them” to be fixed, for “I see your oxygen bubbles rise” to be the peak of the song, starting on her mask and climbing with the bubbles without ever showing the surface, and for the creature to be “implied not shown”, “more ominous than scary”.








One change I hadn’t asked for: v1’s ending brought the diver back out of the sea, and v2’s leaves it open. In v2 a light rises under the water, maybe her lamp, comes closer, and dims. He sets his lantern down and steps in. The last shot is his lantern, her coat, and one ring on still water.
“Out of view” became a test
The note I expected to be the vaguest was the one that got fixed most completely, because the
session turned it into a number. It added a check to the director script: when each word is
sung, it has to be fully inside the 2.39:1 frame and readable within 0.4 seconds. The script logs
every word it draws, frame by frame, and lyric_audit.py compares that against the word timings
from the transcription.
The first render of the revision failed 58 of the 148 sung words. The fixes were a faster fade-in, a higher minimum brightness for words lit only by the lamp or the lighthouse, words that ride with the camera in moving shots, and lines that carry across a cut when a word lands right on it. The next renders failed 8, then 6, then none.
The bubble line got the most work. In v2 it’s one continuous take: her mask, gold bubbles bursting as she breathes out, the camera climbing with the column out of the dark as they turn silver-blue, and the last bubble dissolving into the moon before the camera comes down to him on the jetty.




It caught other things on its own contact sheets before I saw either cut: cameras sitting inside the woman’s body, a ring artifact from the lighthouse beam, untextured cave rock, the creature glowing green all over. Some it left and named: the faces are crude up close, which is why v1 keeps her in silhouette and profile, and the lyric engraved inside the pocket watch at 0:56 is barely legible in both.
What it cost, and what came after
The first cut took 5 hours 6 minutes. The revision took 2 hours 54 minutes, and partway through it the laptop’s C: drive filled to zero and the assembly died. The session deleted about 12 GB of its own superseded renders, all regenerable from its scripts, and made the assembler clean up after itself.
The same turn also ran a 30-second test of the song through MiniMax-H3, a local video model, using the Godot frames as a motion reference; I asked for the whole song that way afterwards. None of that is shown here: H3’s licence excludes the United States, for the model and its output.
Early this morning I started a fourth version. The brief I pasted calls v2 and the H3 cut “the bar to beat, not the ceiling”, and its story section opens: “He waits on the shore; she is the diver. The singer is the man waiting.”
The first prompt asked for every cut on a bar line and every lyric inside the world, and left out who was singing. The session filled that gap from the nearest note it could find, and built five careful hours on it. Now it’s the first line of the brief.