← Blog

Trying to Make a Trending Rap Video with AI

· 12 min read
AI Videos AI MV MiniMax H3 Suno Storyboarding
Making an AI Video

Trying to Make

a Trending Rap Video with AI

Seven steps for making a story-driven MV with AI, from choosing a topic to upscaling. The problems I ran into are collected at the end.

Process

The process and models used

The two rap MVs below followed the same process. Here are the steps and the models used for each one.

Seven steps for making a story-driven MV with AI1Pick a topic and a reference2Characters ⇄ song3Test what the model can do← If it fails, back to 24Storyboard: one image per shot5Generate shot by shot6Check → regenerate → codify← If it fails, back to 57Upscale after the edit is locked← If it breaks, upscale again✓Final: edit, subtitles, publish
The seven steps; dashed lines show where the process loops back
Step Task Model Alternatives (not tested)
1 Measure the pacing of a reference video Claude Code Codex, Gemini CLI
2 Write lyrics Claude Code ChatGPT
2 Make the song Suno Udio
2、4 Generate characters, a master image, audience, and DJ images z-image ChatGPT image generation, Nano Banana
2 Separate vocals; feed the instrumental to shots without singing Demucs UVR
2 Align the timing of each lyric line Whisper WhisperX
3、5 Generate shots from reference images and audio MiniMax H3 Wan 2.2, Seedance
4 Storyboard meeting (five roles) Codex Claude Code
6 Review rough footage and write check scripts Claude Code Codex
6 Measure how far the mouth opens MediaPipe dlib
6、7 Review the scripts Codex Claude Code
7 Upscale to 1080p SeedVR2 Topaz Video AI
Finished video Edit and add subtitles Claude Code (writing ffmpeg scripts) CapCut

I ran these experiments from 2026-10-01 to 10-12, with all generation on one RTX 3090. I tested only the set of models shown here; if you use different models, start with test generations (step 3).

‘Koxinga's Exit’: vertical, 60 seconds, 14 shots · Open on YouTube ↗
‘Whose City’: horizontal, 127.56 seconds, 53 shots · Open on YouTube ↗
Steps

The seven steps

1. Choose a topic and find a reference video

The topic needs a conflict built in, so the lyrics have something to play with: Athena and Poseidon really did compete for Athens in mythology. I used a reference video to measure pacing. For ‘Whose City,’ I measured a Three Kingdoms rap battle: each shot lasts 2–3 seconds, cuts land on the beat, and about a quarter of the shots show people who are not singing.

2. Make the characters and song together, revising both

If the lyrics mention something the character doesn't have, regenerate the character. If a character turns out better than expected, go back and adjust the musical style or lyrics. When the song comes back, first measure what was actually sung; Suno may change the sections.

For the characters, first research visual references, then draw four-view character sheets, and finally generate one master image with all the characters together. Crop each shot's reference image from that master, and the people stay consistent.

Left: the master image with both people; right: individual reference images cropped from the two boxes
Left: the master image with both people; right: individual reference images cropped from the two boxes

I skipped the first two steps for both videos, so the model had to invent the front and side views for ‘Whose City’ on its own.

3. Test generations first, regardless of image quality

Change only one thing at a time to see which wording fails and what the model cannot do. What I found with H3:

  • The model follows the reference image most closely, then the audio, and the text last
  • The first few seconds of each shot transition from the reference image
  • Lip movements don't match the song, and camera angles cannot be specified reliably
  • A shot can only be generated at 3, 5, 10, or 15 seconds

I tested 11 shots before making ‘Whose City’ and caught two errors that would otherwise have been copied across all 53 shots.

Test generation: intended as a close-up of Poseidon. At 0 and 2 seconds, it is a wide shot of both people and the DJ; at 4 seconds, the camera has moved closer, but Athena is still in frame
Test generation: intended as a close-up of Poseidon. At 0 and 2 seconds, it is a wide shot of both people and the DJ; at 4 seconds, the camera has moved closer, but Athena is still in frame

4. Draw a storyboard, one image per shot

For each shot, specify the framing, camera movement, what it should convey, and who is singing. Add an image, then lay the shots against the song as an animatic to check the pacing. Work within the limits found in step 3:

  • Crop the reference image to the shot's framing first
  • Keep each shot where the mouth is clearly visible under 2 seconds
  • Make adjacent shots substantially different in composition
  • Put recurring elements, including their colors, in one table
