ai-music-video
Generate AI music videos end-to-end.
AI Music Video Generator
Create complete music videos: AI music + AI visuals + ffmpeg assembly.
Quick Start
"90๋
๋ ๋ณด์ด๋ฐด๋ ํ ํ๊ตญ์ด ๋
ธ๋ ๋ง๋ค์ด์ค" โ music only
"๋ฐ๋ผ๋ ๋ฎค๋น ๋ง๋ค์ด์ค" โ music + slideshow MV
"EDM ๋ฎค๋น ํ์์์ผ๋ก" โ music + video clips MV
"Suno ๋ฎค๋น๋ก ๋ง๋ค์ด์ค" โ Suno native music video
Workflow
1. Plan scenes from lyrics/mood
Before generating, create prompts.json โ array of scene descriptions derived from the song's lyrics, mood, and narrative. 8-12 scenes for a 3-min song.
[
{"prompt": "Neon-lit city street at night, rain reflections", "type": "image"},
{"prompt": "Camera slowly panning across a rooftop at sunset", "type": "video"},
"A lone figure walking through cherry blossoms"
]
2. Generate music
bash scripts/suno_music.sh \
--prompt "๊ฐ์ฌ ๋๋ ์ค๋ช
" \
--style "90s boy band pop, korean" \
--title "๋๋ง์ ์ํด" \
--model V4_5ALL --custom \
--outdir /tmp/mv_project
Options:
--model V4_5ALL(default),V5,V4_5PLUS,V4_5,V4--instrumentalโ no vocals--vocal-gender m|fโ vocal gender hint--negative-tags "Heavy Metal, Drums"โ styles to avoid--music-videoโ generate Suno native music video (MP4)--dry-runโ cost check only
Persona (์ผ๊ด๋ ์คํ์ผ ์ ์ง):
--persona-id IDโ ๊ธฐ์กด ํ๋ฅด์๋ ์ฌ์ฉ (๊ฐ์ ๋ณด์ปฌ/์คํ์ผ๋ก ์ฌ๋ฌ ๊ณก ์์ฑ)--create-personaโ ์์ฑ๋ ๊ณก์์ ํ๋ฅด์๋ ์์ฑ โpersona.json์ ์ฅ--persona-name "์ด๋ฆ"/--persona-desc "์ค๋ช "/--persona-style "์คํ์ผ"
Auto features:
- ๐ค Timestamped Lyrics: Non-instrumental tracks automatically fetch lyrics timestamps and save as
{outdir}/lyrics.srt - ๐ฌ Suno Native MV: With
--music-video, Suno generates a visualized MP4 video directly - ๐ญ Persona: With
--create-persona, extracts voice/style identity for reuse
3. Generate visuals (custom MV flow)
bash scripts/gen_visuals.sh \
--mode slideshow \
--prompts-file /tmp/mv_project/prompts.json \
--image-provider seedream \
--outdir /tmp/mv_project
Or with OpenAI (cheaper, lower res):
bash scripts/gen_visuals.sh \
--mode slideshow \
--prompts-file /tmp/mv_project/prompts.json \
--image-provider openai --image-model gpt-image-1-mini --image-quality medium \
--outdir /tmp/mv_project
Add --dry-run first to show cost estimate before spending.
4. Assemble
bash scripts/assemble_mv.sh \
--audio /tmp/mv_project/track_0_xxx.mp3 \
--outdir /tmp/mv_project \
--output /tmp/mv_project/final_mv.mp4 \
--transition fade
Subtitle behavior:
- Auto-detects
{outdir}/lyrics.srtand overlays lyrics automatically --subtitle /path/to/custom.srtโ use custom SRT file--no-subtitleโ disable lyrics overlay entirely
Modes
| Mode | Visual | Best For | Cost (10 scenes) |
|---|---|---|---|
slideshow | AI images | Fast, cheap | ~$0.02 (mini low) / ~$0.09 (mini med) / ~$0.45 (Seedream) |
video | AI video clips | Premium | ~$1.40 (Seedance Lite) / ~$8.00 (Sora 2) |
hybrid | Mix of both | Balanced | ~$0.50-$4.00 |
suno-native | Suno MV | Easiest | Suno credits only |
Image cost is token-based โ actual billing may be lower than listed estimates. Use --dry-run for precise cost.
Provider Options
Images: --image-provider seedream (recommended), openai, or google-together
Image Model (OpenAI): --image-model gpt-image-1-mini (default, cheap) or gpt-image-1 (premium)
Videos: --video-provider sora (default), sora-pro, seedance-lite, seedance-pro, veo-fast, veo-audio
Quality: --image-quality low|medium|high
Cost Tracking
Every script outputs cost before and after. Always --dry-run first.
Cost data saved to {outdir}/cost_estimate.json and {outdir}/visuals_meta.json.
Environment Variables
export SUNO_API_KEY="your-sunoapi-key" # Required โ sunoapi.org
export OPENAI_API_KEY="your-openai-key" # Required โ images + Sora video
export BYTEPLUS_API_KEY="your-byteplus-key" # Optional โ Seedream 4.5 (recommended for images)
export TOGETHER_API_KEY="your-together-key" # Optional โ Seedance, Veo, Imagen
export SUNO_CALLBACK_URL="" # Optional โ see Callback URL below
โ ๏ธ Required keys: SUNO_API_KEY and OPENAI_API_KEY must be set before running any script.
BYTEPLUS_API_KEY is needed for Seedream image provider (sign up at console.byteplus.com, 200 free images).
TOGETHER_API_KEY is only needed for Seedance/Veo/Imagen providers.
Callback URL
The Suno API requires a callBackUrl field for music generation requests.
By default, if SUNO_CALLBACK_URL is not set, the script uses https://localhost/noop
as a harmless no-op endpoint (an unreachable localhost URL that effectively disables callbacks).
To customize: set SUNO_CALLBACK_URL to your own endpoint, or set it to
any dummy URL you control. The callback payload contains task metadata and
audio URLs โ no API keys are sent.
To disable: set SUNO_CALLBACK_URL=https://localhost/noop or any unreachable URL.
Generation still works via polling; the callback is not required for the script to function.
Persona Workflow (์ฑ๋ ์ปจ์ ์ ์ง)
YouTube ์ฑ๋์ฒ๋ผ ์ผ๊ด๋ ์คํ์ผ๋ก ์ฌ๋ฌ ๊ณก์ ๋ง๋ค ๋:
# 1. ์ฒซ ๊ณก ์์ฑ + ํ๋ฅด์๋ ๋ง๋ค๊ธฐ
bash scripts/suno_music.sh \
--prompt "์ฝ๋ ๋ฆฌ๋ทฐํ๋ฉฐ ๋ฃ๋ ๋
ธ๋" \
--style "indie rock, energetic, coding vibe" \
--title "Pull Request" \
--custom --create-persona \
--persona-name "๊ฐ๋ฐ์ ๋
ธ๋์ ์ฑ์ด" \
--persona-desc "๊ฐ๋ฐ์๊ฐ ์ฝ๋ฉํ๋ฉฐ ๋ฃ๊ธฐ ์ข์ ์๋์ง ๋์น๋ ๋ณด์ปฌ. ์ธ๋๋ก, ์ผ๋ , ํ ์ฅ๋ฅด๋ฅผ ๋๋๋ ๋ค." \
--persona-style "indie rock, electronic, developer work music" \
--outdir /tmp/dev-bgm-01
# 2. persona.json์์ personaId ํ์ธ
cat /tmp/dev-bgm-01/persona.json
# 3. ๊ฐ์ ํ๋ฅด์๋๋ก ๋ค์ ๊ณก ์์ฑ โ ๋ณด์ปฌ/์คํ์ผ ์ผ๊ด์ฑ ์ ์ง
bash scripts/suno_music.sh \
--prompt "์ผ๊ทผํ๋ฉด์ ๋ฃ๋ ๋
ธ๋" \
--style "electronic pop, night coding" \
--title "Midnight Deploy" \
--custom --persona-id <PERSONA_ID> \
--outdir /tmp/dev-bgm-02
ํ๋ฅด์๋๋ ๋ณด์ปฌ ํน์ฑ + ์์ ์คํ์ผ์ ๊ธฐ์ตํด์, ์ฑ๋ ์ ์ฒด์ ํต์ผ๊ฐ์ ์ ์งํด์ค.
Prerequisites
curl,python3,ffmpeg(for assembly)
References
- SunoAPI details: Read
references/sunoapi.md - Visual provider details: Read
references/visual-providers.md