shaperbox-importer
Bulk-import preset packs into Cableguys ShaperBox 3 on macOS — without clicking through Load FXP → Save preset for every single file.
ShaperBox 3 has no built-in bulk import. This tool hosts ShaperBox via Pedalboard so the plugin itself migrates each preset to its current internal format, then writes the result directly into ShaperBox's local SQLite DB and content-addressed .dat store. After running, the presets appear in the MY PRESETS tab on next launch.
Disclaimer: Not affiliated with or endorsed by Cableguys. The internal storage format was reverse-engineered. Use at your own risk; always keep the auto-backup until you've verified your presets.
Features
- Imports hundreds of presets in one go
- Supports
.vstpreset(VST3 preset files) and.fst(FL Studio plugin-state files) - Uses ShaperBox's own migration code via Pedalboard — version-correct output
- Auto-backups your
~/Library/Cableguys/ShaperBox3/folder before any writes - Refuses to run while a DAW is open (avoids DB lock)
- Dry-run mode
Requirements
- macOS
- Python 3.9+
- ShaperBox 3 installed at
/Library/Audio/Plug-Ins/VST3/ShaperBox 3.vst3 - A valid ShaperBox 3 license (the plugin must initialize for migration to work)
Install
pip install shaperbox-importer
Or from source:
git clone https://github.com/PhillipAmend/shaperbox-importer
cd shaperbox-importer
pip install .
Usage
# Dry-run first to see what would be imported
shaperbox-import /path/to/preset/folder --dry-run
# Real import (auto-backs up ShaperBox3/ first)
shaperbox-import /path/to/preset/folder
Close your DAW first. The tool refuses to run while one is open; override with --force if you really need to.
Flags
| flag | description |
|---|---|
--dry-run |
list what would be imported, no writes |
--no-backup |
skip the auto-backup of the Cableguys data folder |
--force |
proceed even with a DAW open (risks DB lock) |
--version |
print version |
Example
$ shaperbox-import ~/Downloads/MyPresetPack
found 200 preset file(s) (200 .vstpreset) under /Users/me/Downloads/MyPresetPack
backing up ShaperBox data folder ...
backup: /Users/me/Library/Cableguys/ShaperBox3.backup-20260522-142425
loading ShaperBox 3 via Pedalboard ...
importing 200 preset(s):
[ 1/200] + Bass Wobble 01 (4385 B)
[ 2/200] + Bass Wobble 02 (4586 B)
...
imported 200 preset(s); 0 failed.
open ShaperBox in your DAW to see the new presets in MY PRESETS.
Restoring from backup
If something looks wrong, the script prints the backup path. To restore:
rm -rf ~/Library/Cableguys/ShaperBox3
mv ~/Library/Cableguys/ShaperBox3.backup-<timestamp> ~/Library/Cableguys/ShaperBox3
How it works
- ShaperBox stores user presets in
~/Library/Cableguys/ShaperBox3/:presets.db— SQLite withpresets,queue,packs,pack_positions,files1,infotables.- Per-preset
.datfiles in a CAS layout (<hash[0]>/<hash[1]>/<hash>.dat), each containing#zip#\0+ zlib-compressed JUCEValueTree.
- The current state schema (version 75 in ShaperBox 3.6.x) differs from older saved presets — dropping older
.fxp/.vstpresetbytes in directly doesn't work because internal modules (LimiterState,PitchState, etc.) have evolved. - Hosting ShaperBox via Pedalboard and calling
load_preset()triggers the plugin's own migration code, which gives us a bit-correct current-format chunk back. - The chunk is written as a
.datand matching rows are inserted intopresets+queue.authormust be empty for the entry to appear inMY PRESETS.
For .fst files, the embedded #zip# chunk is extracted from FL Studio's container, re-wrapped as a synthetic .vstpreset, and fed through the same pipeline.
FAQ
Will this work on Windows or Linux? No. The Cableguys data folder, plugin path, and DAW-detection heuristics are macOS-specific. PRs welcome.
Will it break in the next ShaperBox release?
Possibly. The schema is bumped occasionally. If imports stop showing up, the CURRENT_DB_VERSION constant in cli.py likely needs to be raised; the rest of the format has been stable for several major versions.
Does it work for HalfTime / FilterShaper Core / other Cableguys plugins?
Not today. The data folder layout is similar, but each plugin has its own state schema and MY PRESETS flow.
Can I assign presets to a specific pack instead of MY PRESETS?
Not yet. PRs welcome — see pack_positions in the DB.
Does it sync to my Cableguys cloud account?
The imported presets land in the local sync queue (state=0). What Cableguys' server does with them on next sync isn't documented; we observed that they display correctly locally regardless.
Acknowledgments
This project was built in collaboration with Claude (Anthropic). The format reverse-engineering, code, tests, and documentation were paired with AI assistance.
License
MIT — an OSI-approved permissive open source license. Use it for anything (personal, commercial, in your own product), just keep the copyright notice.
Metadata
Release files for shaperbox-importer 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| shaperbox_importer-0.2.0.tar.gz | 12.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| shaperbox_importer-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.7 kB
Release files / shaperbox_importer-0.2.0.tar.gz
| Download URL | shaperbox_importer-0.2.0.tar.gz |
|---|---|
| Size | 12.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4bbf77f70ba745c5b684f8b7666dda246e5202c4fa267bb13728424642fd3770
|
|
BLAKE2b-256 checksum How to use checksums |
79366293a75b01387eefd6714a0a2b518cc384da27ea831e3d854274166d87da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 22, 2026.
Transparency logRelease files / shaperbox_importer-0.2.0-py3-none-any.whl
| Download URL | shaperbox_importer-0.2.0-py3-none-any.whl |
|---|---|
| Size | 10.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1c9ea3bdde0199a1d506e8d7a6c17e781d7febe5eac42dc2032368661f9c0bc6
|
|
BLAKE2b-256 checksum How to use checksums |
9251c8204d3178d721ae9ab4a9c1dffec960c055293cd4e405d3c905506b2354
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 22, 2026.
Transparency log