| name | claude-music-generate |
| description | Generates music from text descriptions and lyrics using ACE-Step 1.5's Python API. Creates full songs with vocals, instrumentals, or both. Supports 50+ languages, 10-600 second duration, quality presets (draft/standard/high/max), and batch generation.
|
| when_to_use | Use when the user asks to generate music, make a song, create a track, do text-to-music, or produce new music from scratch.
|
| allowed-tools | ["Bash","Read","Write"] |
claude-music-generate — Text-to-Music Generation
Worked example (input → command → output)
User: "Generate a 30-second upbeat pop instrumental I can loop"
Command:
bash ~/.claude/skills/claude-music/scripts/music_engine.sh \
--quality standard \
generate \
--caption "upbeat pop, catchy, synth hooks, female vocal" \
--instrumental --duration 30 --language en
Expected JSON on stdout:
{
"success": true,
"task_type": "text2music",
"model": "acestep-v15-turbo",
"outputs": [
{"path": "/home/$USER/Music/claude-music-output/text2music_20260416_120512_01.flac",
"seed": 137294, "size_mb": 1.83, "index": 1},
{"path": "/home/$USER/Music/claude-music-output/text2music_20260416_120512_02.flac",
"seed": 837412, "size_mb": 1.80, "index": 2}
],
"timing": {"generation_sec": 18.3},
"count": 2,
"playback_hint": "ffplay -nodisp -autoexit \"/home/$USER/Music/claude-music-output/text2music_20260416_120512_01.flac\""
}
Global flags (--quality, --format, --seed, etc.) go BEFORE the subcommand (generate). Subcommand flags (--caption, --duration, etc.) go AFTER.
Pre-Flight
- Run
bash ~/.claude/skills/claude-music/scripts/preflight.sh "" "$OUTPUT" if output specified
- Run
bash ~/.claude/skills/claude-music/scripts/detect_gpu.sh to determine quality tier
Basic Generation
bash ~/.claude/skills/claude-music/scripts/music_engine.sh generate \
--caption "upbeat electronic dance music, energetic synths, driving beat" \
--instrumental --duration 60
bash ~/.claude/skills/claude-music/scripts/music_engine.sh generate \
--caption "pop ballad, female vocal, piano, emotional" \
--lyrics "[Verse 1]
Under city lights we found our way
Every word you said still haunts my day
[Chorus]
Hold me close don't let me fall
You're the only one who hears my call" \
--duration 120 --language en
bash ~/.claude/skills/claude-music/scripts/music_engine.sh generate \
--caption "jazz fusion, saxophone, complex harmony" \
--quality high --duration 180 --bpm 110 --key "Bb major"
bash ~/.claude/skills/claude-music/scripts/music_engine.sh generate \
--caption "lo-fi hip-hop, chill, atmospheric, vinyl crackle" \
--quality draft --instrumental --duration 60
Parameters
| Parameter | Flag | Default | Range | Description |
|---|
| Caption | --caption / -c | required | <512 chars | Style/genre/instrument description |
| Lyrics | --lyrics / -l | "" | <4096 chars | Song lyrics with structure tags |
| Instrumental | --instrumental | false | flag | No vocals |
| Language | --language | en | ISO 639-1 | Vocal language (en, zh, ja, es, fr, etc.) |
| Duration | --duration | 60 | 10-600 sec | Target length |
| BPM | --bpm | auto | 30-300 | Tempo (auto = model decides) |
| Key | --key | auto | e.g. "C major" | Musical key |
| Time Sig | --time-sig | auto | 2/3/4/6 | Time signature |
| Quality | --quality | standard | draft/standard/high/max | Preset |
| Batch | --batch | 2 | 1-8 | Number of variants |
| Format | --format | flac | flac/wav/mp3/opus/aac | Output format |
| Seed | --seed | -1 | int | Reproducibility (-1 = random) |
| Model | --model | auto | turbo/base/sft/xl-* | Override DiT model |
Quality Presets
- draft: turbo, steps=8, no LM, batch=4. Fastest. Use for exploring ideas.
- standard: turbo, steps=8, no LM, batch=2. Default. Good balance.
- high: turbo + 1.7B LM, thinking=True, batch=2. Better structure/lyrics adherence.
- max: base model, steps=65, LM thinking, batch=1. Best quality, ~3-5 min.
Output
JSON to stdout with paths, seeds, timing:
{
"success": true,
"task_type": "text2music",
"outputs": [{"path": "/home/.../generate_20260416_120000_01.flac", "seed": 42}],
"playback_hint": "ffplay -nodisp -autoexit \"/path/to/file.flac\""
}
Workflow Tips
- Start with draft quality — generate 4 variants, pick the best direction
- Lock the seed — once you find a good variant, use
--seed <value> to reproduce it
- Iterate on caption — add/remove descriptors to steer the sound
- Use compose first — for vocal songs, use
/music compose to craft proper lyrics before generating
- Repaint bad sections — don't regenerate the whole song; use
/music repaint to fix specific parts
Caption Crafting Quick Guide
Formula: Genre + mood + instruments + vocal style + production quality
Good: "upbeat pop, female vocal, catchy, piano, modern production, 2020s sound"
Bad: "a good song" (too vague)
Bad: "ambient metal classical hip-hop" (conflicting genres)
For detailed guidance: load references/prompt-guide.md
Lyrics Quick Guide
- Use structure tags:
[Verse], [Chorus], [Bridge], [Intro], [Outro]
- Keep lines 4-8 words for best vocal clarity
- ~2-3 words per second (60s song ~ 120-180 words)
- Avoid tongue twisters and complex vocabulary
For detailed guidance: load references/prompt-guide.md