skyworkai/skywork-music-maker
Create professional music with Mureka AI API — songs, instrumentals, and lyrics from natural language descriptions in any language. Use when users want to generate a song, create a beat or instrumental, write lyrics, clone vocals, upload reference tracks, or do anything related to AI music creation, even casual requests like "make me a chill lo-fi beat".
npx skills add https://github.com/SkyworkAI/Skywork-Skills --skill skywork-music-maker
Generate professional-quality music using the Mureka API at https://api.mureka.ai. This skill covers the complete music production workflow: lyrics writing → song/instrumental generation.
Before running any API command, check if MUREKA_API_KEY is set. If not, guide the user to get an API key at https://platform.mureka.ai/ (register → API Keys → generate key → export MUREKA_API_KEY="..."), then STOP — do not attempt any API calls until the key is configured.
Default behavior: When the user doesn't specify song type, always generate a song with lyrics (use mureka.py song). Only use mureka.py instrumental when the user explicitly asks for instrumental, BGM, background music, or "no vocals".
Output defaults: Use mp3 format unless the user requests otherwise. The --output flag specifies a directory — the script creates it and saves all results inside (audio files + lyrics.txt for songs). If the user doesn't specify a location, choose a user-friendly path with a descriptive folder name based on the song theme (e.g., summer_pop_song/).
When users provide music descriptions in natural language (in any language), you MUST convert them to structured Mureka API prompts using this workflow:
User Input Examples:
Your Task:
When users provide natural language music descriptions, directly extract and structure the following parameters:
Required Parameters:
Extraction Instructions:
Generate Structured Prompt:
Combine all extracted parameters into a comprehensive, natural-flowing description that captures the essence of the user's vision.
Before running the generation command, verify the prompt meets these criteria:
MUST HAVE:
WATCH OUT FOR:
AVOID:
After validation, present the generated prompt to the user for confirmation before proceeding.
1. Conceptualize → User describes in natural language → YOU convert to structured prompt
2. Validate → Check prompt quality against Quality Checklist (see above)
3. Write Lyrics → Use lyrics/generate or write manually
4. Upload References → Optional: reference track, vocal sample, melody
5. Generate → Submit song/instrumental task (async) with validated prompt
6. Evaluate → Listen to all N choices, pick best
7. Iterate → Refine prompt based on what you heard
Critical Steps:
references/prompt_guide.md for prompt crafting examples, lyrics structure rules (line length, syllable count, rhyme patterns, hook writing), and iteration best practicesYour Role as AI Assistant:
All operations go through a single script: scripts/mureka.py
mureka.py song Generate a song with lyrics and vocals
mureka.py instrumental Generate an instrumental track
mureka.py lyrics Generate or extend lyrics
mureka.py upload Upload reference audio, vocals, melodies
Run python scripts/mureka.py --help for full usage. Note: use -n 2 (single dash) to generate multiple choices, not --n.
python scripts/mureka.py instrumental \
--prompt "ambient electronic, calm, 80 BPM, soft pads, no percussion, background music for tech product video" \
--output ./bg_music
# Step 1: Generate lyrics with proper structure
python scripts/mureka.py lyrics generate "a nostalgic summer love song, bittersweet, looking back at memories"
# Step 2: Copy/refine the output, then generate the song
python scripts/mureka.py song \
--lyrics "[Verse]\n(paste lyrics here)\n[Chorus]\n(paste chorus here)" \
--prompt "indie pop, warm, 110 BPM, acoustic guitar, soft drums, male vocal" \
--output ./summer_song
Upload a reference track (must be exactly 30s, mp3/m4a) to guide the style:
python scripts/mureka.py upload my_reference.mp3 --purpose reference
# → File ID: 542321
python scripts/mureka.py song --lyrics "[Verse]\n..." --reference-id 542321 --output ./song
Upload a vocal sample (15-30s, mp3/m4a) to use a specific voice:
python scripts/mureka.py upload my_voice.mp3 --purpose vocal
# → File ID: 789012
python scripts/mureka.py song --lyrics "[Verse]\n..." --vocal-id 789012 --prompt "R&B, smooth, 90 BPM" --output ./song
When generating songs, these control options work together:
| Combo | prompt | reference_id | vocal_id | melody_id |
|-------|--------|-------------|----------|-----------|
| Style only | ✅ | | | |
| Reference only | | ✅ | | |
| Voice only | | | ✅ | |
| Melody only | | | | ✅ |
| Style + Voice | ✅ | | ✅ | |
| Reference + Voice | | ✅ | ✅ | |
Important:
For instrumentals, prompt and instrumental_id are mutually exclusive — use one or the other.
| Purpose | Format | Duration | Notes |
|---------|--------|----------|-------|
| reference | mp3/m4a | exactly 30s | Excess trimmed |
| vocal | mp3/m4a | 15-30s | Excess trimmed |
| melody | mp3/m4a/mid | 5-60s | MIDI recommended |
| instrumental | mp3/m4a | exactly 30s | For instrumental reference |
Always use mureka-8 — it is the latest and highest quality model.
Scripts raise RuntimeError or requests.HTTPError on failure. Handle common errors:
| Error | Cause | Action |
|-------|-------|--------|
| 401 Unauthorized | Invalid or expired API key | Ask user to verify MUREKA_API_KEY |
| 429 Too Many Requests | Rate limit exceeded | Wait 30-60 seconds, then retry |
| 402 / Insufficient balance | Account balance depleted | Direct user to https://platform.mureka.ai to top up |
| Task ended with status: failed | Generation failed (bad prompt, server error) | Check prompt against Quality Checklist, retry |
| Task ended with status: timeouted | Generation took too long | Retry; if persistent, simplify the prompt or try a different model |
| ConnectionError / Timeout | Network issue | Retry after a few seconds |
General strategy: Read the error message carefully. If it's a client error (4xx), fix the input. If it's a server error (5xx) or timeout, retry once before escalating to the user.
| Problem | Solution |
|---------|----------|
| Task failed or timeouted | • Check prompt meets quality checklist<br>• Verify lyrics have structure tags<br>• Retry the generation |
| Vocals sound rushed | • Shorten lyric lines (≤10 words)<br>• Reduce syllables per line |
| Listed instruments not audible | • Verify each instrument named explicitly in prompt<br>• Add more specific descriptors (e.g., "acoustic guitar strumming") |
| Prompt doesn't match output | • Increase specificity (exact genre, BPM, instruments)<br>• Add mood progression ("sparse → full")<br>• Generate n=3 choices |
| melody_id error | • melody_id MUST be used alone<br>• Remove --prompt, --reference-id, --vocal-id |
| Invalid file_id | • File IDs only valid for account that uploaded<br>• Re-upload file if from another session |
For parameter help:
python scripts/mureka.py --help
python scripts/mureka.py song --help
MUREKA_API_KEY environment variable (required)https://api.mureka.airequests librarycurl -H "Authorization: Bearer $MUREKA_API_KEY" https://api.mureka.ai/v1/account/billingTake skyworkai/skywork-music-maker from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.