← All docs

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.

CategoryTracksTypical content
calming~60Pads, drones, gentle bells, warm textures
frequencies~30Binaural beats, isochronic pulses, solfeggio tones
neurodivergent~25Vagal pads, two-stage descents, low-stim drones
noises~10Pink, brown, white, blue, violet noise + bandpass variants
nature~30Synth 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_OVERRIDES in each build.py)
  • Catalog metadata (sounds.json) — that gets regenerated separately via tools/generate/catalog.py + hash_catalog.py
  • Previews (previews.py is 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).