Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Moves audio files to the correct album location with proper path structure. Use when the user has downloaded WAV files from Suno or other sources that need to be organized.
.claude/skills/bitwize-music-studio-import-audio/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-16 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 57% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 95% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 19% | 0% |
Input: $ARGUMENTS
Import an audio file (WAV, MP3, etc.) to the correct album location based on config.
You move audio files to the correct location in the user's audio directory.
Expected format: <file-path> <album-name> [track-slug]
The track-slug is optional — only needed for stems zip imports when the track can't be inferred from the filename.
Examples:
~/Downloads/track.wav sample-album~/Downloads/03-t-day-beach.wav sample-album~/Downloads/stems.zip sample-album 01-first-tasteIf arguments are missing, ask:
Usage: /import-audio <file-path> <album-name> [track-slug]
Examples:
/import-audio ~/Downloads/track.wav sample-album
/import-audio ~/Downloads/stems.zip sample-album 01-first-tasteresolve_path("audio", album_slug) — returns the full audio directory path{audio_root}/artists/{artist}/albums/{genre}/{album}/Example result: ~/bitwize-music/audio/artists/bitwize/albums/hip-hop/sample-album/
CRITICAL: Always use resolve_path — never construct paths manually.
Check the file extension and whether it's a stems zip:
| File Type | Action | |-----------|--------| | .wav, .mp3, .flac, .ogg, .m4a | Move to album audio dir (Step 4) | | .zip (stems) | Extract to per-track stems subfolder (Step 4b) |
How to identify a stems zip: The user will say "stems" or the zip contains files like 0 Lead Vocals.wav, 1 Backing Vocals.wav, etc.
bashmkdir -p {resolved_path} mv "{source_file}" "{resolved_path}/{filename}"
Stems must go into per-track subfolders to prevent filename collisions (every track has 0 Lead Vocals.wav, etc.):
{resolved_path}/
01-first-taste.wav
02-sugar-high.wav
stems/
01-first-taste/
0 Lead Vocals.wav
1 Backing Vocals.wav
2 Drums.wav
...
02-sugar-high/
0 Lead Vocals.wav
1 Backing Vocals.wav
...Workflow:
01-first-taste-stems.zip → 01-first-taste)/import-audio stems.zip sample-album 01-first-taste)bash mkdir -p {resolved_path}/stems/{track-slug} unzip "{source_file}" -d "{resolved_path}/stems/{track-slug}"
update_track_field(album_slug, track_slug, "stems", "Yes")Argument format for stems: <zip-path> <album-name> [track-slug]
Report:
Moved: {source_file}
To: {resolved_path}/{filename}For stems:
Extracted stems: {source_file}
To: {resolved_path}/stems/{track-slug}/
Files: {count} stem files extracted
Updated: {track-slug} stems → YesSource file doesn't exist:
Error: File not found: {source_file}Config file missing:
Error: Config not found at ~/.bitwize-music/config.yaml
Run /configure to set up.File already exists at destination:
Warning: File already exists at destination.
Overwrite? (The original was not moved)Suno allows downloading in both WAV and MP3 formats (WAV on Pro/Premier, web only). Always prefer WAV for mastering quality.
Downloads are metered since 2026-09-03. Free accounts get 7 lifetime trial downloads (personal use only — never releasable); Pro 20 a month; Premier 60 a month; the count resets on the billing date and does not roll over. One song is one download whatever the format, and its stems are included — download the WAV first, then pull stems later at no extra cost; re-downloading the same song is free. Premier's Suno Studio exports are uncapped and arrive as 32-bit float / 48 kHz WAV — the practical route for a full album in one month. Commercial rights attach only to a permitted download made on a paid plan.
If the user provides an MP3 file:
Note: This is an MP3 file. For best mastering results, download the WAV
version from Suno instead. MP3 compression removes audio data that can't
be recovered during mastering.
If WAV isn't available, this MP3 will work but mastering quality may be limited.Supported formats: WAV (preferred), MP3, FLAC, OGG, M4A
/import-audio ~/Downloads/03-t-day-beach.wav sample-albumConfig has:
yamlpaths: audio_root: ~/bitwize-music/audio artist: name: bitwize
Result:
Moved: ~/Downloads/03-t-day-beach.wav
To: ~/bitwize-music/audio/artists/bitwize/albums/hip-hop/sample-album/03-t-day-beach.wav/import-audio ~/Downloads/stems.zip sample-album 01-first-tasteResult:
Extracted stems: ~/Downloads/stems.zip
To: ~/bitwize-music/audio/artists/bitwize/albums/hip-hop/sample-album/stems/01-first-taste/
Files: 5 stem files extracted
Updated: 01-first-taste stems → YesWrong:
bashcat ~/.bitwize-music/config.yaml mv file.wav ~/music-projects/audio/artists/bitwize/albums/electronic/sample-album/
Right:
# Use MCP to resolve the correct path
resolve_path("audio", album_slug) → returns full path with artist folderWhy it matters: resolve_path reads config, resolves variables, and includes the artist folder automatically. No manual config parsing or path construction needed.
Path comparison:
{content_root}/artists/{artist}/albums/{genre}/{album}/ (markdown, lyrics){audio_root}/artists/{artist}/albums/{genre}/{album}/ (WAV files, stems){documents_root}/artists/{artist}/albums/{genre}/{album}/ (PDFs, research)Use resolve_path with the appropriate path_type ("content", "audio", "documents") to get the right path.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-16 | fail→pass | 8,779 | 2,380 | -73% | 1 | 1 | 0% | 1,586 | 2,118 | +34% | 0 | 0 | — |
case-01 | fail→fail | 5,620 | 8,451 | +50% | 1 | 1 | 0% | 876 | 2,026 | +131% | 0 | 0 | — |
case-02 | fail→fail | 3,288 | 6,365 | +94% | 1 | 1 | 0% | 401 | 2,082 | +419% | 0 | 0 | — |
case-03 | fail→fail | 6,376 | 6,142 | -4% | 1 | 1 | 0% | 352 | 2,111 | +500% | 0 | 0 | — |
case-04 | fail→pass | 8,503 | 1,842 | -78% | 1 | 1 | 0% | 1,435 | 2,030 | +41% | 0 | 0 | — |
case-05 | pass→pass | 5,665 | 2,205 | -61% | 1 | 1 | 0% | 907 | 2,072 | +128% | 0 | 0 | — |
case-06 | fail→fail | 6,990 | 6,695 | -4% | 1 | 1 | 0% | 1,160 | 2,097 | +81% | 0 | 0 | — |
case-07 | fail→pass | 8,992 | 14,497 | +61% | 1 | 1 | 0% | 1,700 | 2,669 | +57% | 0 | 0 | — |
case-08 | pass→fail | 7,084 | 7,747 | +9% | 1 | 1 | 0% | 1,166 | 2,238 | +92% | 0 | 0 | — |
case-09 | fail→pass | 6,947 | 6,409 | -8% | 1 | 1 | 0% | 1,153 | 2,244 | +95% | 0 | 0 | — |
case-10 | fail→fail | 10,646 | 6,255 | -41% | 1 | 1 | 0% | 1,958 | 2,198 | +12% | 0 | 0 | — |
case-11 | pass→fail | 6,996 | 4,956 | -29% | 1 | 1 | 0% | 1,259 | 1,972 | +57% | 0 | 0 | — |
case-12 | fail→fail | 6,930 | 4,653 | -33% | 1 | 1 | 0% | 1,237 | 1,967 | +59% | 0 | 0 | — |
case-13 | fail→fail | 7,997 | 6,858 | -14% | 1 | 1 | 0% | 1,394 | 2,272 | +63% | 0 | 0 | — |
case-14 | fail→pass | 10,433 | 2,891 | -72% | 1 | 1 | 0% | 1,823 | 2,168 | +19% | 0 | 0 | — |
case-15 | fail→pass | 8,068 | 2,654 | -67% | 1 | 1 | 0% | 1,423 | 2,141 | +50% | 0 | 0 | — |
case-17 | fail→pass | 8,042 | 2,532 | -69% | 1 | 1 | 0% | 1,405 | 2,160 | +54% | 0 | 0 | — |
case-18 | pass→fail | 8,328 | 5,864 | -30% | 1 | 1 | 0% | 1,459 | 1,993 | +37% | 0 | 0 | — |
case-19 | pass→pass | 12,089 | 4,255 | -65% | 1 | 1 | 0% | 2,071 | 2,468 | +19% | 0 | 0 | — |
case-20 | pass→pass | 11,847 | 23,061 | +95% | 1 | 1 | 0% | 1,636 | 3,886 | +138% | 0 | 0 | — |
case-21 | pass→pass | 9,688 | 7,460 | -23% | 1 | 1 | 0% | 1,772 | 2,970 | +68% | 0 | 0 | — |
case-22 | pass→pass | 6,207 | 4,493 | -28% | 1 | 1 | 0% | 1,180 | 2,504 | +112% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 12 counted toward the lift figure. The other 10 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 12 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.