The ‘Whose City’ animatic: above each frame are the shot size, angle, and action
The ‘Whose City’ animatic: above each frame are the shot size, angle, and action

5. Generate each shot from the storyboard

Generate an extra 2.5 seconds for each shot so there is footage to trim from the beginning. Give each shot its own seed; a seed is a number that determines how the image looks. For continuous actions like turning around, continue generation from the last frame of the previous shot.

I write prompts using the three rules below. The model follows the reference image most closely, then the audio, and the text last (step 3), so all three need to describe the same thing.

First, state what you want clearly. Writing only ‘mouth closed’ still made the mouth move. Specifying that the character was not rapping, held the microphone by their waist, and stared with pursed lips finally kept it closed. Framing works the same way: with a full-body reference image and a ‘chest-up’ description, the model pushed in from full-body to chest-up. Cropping the reference image to a half-body view first stopped the push-in (though I also changed the description and seed that time).

Zoomed in on the face. Left: microphone in front of the mouth, which keeps moving; right: mouth closed throughout
Top row: full-body reference image, still full-body at 2.5 seconds, then pushed in to chest-up at 9 seconds. Bottom row: reference image cropped to half-body, still half-body at 9 seconds
Top row: full-body reference image, still full-body at 2.5 seconds, then pushed in to chest-up at 9 seconds. Bottom row: reference image cropped to half-body, still half-body at 9 seconds

Second, leave out anything unnecessary. The model may draw anything you mention:

  • Writing ‘leave space in the bottom-right corner for a credit in post’ added a string of fake calligraphy there
  • Mentioning another person's clothing in a solo shot brought that person into frame, even though I explicitly said they were off-screen
  • Describing everyone's positions in a sentence shared by all shots made close-ups start as wide shots (the image in step 3)
  • Describing a tense jaw made the mouth more likely to move

Don't put text meant for post-production in the description; describe that area as a clean wall. Limit shared sentences to lighting and clothing, and describe only that one person in solo shots.

The model drew the text in the bottom-right corner on its own
The model drew the text in the bottom-right corner on its own
A shot meant to show Athena alone also includes Poseidon
A shot meant to show Athena alone also includes Poseidon

Third, specify anything that must stay consistent. When I wrote only ‘wearing a hood,’ its color varied from shot to shot. Changing it to ‘a dark-brown hood, face hidden in shadow’ made later shots consistently dark brown. I did not regenerate the earlier shots because the DJ was tiny in the frame.

Top row: before the change, S03 has a light-brown hood; bottom row: after the change, all four shots have dark-brown hoods
Top row: before the change, S03 has a light-brown hood; bottom row: after the change, all four shots have dark-brown hoods

6. Check each shot and turn recurring problems into automated checks

Write a checklist before watching: continuity, left-right direction, clipping or floating, speed of time, and mouths. Regenerate any shot that fails. When the same problem appears a second time, turn it into an automated check and test it first on a known bad sample.

Record what is visible on screen and when it happens. For the ending of ‘Koxinga's Exit,’ I recorded the issue as ‘still talking after the vocals stop,’ so the audio track got fixed, but the visual problem did not. Changing the report to ‘the person's mouth is still moving on screen’ got the right fix.

Before the fix (reconstructed from the old edit; turn on the sound): the mouth keeps moving after the singing ends, then the video cuts straight to a rear view
After the fix (turn on the sound): the mouth closes when the singing ends, and the whole body turns away

I later added this to the ‘Whose City’ checklist and caught the same problem while reviewing footage.

7. Lock the video, then upscale

H3 outputs only 1056×608. Each upscale takes a long time, so I wait until every shot is locked. Any shot regenerated afterward has to be upscaled again.

Left: the native image simply enlarged; right: upscaled with SeedVR2, making the gold chain and embroidered geometric pattern clearer
Left: the native image simply enlarged; right: upscaled with SeedVR2, making the gold chain and embroidered geometric pattern clearer

Upscaling can fail too. Shots with a push-in exhausted the GPU memory, so I had to split them into shorter sections and upscale again. The ‘skip already upscaled shots’ check compared only duration, so it missed shots that had been regenerated. After upscaling, check frame counts, cut points, and frozen frames. 4K takes about 10 times as long as 1080p, so I stopped at 1080p for both videos.

Common problems

Common problems

Why does the start of every shot look like a freeze frame?

In reference-image mode, the first frame is almost identical to the reference image. Generate extra footage and trim the beginning.

