Music Generator
First time? If setup_complete: false above, run ./SETUP.md first, then set setup_complete: true.
Generate custom AI music using ElevenLabs Music API with detailed composition control.
Features
- Simple Mode: Generate music from a text prompt
- Detailed Mode: Create multi-section compositions with precise control over styles, moods, and transitions
- Instrumental or Vocal: Support for both instrumental and vocal tracks
- Custom Duration: Generate tracks from 15 seconds to 5 minutes
Quick Start
cd ~/.claude/skills/music-generator/scripts
# Simple prompt-based generation
npx ts-node generate_music.ts \
--prompt "Uplifting corporate music with electronic beats" \
--duration 60 \
--output /path/to/music.mp3
# List available styles
npx ts-node generate_music.ts --list-styles
Composition Modes
1. Simple Mode (--prompt)
Generate music from a single text prompt:
npx ts-node generate_music.ts \
--prompt "Energetic workout music with driving beats and motivational synths" \
--duration 90 \
--output workout.mp3
2. Detailed Mode (--composition)
Create multi-section compositions with JSON config:
npx ts-node generate_music.ts \
--composition /path/to/composition.json \
--output epic-track.mp3
Composition JSON Format:
{
"duration_ms": 80000,
"instrumental": true,
"positive_global_styles": ["corporate", "motivational", "electronic"],
"negative_global_styles": ["sad", "aggressive", "heavy metal"],
"sections": [
{
"section_name": "Intro",
"duration_ms": 20000,
"positive_local_styles": ["building momentum", "soft start"],
"negative_local_styles": ["loud", "intense"],
"lines": []
},
{
"section_name": "Main Theme",
"duration_ms": 40000,
"positive_local_styles": ["energetic", "uplifting", "driving rhythm"],
"negative_local_styles": ["slow", "mellow"],
"lines": []
},
{
"section_name": "Outro",
"duration_ms": 20000,
"positive_local_styles": ["triumphant", "resolution"],
"negative_local_styles": ["abrupt ending"],
"lines": []
}
]
}
Style Guide
Positive Global Styles (Overall Track Feel)
Moods:
- uplifting, inspiring, motivational, peaceful, energetic
- dramatic, epic, emotional, nostalgic, mysterious
- playful, cheerful, romantic, melancholic
Genres:
- corporate, cinematic, electronic, ambient, orchestral
- pop, rock, jazz, classical, world music
- lo-fi, hip-hop, EDM, acoustic, folk
Instruments:
- piano, guitar, strings, synths, drums
- brass, woodwinds, percussion, bass
Negative Global Styles (What to Avoid)
- aggressive, dark, scary, chaotic
- heavy metal, death metal, harsh noise
- explicit, profane
Section-Specific Styles
Use positive_local_styles and negative_local_styles to control individual sections:
Intro Styles:
- soft opening, building momentum, atmospheric
- gentle start, mysterious intro
Peak/Chorus Styles:
- energetic peak, driving rhythm, powerful
- emotional climax, triumphant
Outro Styles:
- gentle fade, triumphant ending, resolution
- nostalgic close, hopeful conclusion
Command Options
| Option |
Short |
Description |
--prompt |
-p |
Text prompt for simple mode |
--composition |
-c |
JSON file for detailed mode |
--duration |
-d |
Duration in seconds (simple mode) |
--output |
-o |
Output file path (required) |
--instrumental |
-i |
Generate instrumental track |
--format |
-f |
Output format (mp3_44100_192, mp3_44100_128) |
--list-styles |
|
Show available styles |
--help |
-h |
Show help |
Examples
Corporate Background Music
npx ts-node generate_music.ts \
-p "Professional corporate background music, uplifting and modern, suitable for presentations" \
-d 120 \
-i \
-o corporate-bg.mp3
Podcast Intro
npx ts-node generate_music.ts \
-p "Catchy podcast intro music, energetic and memorable, with electronic elements" \
-d 15 \
-o podcast-intro.mp3
Video Game Theme
npx ts-node generate_music.ts \
-p "Epic fantasy adventure theme with orchestral instruments and heroic melodies" \
-d 180 \
-i \
-o game-theme.mp3
Multi-Section Composition
Create a file my-composition.json:
{
"duration_ms": 120000,
"instrumental": true,
"positive_global_styles": ["cinematic", "epic", "orchestral"],
"negative_global_styles": ["electronic", "modern"],
"sections": [
{
"section_name": "Dawn",
"duration_ms": 30000,
"positive_local_styles": ["soft", "mysterious", "building anticipation"],
"negative_local_styles": ["loud", "fast"],
"lines": []
},
{
"section_name": "Battle",
"duration_ms": 50000,
"positive_local_styles": ["intense", "driving", "heroic"],
"negative_local_styles": ["peaceful", "slow"],
"lines": []
},
{
"section_name": "Victory",
"duration_ms": 40000,
"positive_local_styles": ["triumphant", "emotional", "uplifting"],
"negative_local_styles": ["sad", "mellow"],
"lines": []
}
]
}
Then generate:
npx ts-node generate_music.ts \
-c my-composition.json \
-o epic-journey.mp3
API Limits
- Maximum duration: 330 seconds (5.5 minutes)
- Minimum duration: 15 seconds
- Generation time: ~30-60 seconds per track
- Cost: ~$0.05-0.15 per generation (varies by duration)
Troubleshooting
"Invalid API key": Check .env file has valid ELEVENLABS_API_KEY
"Duration too long": Maximum is 330 seconds (5.5 minutes)
"Validation error": Ensure composition JSON has all required fields:
positive_global_styles (array)
negative_global_styles (array)
sections with section_name, duration_ms, positive_local_styles, negative_local_styles, lines
1---
2name: music-generator
3description: "Generate AI music with ElevenLabs Music API. Use for: background music, soundtracks, jingles, theme songs, instrumental tracks, AI music composition."
4setup_complete: false
5setup: "./SETUP.md"
6---
7
8# Music Generator
9
10> **First time?** If `setup_complete: false` above, run `./SETUP.md` first, then set `setup_complete: true`.
11
12Generate custom AI music using ElevenLabs Music API with detailed composition control.
13
14## Features
15
16- **Simple Mode**: Generate music from a text prompt
17- **Detailed Mode**: Create multi-section compositions with precise control over styles, moods, and transitions
18- **Instrumental or Vocal**: Support for both instrumental and vocal tracks
19- **Custom Duration**: Generate tracks from 15 seconds to 5 minutes
20
21## Quick Start
22
23```bash
24cd ~/.claude/skills/music-generator/scripts
25
26# Simple prompt-based generation
27npx ts-node generate_music.ts \
28 --prompt "Uplifting corporate music with electronic beats" \
29 --duration 60 \
30 --output /path/to/music.mp3
31
32# List available styles
33npx ts-node generate_music.ts --list-styles
34```
35
36## Composition Modes
37
38### 1. Simple Mode (--prompt)
39
40Generate music from a single text prompt:
41
42```bash
43npx ts-node generate_music.ts \
44 --prompt "Energetic workout music with driving beats and motivational synths" \
45 --duration 90 \
46 --output workout.mp3
47```
48
49### 2. Detailed Mode (--composition)
50
51Create multi-section compositions with JSON config:
52
53```bash
54npx ts-node generate_music.ts \
55 --composition /path/to/composition.json \
56 --output epic-track.mp3
57```
58
59**Composition JSON Format:**
60
61```json
62{
63 "duration_ms": 80000,
64 "instrumental": true,
65 "positive_global_styles": ["corporate", "motivational", "electronic"],
66 "negative_global_styles": ["sad", "aggressive", "heavy metal"],
67 "sections": [
68 {
69 "section_name": "Intro",
70 "duration_ms": 20000,
71 "positive_local_styles": ["building momentum", "soft start"],
72 "negative_local_styles": ["loud", "intense"],
73 "lines": []
74 },
75 {
76 "section_name": "Main Theme",
77 "duration_ms": 40000,
78 "positive_local_styles": ["energetic", "uplifting", "driving rhythm"],
79 "negative_local_styles": ["slow", "mellow"],
80 "lines": []
81 },
82 {
83 "section_name": "Outro",
84 "duration_ms": 20000,
85 "positive_local_styles": ["triumphant", "resolution"],
86 "negative_local_styles": ["abrupt ending"],
87 "lines": []
88 }
89 ]
90}
91```
92
93## Style Guide
94
95### Positive Global Styles (Overall Track Feel)
96
97**Moods:**
98- uplifting, inspiring, motivational, peaceful, energetic
99- dramatic, epic, emotional, nostalgic, mysterious
100- playful, cheerful, romantic, melancholic
101
102**Genres:**
103- corporate, cinematic, electronic, ambient, orchestral
104- pop, rock, jazz, classical, world music
105- lo-fi, hip-hop, EDM, acoustic, folk
106
107**Instruments:**
108- piano, guitar, strings, synths, drums
109- brass, woodwinds, percussion, bass
110
111### Negative Global Styles (What to Avoid)
112
113- aggressive, dark, scary, chaotic
114- heavy metal, death metal, harsh noise
115- explicit, profane
116
117### Section-Specific Styles
118
119Use `positive_local_styles` and `negative_local_styles` to control individual sections:
120
121**Intro Styles:**
122- soft opening, building momentum, atmospheric
123- gentle start, mysterious intro
124
125**Peak/Chorus Styles:**
126- energetic peak, driving rhythm, powerful
127- emotional climax, triumphant
128
129**Outro Styles:**
130- gentle fade, triumphant ending, resolution
131- nostalgic close, hopeful conclusion
132
133## Command Options
134
135| Option | Short | Description |
136|--------|-------|-------------|
137| `--prompt` | `-p` | Text prompt for simple mode |
138| `--composition` | `-c` | JSON file for detailed mode |
139| `--duration` | `-d` | Duration in seconds (simple mode) |
140| `--output` | `-o` | Output file path (required) |
141| `--instrumental` | `-i` | Generate instrumental track |
142| `--format` | `-f` | Output format (mp3_44100_192, mp3_44100_128) |
143| `--list-styles` | | Show available styles |
144| `--help` | `-h` | Show help |
145
146## Examples
147
148### Corporate Background Music
149
150```bash
151npx ts-node generate_music.ts \
152 -p "Professional corporate background music, uplifting and modern, suitable for presentations" \
153 -d 120 \
154 -i \
155 -o corporate-bg.mp3
156```
157
158### Podcast Intro
159
160```bash
161npx ts-node generate_music.ts \
162 -p "Catchy podcast intro music, energetic and memorable, with electronic elements" \
163 -d 15 \
164 -o podcast-intro.mp3
165```
166
167### Video Game Theme
168
169```bash
170npx ts-node generate_music.ts \
171 -p "Epic fantasy adventure theme with orchestral instruments and heroic melodies" \
172 -d 180 \
173 -i \
174 -o game-theme.mp3
175```
176
177### Multi-Section Composition
178
179Create a file `my-composition.json`:
180
181```json
182{
183 "duration_ms": 120000,
184 "instrumental": true,
185 "positive_global_styles": ["cinematic", "epic", "orchestral"],
186 "negative_global_styles": ["electronic", "modern"],
187 "sections": [
188 {
189 "section_name": "Dawn",
190 "duration_ms": 30000,
191 "positive_local_styles": ["soft", "mysterious", "building anticipation"],
192 "negative_local_styles": ["loud", "fast"],
193 "lines": []
194 },
195 {
196 "section_name": "Battle",
197 "duration_ms": 50000,
198 "positive_local_styles": ["intense", "driving", "heroic"],
199 "negative_local_styles": ["peaceful", "slow"],
200 "lines": []
201 },
202 {
203 "section_name": "Victory",
204 "duration_ms": 40000,
205 "positive_local_styles": ["triumphant", "emotional", "uplifting"],
206 "negative_local_styles": ["sad", "mellow"],
207 "lines": []
208 }
209 ]
210}
211```
212
213Then generate:
214
215```bash
216npx ts-node generate_music.ts \
217 -c my-composition.json \
218 -o epic-journey.mp3
219```
220
221## API Limits
222
223- Maximum duration: 330 seconds (5.5 minutes)
224- Minimum duration: 15 seconds
225- Generation time: ~30-60 seconds per track
226- Cost: ~$0.05-0.15 per generation (varies by duration)
227
228## Troubleshooting
229
230**"Invalid API key"**: Check `.env` file has valid `ELEVENLABS_API_KEY`
231
232**"Duration too long"**: Maximum is 330 seconds (5.5 minutes)
233
234**"Validation error"**: Ensure composition JSON has all required fields:
235- `positive_global_styles` (array)
236- `negative_global_styles` (array)
237- `sections` with `section_name`, `duration_ms`, `positive_local_styles`, `negative_local_styles`, `lines`