A year ago I made my first AI music video: a ghost story set in an empty shopping mall at night, built from Midjourney images, a Udio track and my first serious attempt at video editing. You can read all about it here.
This project is the follow-up. Same mall, same ghost, a new song and a very different workflow. This time I worked with Claude as an art assistant from the first idea to the final render. The result is "Eau de Minuit – She Whispers in Echoes".
🎯 Motivation
My first video taught me a lot, but it also showed me where I struggled: keeping the character consistent, timing the cuts to the music, and the long hours in the editing software. I wanted to find out how far I could get if an AI assistant handled the structure, the timing and the technical side, while I stayed the art director.
👻 The Story
The video is based on my short story "Eau de Minuit". In the Golden Star Mall there used to be a perfume called Eau de Minuit. It was pulled from the shelves after a few weeks because it was too strong and too strange. The face of the campaign disappeared, first from the ads, then from the mall. Since then she walks the upper floor every night. She touches nothing and says nothing, but she always looks straight into the security cameras. At 05:58 she stops, turns once to the nearest camera, and vanishes.
The concept follows this almost literally. The security camera tells the story: almost every night shot shows a camera number, a blinking REC dot, the date, and a clock. That clock is the thread through the whole video. It runs from 23:04 to 05:58 and hits that moment exactly on the last sung line. Then the image glitches, the clock jumps to 09:00, the mall opens in warm morning light, and the day camera still shows her standing in the crowd.
🎵 Measure the Song First
The song was made with Suno. Before a single image existed, we measured it: tempo, sections and the exact moment each of the 13 lyric lines starts. Automatic speech recognition didn't work reliably on music, so Claude built a small web page where I played the song and pressed the space bar at every line. Three and a half minutes of tapping gave us exact timings.
It turned out the song runs at 128 BPM, and every lyric line lasts exactly four bars. From then on the whole video sat on a grid of 110 bars. Every cut lands on a bar line, and every line of lyrics appears exactly when it is sung.

The song as a timeline: loudness over time, the sections of the video and the start of each lyric line. The dip at 2:49 is where she vanishes at 05:58.
Before generating any images, Claude rendered a rough version with placeholder cards in place of the pictures. That meant I could watch the full video, with timing, camera overlay and lyrics, from day one. Each image I created then simply replaced its placeholder.
🧍♀️ One Face, 25 Scenes
Keeping the character consistent was again the hardest part, and it took three attempts.
I started with "Claudia", an open character from claudia.gallery that comes with an MCP server, a wiki and a lot of hard-won lessons from seven AI music videos. Her look is held by a fixed description in every prompt. In practice the face still changed from image to image.
So I created my own character: a young woman in a 1970s style, with black hair in a low bun, a sage-green pinafore dress, a mustard cardigan, a pink chiffon scarf with a pale-blue bow, and pink sneakers. Two reference images define her: a full-body shot for wide scenes and a portrait for close-ups.

The two character references: full body for wide and medium shots, portrait for close-ups.
A few things I learned with Midjourney's Omni Reference :
- It only works in version 7, not in V8. So all scenes with her ran on V7, and empty rooms on V8.2.
- The weight matters a lot. Too high, and Midjourney copies the portrait, studio background and all. Too low, and the face drifts. I ended up with 200 for wide shots and 60 for close-ups.
- If she needs to be small in the frame, generate her large first, then use "Zoom Out". She stays the same person.
- To make her vanish, I erased her from the 05:58 shot in the Midjourney editor and let it fill in the empty hall. The two images line up perfectly, so in the video she simply dissolves while the room stays.
Even with all that, Midjourney 7 wasn't precise enough . The faces still varied from scene to scene. In the end I edited every scene in Gemini to match the face to the portrait, and then upscaled everything with Topaz Gigapixel for Full HD. (Note: I am aware that there is another approach for consistent face reference in the Midjourney 8.2 Editor. But I skipped that for now in the whole workflow.)

All images of the video in order, from the busy mall in the intro to her eyes in the final shot.
Not every image came out as planned, and some of the best moments came from that. A scene meant for the atrium came out in a parking garage, so the camera became "CAM 09 · PARKING LEVEL 2". A mirror reflection that looks into the camera instead of showing the back of her head is physically wrong, and exactly the kind of wrong a ghost story needs.
🎬 From Stills to Film
There was no video editing software involved. Claude wrote a Python program that builds every one of the roughly 5,300 frames from the shot plan and the images. It handles slow camera moves across each still, a small push on the beat during fast cuts, and two looks:
- Surveillance: desaturated, slightly teal, softer, with noise, scan lines, signal glitches and the camera overlay.
- Cinema: original colours, fine grain, a slow zoom with a pan, used for close-ups and details.
For the text I chose a VHS pixel font for the camera overlay and an italic film serif for the lyrics. The machine and the story, side by side.

Left: the surveillance look with camera overlay and clock. Right: the cinema look for close-ups, with the lyrics as subtitles.
A few moments got their own effect. On "I fade" she breaks apart into ghost echoes and noise. Before 05:58 her face at the lens dissolves into static. And at exactly 05:58 she turns to the camera and is gone.

05:58:00 she looks into the camera. 05:58:04 the hallway is empty.
I also let Claude write a concept for real lip sync with a video model (Seedance) and the vocal track from Suno. In the end I dropped it: too much effort for me, I wanted a very quick result. In the story she walks the mall in silence and her voice comes from somewhere else. Stills with camera movement fit surveillance footage, and they kept the project simple.
🔧 Tools
- Story: my own short story "Eau de Minuit"
- Music: Suno
- Visuals: Midjourney (V7 with Omni Reference)
- Character consistency: Google Gemini
- Upscaling: Topaz Gigapixel
- Art assistant: Claude (concept, shot list, prompts, image review, timing, rendering)
- Under the hood: Python, FFmpeg
💡 What I Learned
- Measure first, then create images. With the tempo grid and exact lyric timings, the whole structure was done before the first picture existed.
- Have a watchable video from day one. Placeholders made every step visible and every decision easier.
- Consistency needs more than one tool. Prompts alone weren't enough, Midjourney's references weren't enough. The combination with Gemini finally got me one face.
- Reinterpret mistakes instead of throwing them away. Some of my favourite shots were "wrong".
- Watch for repetition. Her frontal stare became her signature, but it needed shots from above, from behind and in profile to stay interesting.
Compared to last year, the biggest change wasn't a single tool. It was the collaboration. I stayed the art director and made the creative calls; Claude turned them into structure, prompts, timing and code. That freed me to focus on what the video should feel like.
🔗 Watch. Read. Explore.
▶️ The video on YouTube: https://youtu.be/S1EKuC1ddnI
📖 The first video and its making-of: https://www.b3tr33.net/blog/the-making-of-a-music-video
🖼️ The gallery with all visuals and videos: https://flic.kr/s/aHBqjD94G9
Curious to try something similar? Or want to talk creative workflows with AI? Let's connect.
