import-audio
npx machina-cli add skill bitwize-music-studio/claude-ai-music-skills/import-audio --openclawYour Task
Input: $ARGUMENTS
Import an audio file (WAV, MP3, etc.) to the correct album location based on config.
Import Audio Skill
You move audio files to the correct location in the user's audio directory.
Step 1: Parse Arguments
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-taste
If 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-taste
Step 2: Resolve Audio Path via MCP
- Call
resolve_path("audio", album_slug)— returns the full audio directory path - The resolved path uses the mirrored structure:
{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.
Step 3: Detect File Type
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.
Step 4: Create Directory and Move File
mkdir -p {resolved_path}
mv "{source_file}" "{resolved_path}/{filename}"
Step 4b: Import Stems Zip
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:
- Determine the track slug from one of:
- The zip filename if it matches a track pattern (e.g.,
01-first-taste-stems.zip→01-first-taste) - The user specifying which track (e.g.,
/import-audio stems.zip sample-album 01-first-taste) - If neither: Ask the user which track the stems belong to
- The zip filename if it matches a track pattern (e.g.,
- Extract into the per-track subfolder:
mkdir -p {resolved_path}/stems/{track-slug} unzip "{source_file}" -d "{resolved_path}/stems/{track-slug}" - Update track metadata: Call
update_track_field(album_slug, track_slug, "stems", "Yes")
Argument format for stems: <zip-path> <album-name> [track-slug]
Step 5: Confirm
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 → Yes
Error Handling
Source 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)
MP3 Files
Suno allows downloading in both WAV and MP3 formats. Always prefer WAV for mastering quality.
If the user provides an MP3 file:
- Accept the MP3 and import it normally (same path logic)
- Warn the user:
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.
- Import the file to the same destination path as WAV files
Supported formats: WAV (preferred), MP3, FLAC, OGG, M4A
Examples
/import-audio ~/Downloads/03-t-day-beach.wav sample-album
Config has:
paths:
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
Stems import example
/import-audio ~/Downloads/stems.zip sample-album 01-first-taste
Result:
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 → Yes
Common Mistakes
❌ Don't: Manually read config and construct paths
Wrong:
cat ~/.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 folder
Why it matters: resolve_path reads config, resolves variables, and includes the artist folder automatically. No manual config parsing or path construction needed.
❌ Don't: Mix up content_root and audio_root
Path comparison:
- Content:
{content_root}/artists/{artist}/albums/{genre}/{album}/(markdown, lyrics) - Audio:
{audio_root}/artists/{artist}/albums/{genre}/{album}/(WAV files, stems) - Documents:
{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.
Source
git clone https://github.com/bitwize-music-studio/claude-ai-music-skills/blob/main/skills/import-audio/SKILL.mdView on GitHub Overview
import-audio organizes downloaded audio by placing it into the correct album location within your audio directory. It supports WAV MP3 FLAC OGG and M4A and uses a mirrored artist/albums structure. For stems ZIP imports it creates per-track subfolders under stems and updates track metadata to reflect stems.
How This Skill Works
It parses arguments in the format <file-path> <album-name> [track-slug]. It resolves the destination with resolve_path to produce a path like {audio_root}/artists/{artist}/albums/{genre}/{album}/. It checks the file type and either moves the audio to the album folder or extracts a stems zip into a per-track stems/{track-slug} folder and updates the track metadata via update_track_field.
When to Use It
- You downloaded a WAV or MP3 file and want it placed into the correct album folder
- You have a stems ZIP and need per-track stems organized under the target album
- You want to import an MP3 file using the same path logic as WAV
- You need to prevent filename collisions by keeping stems in per-track subfolders
- You want an automated confirmation report after the import
Quick Start
- Step 1: Parse arguments in the form <file-path> <album-name> [track-slug]
- Step 2: Resolve the destination path with resolve_path and verify the mirrored album location
- Step 3: Move the audio or unzip stems into stems/{track-slug} and confirm the result
Best Practices
- Prefer WAV for mastering; use MP3 only when WAV is unavailable
- Always rely on resolve_path to compute the destination instead of building paths manually
- Keep album slug and track slug naming consistent across imports
- Check that the source file exists before importing and review any error messages
- For stems, provide a track slug or let the tool infer it from the zip name when possible
Example Use Cases
- Import ~/Downloads/track.wav sample-album
- Import ~/Downloads/03-t-day-beach.wav sample-album
- Import stems zip ~/Downloads/stems.zip sample-album 01-first-taste
- Import ~/Downloads/song.mp3 sample-album
- If a file already exists at the destination, you will see a warning and be prompted about overwriting