PolySplit splits polywav and AIFF files into per‑channel mono WAVs with clean, sortable names. It reads human‑friendly channel labels from a channels.txt file, matches source bit depth automatically, and includes a safe overwrite flow with backup/overwrite/new/resume modes. macOS 15.5 compatible.
- Pan‑based splitting for broad FFmpeg compatibility.
- Auto‑detects channel count and chooses the best WAV codec to match input (16‑bit, 24‑bit, 32‑bit, float).
- Channel labels from a simple
channels.txt(comments supported). - Reliability and safety: typed confirmation for deletes,
--dry-runpreview,resumemode, and abackupmode that preserves existing output by renaming it. - Parallel processing via
--workers Nwith sensible defaults from your CPU. - Flexible layouts:
flat(all files in one folder) orfolders(per‑source subfolder). - Clean file names like
01_KICK_SONG1.wavorSONG1_01_KICK.wavdepending on the layout.
Requires FFmpeg.
brew install ffmpegDownload polysplit.sh and make it executable:
chmod +x polysplit.shOne label per line, optional comments with #. Blank lines ignored.
# Example
Kick
Snare Top
Snare Bottom
OH L
OH R
Bass DI
GTR L
GTR R
Vox
The number of non‑comment lines must equal the channel count of your polywavs.
Basic:
./polysplit.sh --src "/path/to/source" --out "/path/to/output" --channels "/path/to/channels.txt"Layout:
--layout flat(default), file names likeSOURCE_01_KICK.wav.--layout folders, files in--out/SOURCE/01_KICK_SOURCE.wav.
Modes:
--mode new(default), auto‑rename the output root if it already exists.--mode backup, rename existing output to...__backup_YYYYMMDD-HHMMSSfirst.--mode overwrite, delete existing output after a typedDELETEconfirmation (or--yesfor non‑interactive).--mode resume, keep what is already exported and only write missing files.
Examples:
# Dry‑run preview
./polysplit.sh --src "/in" --out "/out" --channels "/in/channels.txt" --dry-run
# Overwrite with typed confirmation (interactive)
./polysplit.sh --src "/in" --out "/out" --channels "/in/channels.txt" --mode overwrite
# Overwrite non‑interactively (e.g., CI)
./polysplit.sh --src "/in" --out "/out" --channels "/in/channels.txt" --mode overwrite --yes
# Backup then run 4 files in parallel using per‑file folders
./polysplit.sh --src "/in" --out "/out" --channels "./channels.txt" --mode backup --layout folders --workers 4
# Resume and skip files that already exist
./polysplit.sh --src "/in" --out "/out" --channels "./channels.txt" --mode resumeFor each source file, PolySplit writes mono WAVs named based on your chosen layout:
# --layout folders
OUT/SOURCE/01_KICK_SOURCE.wav
OUT/SOURCE/02_SNARE_TOP_SOURCE.wav
# --layout flat
OUT/SOURCE_01_KICK.wav
OUT/SOURCE_02_SNARE_TOP.wav
Bit depth and format are auto‑matched to the source. BWF/iXML metadata is preserved when your ffmpeg build supports it.
- Destructive operations require confirmation.
overwritedeletes only after you typeDELETEor pass--yes. - Backup mode.
backuppreserves your previous results by renaming the existing output directory before writing. - DRY RUN.
--dry-runshows every directory create and every file that would be written. - Strict channel count check. If
channels.txtdoes not match the source channel count, PolySplit stops and tells you what to fix. - Non‑empty path guard. Refuses to delete
/or.and requires a non‑empty target path.
- Use
--workers Nto process multiple files in parallel. On Apple silicon,--workers 4or--workers 8is a good starting point. - Fast SSD output makes a big difference for large sessions.
This project was previously called polywav‑split‑macos. The new name, PolySplit, pairs with TapeShift stylistically.
MIT, see LICENSE.