DSP per-category builds
Each category has a build.py that synthesises every non-curated
track in that category from scratch. Calling the pipeline rebuilds
every track in the category unless only_tracks is set.
| Category | Tracks | Typical content |
|---|---|---|
calming | ~60 | Pads, drones, gentle bells, warm textures |
frequencies | ~30 | Binaural beats, isochronic pulses, solfeggio tones |
neurodivergent | ~25 | Vagal pads, two-stage descents, low-stim drones |
noises | ~10 | Pink, brown, white, blue, violet noise + bandpass variants |
nature | ~30 | Synth rain, birdsong, wind beds (the non-curated ones) |
Parameters
- duration_sec (default 90s) — Track length. Loops typically 60-120s; longer = smoother loop seam, bigger file.
- fade_sec (default 4s) — Equal-power crossfade at the loop seam.
- seed (default 101) — RNG seed for reproducibility. Same seed → bit-identical output.
- only_tracks — Comma-separated track ids to limit the build. Useful for iterating on one sound without rebuilding the whole category.
What it doesn’t touch
- Curated tracks (those in
CURATED_OVERRIDESin eachbuild.py) - Catalog metadata (
sounds.json) — that gets regenerated separately viatools/generate/catalog.py+hash_catalog.py - Previews (
previews.pyis its own pipeline)
When to reach for it
- After editing primitive code in
lib.py/lib_pro.py/lib_studio/ - After changing a track recipe in
build.py - After changing a category-wide param (DURATION_SEC, FADE_SEC)
When NOT to
- For a single track that’s already shipping fine — use the synth-lab or master-bus pipelines for one-off rendering instead.
Runtime + cost
~15s per category on this EC2 box. Free (CPU only).