The first image is the reference; the next four are generated frames at 0, 0.8, 1.6, and 2.4 seconds. The frame at 0 seconds is almost identical to the reference
The first image is the reference; the next four are generated frames at 0, 0.8, 1.6, and 2.4 seconds. The frame at 0 seconds is almost identical to the reference

Do two shots look like a replay?

The same description and seed produce nearly identical images. Give each shot its own seed.

The top and bottom rows are two different shots: at the same point in time, the poses, hands, and lighting are almost identical; only the audience behind them differs
The top and bottom rows are two different shots: at the same point in time, the poses, hands, and lighting are almost identical; only the audience behind them differs

Still wrong after several regenerations?

If the same problem persists after two regenerations, stop changing seeds. Redesign the shot or use footage from another one. For one shot, I changed the wording and seed and removed the audio, but the character was still talking through four generations. In the end, I used a different unused clip.

Four generations of the same shot, zoomed in on the mouth: it opens and closes every time

Do two joined shots look like the image jolts?

That's a jump cut: the compositions are almost identical, and the person has moved only a few pixels. If the storyboard calls for a low angle but the model generates an eye-level shot, it can clash with the previous shot. A slow push-in on the previous shot in post made the cut a change in framing.

The next shot was specified as a low angle but generated at eye level, with almost the same composition as the previous shot
The next shot was specified as a low angle but generated at eye level, with almost the same composition as the previous shot
Left: a direct cut looks like a jolt; right: the cut after a slow push-in on the previous shot

Does turning around look odd, as if it suddenly jumps to a rear view?

In the generated turn, only the head turned, not the body. The edit skipped that part, making a hard cut from the front to the back. I changed it to continue generation from the last frame of the previous shot, so the body and feet turned too.

The turn generated as a continuation, sampled one frame at regular intervals
The turn generated as a continuation, sampled one frame at regular intervals

Are all the shots too long and the pacing too slow?

The first ‘Whose City’ storyboard used video duration as the budget, which favored long shots: most lasted 6–7 seconds, versus 2–3 seconds in the reference video. I changed the budget to GPU time and compared the pacing against the reference.

Does the automated check flag a correct title card as wrong?

A fixed threshold worked on a flat gray wall but gave false positives against smoke and firelight. I changed the check to compare it with the same frame without the title card.

Can lip movements match the song?

Not as of October 2026. I measured it twice: the relationship between mouth opening and vocal volume was indistinguishable from a control with the timing deliberately offset. For now, I can only work around it in shot design, as in step 4.

Take this with you

Copy this for your AI Agent

Paste the following into your AI so it can compare the article against your song, character images, storyboard, and clips.

First, read this article: https://blog.joneshong.com/en/blog/ai-story-mv It breaks making a story-driven MV with AI into seven steps: 1. Choose a topic and measure pacing with a reference video 2. Revise the characters and song together (visual references → character sheets → master image) 3. Test generations to learn what the model can do 4. Storyboard: shot size, camera movement, what to convey, and who is singing 5. Generate from the storyboard (an extra 2.5 seconds and a separate seed for each shot) 6. Check every shot and turn recurring problems into automated checks 7. Upscale after the edit is locked, then check again Three prompt rules: state what you want clearly, leave out anything unnecessary, and specify anything that must stay consistent Please help me: 1. Look at what I have (song, character images, storyboard, generated clips), tell me which step I am at and what I need next 2. Using the article's review checklist (continuity, left-right direction, clipping or floating, speed of time, mouths), list the three places in my storyboard or clips most likely to go wrong 3. For any problem I have regenerated more than twice, write an automated check and first test it on a deliberately bad sample 4. Apply the three prompt rules to my descriptions: what is unclear, what is unnecessary, and which consistent element has not been specified clearly? These methods have only been tested on MiniMax H3, Suno, and SeedVR2. Flag where the models you use behave differently. If I am making a single-shot short video, or my model has no reference-image mode, tell me directly which steps do not apply.
References

Further reading

ResourceWhy it matters
‘AI Video Production: How the Footage Moves and How Much It Costs’Six ways to make AI videos and their costs. This article picks up where that one left off, with controlling multiple shots.
‘曹操 VS 刘备 Freestyle 说唱 Battle’(Boundary into culture, @jieruwenhua)I used it to measure the structure and shot types for ‘Whose City,’ but did not use its images or lyrics.
✦ Copy Prompt