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