soundfx — studio — zsh — 80×40 0 stages
┌─ stage 1 · generate ─ text-to-soundfx
$ sfx generate "" --dur --infl
# history:
└────────────────────────────────────────
├─ stages 2+3 · pipeline tone.js ∥ soundtouch — one ordered pipe, interleave freely
# pipe is empty — or load a preset below
:load
└────────────────────────────────────────
├─ stage 4 · out scope · transport · export
 
0.0 / 6.0s ⟲ :export
└────────────────────────────────────────
: ⏎ run
VARIANT 07 · TERMINAL

$ man soundfx — the studio as a pipe

Generation, transformation, and export are one UNIX-style pipeline. Stage 1 is a command; Stages 2 and 3 are a single ordered list of filters you read top-to-bottom; Stage 4 writes a file. Tone.js and SoundTouch share the same pipe — interleave them anywhere, and the SoundTouch lines are tagged so you always know which engine is on the signal.

## density-first

Every parameter of every stage is visible at once as key=value — no panels to open, no clicks to dig. Power users see the whole patch as text and edit in place. It is the opposite of the guided variant: zero hand-holding, maximum throughput.

## keyboard-native

The command bar drives everything: add reverb, rm 2, load lofi, export mp3. Mouse optional. People who live in a shell feel instantly at home, and the surface stays fast on any hardware.

## pipe = architecture

The “unified rack” is literally a pipe here. Reorder lines to reorder rendering; bypass with [x]/[ ]. Because the UI mirrors the real signal flow, there is nothing extra to learn about how the engine composes effects.

## memorable & cheap

Pure monospace + phosphor green + an ASCII scope is unmistakable and weighs almost nothing. The trade-off is approachability — it courts engineers and repels newcomers, by design. Best as a “pro mode” companion to a friendlier default.

# mock engine · all four stages share one model · swap real tone.js · soundtouch · lamejs later — EOF