skywork-music-maker — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited skywork-music-maker (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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 heardCritical 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, melodiesRun 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_songUpload 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 ./songUpload 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 ./songWhen 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 --helpMUREKA_API_KEY environment variable (required)https://api.mureka.airequests librarycurl -H "Authorization: Bearer $MUREKA_API_KEY" https://api.mureka.ai/v1/account/billing~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.