Skip to main content
user@aqno:~$ cat rich-in-the-dark:-a-15-second-ai-music-video-stack.md

Rich in the Dark: A 15-Second AI Music Video Stack

Written by Giuseppe Aquino
Published on: 2026-07-26
ai, music, workflow, side-projects

I wanted a short vertical for a Suno track — not a four-minute epic, just the hook people would actually loop. The song is Never Fancy; the line that stuck was we look rich in the dark. Fifteen seconds. Ordinary-night cool. No VIP velvet.

This is the stack that got me there, what each tool actually did, and where the “upload song → finished MV” fantasy fell apart.

Tools, in the order I used them

Step Tool Job
Song Suno (v5.5) Write and generate Never Fancy
Character + scene stills Gemini (image) Lock the face, then night-bus / walk / hallway stills from a reference photo
Motion Kling (image → video) Turn each still into ~5s silent cinematic clips
Cut the hook ffmpeg + lyric timing Trim the master to the pre-chorus → first two chorus lines (~15s)
Base edit CapCut Lay three scenes under the trimmed audio
Singing close-ups Hedra Animate the locked still to the same 15s audio (lip-sync)
Sprinkle / export ffmpeg again Hard-cut lip-sync punches onto the base cut

What I did not use successfully for the video itself: Gemini Veo. It refused the night-person generations with a policy wall. Stills were fine. Motion was Kling’s job.

1. Lock the look before you animate anything

I started with one character reference — an AI character I already had — and asked Gemini for a photoreal night portrait: thrift hoodie, cold phone glow, crushed blacks, never fancy. That still became the identity lock for every later shot.

Then three scene stills with the same face attached:

  1. Night bus — rain on the window, blue screen light
  2. Walk home — wet sidewalk, soft bokeh
  3. Hallway — fluorescent tubes, quiet flex for the chorus

If the face drifts between stills, Kling cannot save you. Consistency is an image problem first.

2. Kling for motion, not for the soundtrack

Each still went into Kling as image-to-video. The prompts were motion-only: slow push-in, phone flicker, rain streaks, preserve the face. Medium/low motion kept the identity stable.

Important detail: Kling (and most cinematic generators) will invent their own audio if you let them. I muted every clip. The Suno master stayed the only soundtrack.

3. Find the viral island, then cut the song to it

The full track is ~2:37. The useful social object was much smaller: pre-chorus → “We’re never fancy / We look rich in the dark.”

I aligned lyrics to timestamps (~00:20.500:35.5) and trimmed a dedicated MP3 with ffmpeg. CapCut got that island, not the whole song. Three ~5s Kling clips map cleanly onto fifteen seconds of audio.

4. CapCut is the glue

Base timeline:

  • 0–5s → bus
  • 5–10s → walk
  • 10–15s → hallway

Hard cuts on phrase changes. One shared grade (cool shadows, crushed blacks). No fancy transitions — the song already supplies the rhythm.

5. Hedra for lips, not for the whole movie

CapCut cannot invent singing mouths on Kling B-roll. Hedra can: upload the locked still + the 15s island audio → lip-synced performance.

Hedra was slow (on the order of half an hour for that clip) and credit-hungry, so I did one generation, not three. Then I cut short punches from it — especially on never fancy and rich in the dark — and hard-cut those into the base edit. Overlay tricks froze frames; replacing segments did not.

The result is mostly Kling atmosphere with Hedra face hits on the title lines. That mix reads more like a music video than either tool alone.

What I would repeat

  • Still → video → edit → lip-sync insert, not “one tool that hears the song.”
  • Trim the audio to the hook before you generate expensive video.
  • Mute every generative video track; your release WAV/MP3 is the master.
  • Spend Hedra only where the mouth must match the lyric.

What I would skip next time

  • Fighting Gemini Veo after the first policy refusal
  • Lip-syncing every scene still
  • Expecting a song-to-video agent to deliver this noir look in one click

The interesting part was not the final render — it was learning which tool owns which five seconds.

EOF