# Tonic EP — Sound Authoring Kit

*Generated from the running parameter list of Tonic EP 1.3.0 on 28 Sep 2026. Do not edit by hand:
`python3 ios/tools/gerar-kit-timbres.py` rebuilds it.*

> **Kit revision `7631565707bd`** — 168 parameters. Two kits can carry the same app version and still
> differ; this line, not the version, is what tells you whether to fetch again. The same string is in
> `patch-kit.json`, in `revision`.
>
> **Machine-readable twin:** [`patch-kit.json`](patch-kit.json) carries the whole table as data — identifier,
> address, range, default, unit and every option — so a sound can be checked before it ever reaches the app.

This is everything an assistant — any assistant — needs to read, edit and write Tonic EP sounds that open in the
app and actually sound like something. It is plain text on purpose: no tooling, no account, no API.

Tonic EP is a *modelled* electric piano: there are no recordings inside. A sound is a set of numbers that tells
the model how the hammer strikes, how the tine or the reed rings, where the pickup sits, what the amp does and
which effects follow. Change the numbers and you change the instrument.

---

## 1 · The six rules

**1. Start from a sound the app gave you.** In the library, touch and hold a sound (right-click on the Mac):
*Export Sound…* gives you a `.tep` file, and *Copy Sound* puts the same sound on the clipboard as
text, with every parameter spelled out. Edit that. A sound carries more than knobs — six scenes, the pitch-bend
range, what the mod wheel moves, its MIDI filter — and a file written from an empty page silently loses whatever
it forgot.

**2. Keep the extension.** A sound is **`.tep`**; a bank is **`.tepbk`**; a backup of the
whole library is **`.tepall`** (`.tepmap` is a MIDI map, not a sound). The app reads by
CONTENT, not by name, so a renamed file still opens — but the extension is the only thing a person sees before
opening, and what is inside decides what the app does with it: a sound is saved as a **new** sound in your
bank; a bank arrives as a **new** bank; a backup updates the sounds that have the same name and never deletes
anything. Inside, `format` is `"tonic-ep"`: the app refuses any other format, so a Tonic Synth patch
does not open here, by design.

**3. Never invent an identifier.** Only the identifiers in §4 exist. An unknown key is ignored in silence: the
sound opens, looks fine, and does not sound the way you wrote it.

**4. Keep `format`, `version` and `level` exactly as they came.** A `version` above 1 is
refused as *made by a newer version*. `level` is the generation of the engine's output level that the Volume
was set in — **3** today. A sound without it is read as coming from version 1.0 or 1.1, and its Volume
(with the Amp's gain) is adjusted once, to match. Sounds you write say `"level": 3`.

**5. A scene is a photo of the whole sound.** Each of the six scenes (A–F) is `null` (empty) or
`{"params": {…}}`. When the sound opens, anything a scene leaves out is filled with the sound's own value — so
a partial scene means *the sound, plus these differences*. That makes scenes easy to write: for a scene B that
adds a slow phaser, write only the phaser's keys in it. It also works the other way: a key left out of a scene
goes back to the sound's own value when that scene is called.

**6. Values are not percentages.** Read §3 before writing numbers. It is the difference between a sound that
feels designed and one that sounds random.

---

## 2 · The file

A `.tep` is UTF-8 JSON. The envelope and one sound, as the app exports it — shortened here: a few
of its parameters, and each scene cut down to what it changes from the sound (rule 5). A real export carries
every value, in the sound and in every scene:

```json
{
  "app": "Tonic EP",
  "format": "tonic-ep",
  "kind": "preset",
  "preset": {
    "author": "",
    "bendDown": 2,
    "bendUp": 2,
    "edited": false,
    "factory": false,
    "factoryKey": "",
    "favorite": false,
    "id": "00000000-0000-4000-8000-000000000001",
    "lastScene": 0,
    "level": 3,
    "mechanism": "tine",
    "modAmount": 0.5,
    "name": "Sunday Morning",
    "params": {
      "fxChorusDepth": 0.55,
      "fxChorusMix": 0.38,
      "fxChorusMode": 4,
      "fxChorusNoise": 0.12,
      "fxChorusOn": 1,
      "fxChorusRate": 1.95
    },
    "scenes": [
      {
        "params": {}
      },
      {
        "params": {
          "fxChorusMix": 0.3,
          "fxDelayMix": 0.12,
          "fxReverbMix": 0.2,
          "hammerHardness": 0.8
        }
      },
      {
        "params": {
          "fxChorusMix": 0.45,
          "fxDelayMix": 0.2,
          "fxReverbMix": 0.34,
          "hammerHardness": 0.4
        }
      },
      {
        "params": {
          "fxChorusMix": 0.55,
          "fxDelayMix": 0.28,
          "fxReverbMix": 0.45,
          "hammerHardness": 0.35
        }
      },
      null,
      null
    ],
    "tags": [
      "soft",
      "warm",
      "chorus"
    ]
  },
  "version": 1
}
```

| field | what it is |
|---|---|
| `name` | the sound's name. If your bank already has one with that name, the app adds a number |
| `mechanism` | `"tine"` or `"reed"` — the badge the library shows and filters by. It must agree with the `engineModel` parameter (0 = Tine, 1 = Reed), which is what actually plays |
| `tags` | words the library filters by. The Tonica (the Tonic EP community) offers: Clean, Warm, Bright, Dark, Bell, Bark, Soft, Pad, Tremolo, Auto-Pan, Phaser, Chorus, Vibe, Rotary, Wah, Amp, Lo-Fi, Ballad, Soul/Funk, Jazz, Pop, Ambient |
| `author` | free text |
| `params` | identifier → value (§4). A parameter left out opens at its default, so a sound only needs the values that differ |
| `scenes` | six entries, `null` or `{"params": {…}}` (rule 5) |
| `lastScene` | the scene the sound opens in, 0 = A … 5 = F. Ignored when it points at an empty scene |
| `bendUp`, `bendDown` | pitch-bend range in semitones, 0–24 each (default 2) |
| `modWheel` | the identifier the mod wheel moves in this sound. Absent = its factory job, the depth of the Tremolo effect |
| `modAmount` | how much of that control's range the wheel sweeps, 0–1 (the app offers 0.25, 0.5, 0.75, 1; default 0.5) |
| `midiFilter` | MIDI filter rules saved with the sound — best left as exported |
| `level` | rule 4 — `3` |
| `id` | any UUID. The app gives every sound a new one when it arrives |
| `factory`, `factoryKey`, `favorite`, `edited` | bookkeeping: `false`, `""`, `false`, `false`. The app clears the factory stamp on anything that arrives, so a file cannot pass itself off as a factory sound |

A bank (`"kind": "bank"`) carries `"bank": {"name": …, "presets": […]}` instead of `preset`.

---

## 3 · What the numbers mean

- **Volume** (`outputVolume`) is a linear gain: 1 = 0 dB, 2 ≈ +6 dB, 4 = +12.0 dB (the
  top), 0 = silence. Balance a new sound against a factory sound you like — here, not with the effects.
- **Ratios**, shown as ×: 1 = the instrument as modelled; below 1 is less, above 1 is more. Hardness ×2 is a
  harder hammer; Decay ×0.5 is a note that dies sooner.
- **Hz, dB, ms, mm**: real frequencies, decibels, milliseconds and millimetres. Controls marked *(log)* travel
  logarithmically on screen: halfway between 2 kHz and 16 kHz is about 5.7 kHz, not 9 kHz.
- **Options**: a whole number — the index into the list printed in §4, starting at 0.
- **Plain numbers**: an amount on the control's own scale. The range column says where it starts and ends,
  and the small text under it is what the screen shows: Bell 1.00 is the factory dose and goes up to 4;
  Stereo Width 1.5 shows as 150 %.
- **Mix** goes from dry (0) to fully wet (1) in almost every effect. The Reverb's goes to 1.25 and has its own
  Dry control.
- **On switches** (`…On`, and `fxLimiterStereoOn`): 0 = off, 1 = on. An effect whose switch is off does
  nothing, whatever its knobs say — so to hear an effect, write its switch.

Every row in §4 shows, under the range, the text the musician sees at the minimum, the default and the maximum —
so a reading of a number can be checked against the screen.

---

## 4 · The controls

In the order of the screen, grouped as a DAW shows them. *What it does* is the app's own guided-tour note.
The address is what a DAW's automation and a MIDI map store; inside a sound, everything goes by identifier.

### Piano

#### Pickup

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `pickupPosition` | 0 | Position | 0 → 1.6<br><sub>0.00 mm → 1.60 mm</sub> | 0.4<br><sub>0.40 mm</sub> | Where the tine sits in front of the pickup. Centered, the two sides cancel and you hear a hollow tone an octave up; move it off-center and the fundamental comes back with the classic bite. It is the timbre screw a technician turns on the real instrument. |
| `pickupDistance` | 1 | Distance | 0.5 → 2<br><sub>×0.50 → ×2.00</sub> | 1<br><sub>×1.00</sub> | How close the pickup is to the tine. Closer, the tine swings into the uneven part of the magnet's field and hard notes growl; farther, every note stays round and clean. The volume is compensated — this knob changes the color, not the level. |
| `tineBell` | 3 | Bell | 0 → 4<br><sub>0.00 → 4.00</sub> | 1<br><sub>1.00</sub> | The bell: the short, glassy ring on top of the attack. It is the part that cuts through a band. Down for a warm, dark piano; up for one that sparkles. |
| `preamp` | 12 | Pre | 0 → 1<br><sub>0.00 → 1.00</sub> | 0<br><sub>0.00</sub> | How hard the signal pushes the preamp. At zero it is clean; turn it up and the sound warms up and gains a soft overdrive that grows when you play hard.<br>*On the reed piano:* Gain of the instrument's own preamp. Turn it up for the gritty, pushed sound of the circuit: loud chords start to growl. It adds up with the Cabinet and with the rack's Amp and Overdrive, so with those on, a little Pre goes a long way. |

#### Hammer

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `hammerHardness` | 2 | Hardness | 0.25 → 4 *(log)*<br><sub>×0.25 → ×4.00</sub> | 1<br><sub>×1.00</sub> | The hammer tip. Soft sounds like a worn tip: a round, mellow attack. Hard is a fresh one: a bright strike with more bell, and more bark when you dig in.<br>*On the reed piano:* The felt hammer. Soft keeps the attack round and sweet; hard brings out the reed's clang and makes loud notes bite sooner. |
| `tineDecay` | 4 | Decay | 0.25 → 2<br><sub>×0.25 → ×2.00</sub> | 1<br><sub>×1.00</sub> | How long a held note keeps ringing. Short feels percussive and tight; long lets chords bloom and blend like a pad. |
| `forkBeat` | 5 | Fork Beat | 0 → 2<br><sub>0.00 Hz → 2.00 Hz</sub> | 0.3<br><sub>0.30 Hz</sub> | A tiny detune between the two arms of the tuning fork. At zero the note is steady; turn it up and a slow, gentle beating appears — the shimmer that makes a real instrument feel alive. |
| `damperTime` | 6 | Damper | 0.25 → 3<br><sub>×0.25 → ×3.00</sub> | 1<br><sub>×1.00</sub> | What happens when you let go of the key. Short, the damper stops the note at once; long, it fades out slowly, somewhere between a damped and a pedaled piano. |

#### Amp

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `harpTone` | 7 | Tone | 2000 → 16000 *(log)*<br><sub>2.0 kHz → 16.0 kHz</sub> | 8000<br><sub>8.0 kHz</sub> | The overall brightness of the instrument. Down is the sound through a dark amp or a long old cable; up opens the top end for a modern, hi-fi piano. |
| `ampRig` | 8 | Rig | 0 = DI · 1 = Suitcase | 0 | Where the piano is plugged in. DI goes straight to the mixer, clean and mono. Suitcase is the built-in amp of the suitcase model: choosing it switches on the rack's Tremolo in Stereo, the sway between left and right. |
| `outputVolume` | 11 | Volume | 0 → 4<br><sub>−∞ dB → 12.0 dB</sub> | 1<br><sub>0.0 dB</sub> | The instrument's output level, after the effects. Use it to match this sound to the rest of your set — it doesn't change the tone. |
| `reedCabinet` | 17 | Cabinet | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.6<br><sub>0.60</sub> | The size of the instrument's own amp and speakers in the lid. At zero you hear the line output, flat and full. Turned up, the bass drops away, a boxy presence appears around 2–3 kHz and the cone rolls off the top. The last stretch of the knob also pushes the small amp, and loud chords start to break up: if a chord comes out dirty, back it off a little from the end and the speaker color stays. |
| `reedRange` | 20 | Range | 0 = A–C · 1 = Full | 0 | The keyboard range. A–C is the instrument's own 64 keys, from A1 to C7 — notes outside stay silent, like on the real thing. Full extends it across the whole keyboard. |
| `rigBass` | 23 | Bass | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | The bass of the suitcase preamp, copied from the real circuit: it acts below a few hundred hertz and goes a long way — the middle is flat, as on the instrument. |
| `rigTreble` | 24 | Treble | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | The treble of the suitcase preamp, copied from the real circuit: it opens the top from about 1 kHz up. The middle is flat; all the way up is the bark of the real one. |
| `touchDynamics` | 25 | Dynamics | 0.5 → 2<br><sub>0.50 → 2.00</sub> | 1<br><sub>1.00</sub> | How far your touch travels in THIS sound. 100% is as you played it; more exaggerates the difference between soft and hard, less evens the instrument out for a noisy stage. It moves the pianissimo and the fortissimo and leaves the mezzo forte where it is, and it is saved with the sound. To fix the KEYBOARD instead of the sound, use Settings → Keyboard. |

#### Instrument

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `tremoloRate` | 9 | Trem Rate | 0.5 → 10 *(log)*<br><sub>0.50 Hz → 10.00 Hz</sub> | 4<br><sub>4.00 Hz</sub> | Speed of the suitcase tremolo, the left-right sway. Slow is a lazy wave; fast becomes a shimmering flutter. It only acts with the Suitcase rig.<br>*On the reed piano:* Speed of the tremolo. On this instrument it lives inside the preamp, so it pulses the volume and the grit together. |
| `tremoloDepth` | 10 | Trem Depth | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How far the suitcase tremolo swings. Low is a gentle movement; full sends each note all the way from one side to the other.<br>*On the reed piano:* How deep the tremolo pulses. At zero it is off; up high the sound chops between loud and quiet, and the growl rises and falls with it. |
| `engineModel` | 13 | Model | 0 = Tine · 1 = Reed | 0 | Chooses the mechanism. Tine is a tuning fork read by a magnet: bell on top, bark and a long sustain. Reed is a flat steel reed read by static electricity: a nasal, sweet voice that growls the harder you play. |
| `tremoloShape` | 19 | Trem Shape | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | The shape of the tremolo pulse. Low is smooth and round, like breathing; high is square and choppy, a clear on and off. |

#### Reed

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `reedBark` | 14 | Bark | 0.05 → 0.6<br><sub>0.05 → 0.60</sub> | 0.3<br><sub>0.30</sub> | How far the reed's tip swings out of line with the pickup comb on each vibration. A little: a sweet, almost flute-like voice. More: the nasal, reedy tone, and a bark that bites harder the harder you play. That bite is the grit you hear on loud single notes; lower Bark tames it. The volume is compensated, so this changes the color, not the level. |
| `reedComb` | 15 | Comb | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.35<br><sub>0.35</sub> | Where the reed rests between the teeth of the pickup comb. At zero it sits centered and only even harmonics come through — hollow, an octave up; turn it up and the fundamental returns and the tone fills out. |
| `reedClang` | 16 | Clang | 0 → 2<br><sub>0.00 → 2.00</sub> | 1<br><sub>1.00</sub> | A metallic ping from the reed's first high, out-of-tune mode at the start of the note. At the factory setting it is barely there — a real reed hardly has it; that glassy bell belongs to the tine. At zero it is gone; turned all the way up it becomes a clear clang, a color of your own. |

#### Mechanics

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `mechNoise` | 18 | Attack | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.3<br><sub>0.30</sub> | The thump of the key and the hammer at the moment you play. A little makes the instrument feel physical; a lot sounds like an old, well-played one. |
| `mechRelease` | 21 | Release | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.3<br><sub>0.30</sub> | The felt of the damper landing back when you let a key go. It is half of what makes an electric piano sound real — and it was tied to Attack until now. |
| `mechPedal` | 22 | Pedal | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.25<br><sub>0.25</sub> | The bar that lifts every damper when you press the sustain pedal, and drops them when you let it go. Down is a fuller thump than up, as on the instrument. |

### Effects

#### Comp

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxCompOn` | 100 | Comp On | 0 = Off · 1 = On | 0 | Compressor — evens out loud and soft notes so the piano sits steady in the mix. Gentle settings keep the attack; strong ones squash it for a tight, punchy sound. |
| `fxCompThresh` | 101 | Comp Threshold | -48 → 0<br><sub>-48.0 dB → 0.0 dB</sub> | -18<br><sub>-18.0 dB</sub> | The level where compression starts. Lower means more of your playing gets compressed. |
| `fxCompRatio` | 102 | Comp Ratio | 1 → 20<br><sub>×1.00 → ×20.00</sub> | 3<br><sub>×3.00</sub> | How hard it compresses above the threshold. 2:1 is gentle leveling; 10:1 and up is a squash. |
| `fxCompAttack` | 103 | Comp Attack | 0.1 → 100 *(log)*<br><sub>0 ms → 100 ms</sub> | 10<br><sub>10 ms</sub> | How fast it reacts. Slow lets the hammer strike pass untouched; fast grabs the attack itself. |
| `fxCompRelease` | 104 | Comp Release | 5 → 1000 *(log)*<br><sub>5 ms → 1.00 s</sub> | 120<br><sub>120 ms</sub> | How fast it lets go after a loud note. Short sounds lively and can pump; long is smoother. |
| `fxCompMakeup` | 105 | Comp Makeup | 0 → 24<br><sub>0.0 dB → 24.0 dB</sub> | 0<br><sub>0.0 dB</sub> | Adds back the volume the compression took away. |
| `fxCompKnee` | 106 | Comp Knee | 0 → 24<br><sub>0.0 dB → 24.0 dB</sub> | 0<br><sub>0.0 dB</sub> | How softly compression starts around the threshold. Zero is a sudden step; higher eases in gradually and sounds more natural. |
| `fxCompMix` | 107 | Comp Mix | 0 → 1<br><sub>0.00 → 1.00</sub> | 1<br><sub>1.00</sub> | Blends the compressed sound with the dry piano — parallel compression: body and punch without losing the natural attack. |

#### Wah

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxWahOn` | 116 | Wah On | 0 = Off · 1 = On | 0 | Wah — a moving filter that makes the piano talk. In Pedal mode you set the position (or map an expression pedal with MIDI Learn); in Auto it opens by itself with how hard you play. |
| `fxWahMode` | 117 | Wah Mode | 0 = Pedal · 1 = Auto | 0 | Pedal holds the filter where the Pedal knob puts it; Auto follows your playing. Switching sets a starting point for each. |
| `fxWahPedal` | 118 | Wah Pedal | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.35<br><sub>0.35</sub> | The pedal position, from heel (dark) to toe (bright). In Auto mode it is where the sweep starts. |
| `fxWahQ` | 119 | Wah Resonance | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How sharp the filter's peak is. Higher makes the vowel-like quack stronger. |
| `fxWahMix` | 120 | Wah Mix | 0 → 1<br><sub>0.00 → 1.00</sub> | 1<br><sub>1.00</sub> | How much of the effect you hear against the dry piano. |
| `fxWahSens` | 121 | Wah Sensitivity | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.6<br><sub>0.60</sub> | Auto mode: how much your touch opens the filter. Low needs hard notes; high opens on soft ones too. |
| `fxWahSpeed` | 122 | Wah Speed | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.4<br><sub>0.40</sub> | Auto mode: how quickly the filter follows each note and falls back. Slow is a lazy sweep; fast is a snappy quack. |

#### Drive

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxOdOn` | 132 | Drive On | 0 = Off · 1 = On | 0 | Drive — a pedal that clips the signal for warmth and grit. It starts voiced for the tine piano: clean when you play softly, growling when you dig in, and just as loud on as off. |
| `fxOdDrive` | 133 | Drive | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.3<br><sub>0.30</sub> | How hard the signal hits the clipper. Low dirties only the loud notes; high distorts everything. |
| `fxOdTone` | 134 | Drive Tone | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.45<br><sub>0.45</sub> | Brightness after the distortion. Down smooths the fizz; up adds bite. |
| `fxOdLevel` | 135 | Drive Level | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.3<br><sub>0.30</sub> | Output level of the pedal. Match it so switching the pedal on changes the color, not the volume. |

#### Amp

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxAmpOn` | 148 | Amp On | 0 = Off · 1 = On | 0 | Amp — a guitar-style amplifier and speaker cabinet after the piano: from a clean stage amp to a pushed crunch. |
| `fxAmpModel` | 149 | Amp Model | 0 = Clean · 1 = Warm · 2 = Crunch · 3 = High Gain · 4 = Chime · 5 = Bass | 0 | The character of the amp. Picking one sets the amp to a starting point for it. |
| `fxAmpGain` | 150 | Amp Gain | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How hard the amp is driven. Low stays clean; high breaks up. |
| `fxAmpBass` | 151 | Amp Bass | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | Low end of the amp's tone controls. |
| `fxAmpMid` | 152 | Amp Mid | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | Middle of the tone controls — scoop it for a hi-fi sound, push it to cut through a band. Mid Freq sets where it acts. |
| `fxAmpTreble` | 153 | Amp Treble | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | Top end of the amp's tone controls. |
| `fxAmpMidFreq` | 154 | Amp Mid Freq | 200 → 2000 *(log)*<br><sub>200.00 Hz → 2.0 kHz</sub> | 700<br><sub>700.00 Hz</sub> | Where the Mid knob acts: low for body, high for presence. |
| `fxAmpLevel` | 155 | Amp Level | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.6<br><sub>0.60</sub> | Output level of the amp. Match it to the sound without the amp. |
| `fxAmpCab` | 156 | Amp Cabinet | 0 = Off · 1 = On | 1 | The speaker cabinet. On is the sound of a miked speaker; off is the amp's direct output, brighter and fizzier. |

#### Phaser

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxPhaserOn` | 164 | Phaser On | 0 = Off · 1 = On | 0 | Phaser — sweeping notches that make the piano swirl. The classic keyboard sound of the seventies. |
| `fxPhaserMode` | 165 | Phaser Mode | 0 = 4-Stage · 1 = 6-Stage · 2 = Wide · 3 = Pad | 0 | The voicing of the phaser. Picking one sets the phaser to a starting point for it. |
| `fxPhaserRate` | 166 | Phaser Rate | 0.02 → 10 *(log)*<br><sub>0.02 Hz → 10.00 Hz</sub> | 0.9<br><sub>0.90 Hz</sub> | Speed of the sweep. Slow is a lazy swirl; fast becomes a wobble. |
| `fxPhaserDepth` | 167 | Phaser Depth | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.7<br><sub>0.70</sub> | How far the sweep travels. It grows upward from the low end: with little Depth the notches stay in the low mids, and turned up they reach the top. |
| `fxPhaserFb` | 168 | Phaser Feedback | 0 → 0.8<br><sub>0.00 → 0.80</sub> | 0.35<br><sub>0.35</sub> | Feeds part of the sound back into the sweep and adds a light ring to the peaks. In this phaser more Feedback also makes the notches shallower: the swirl gets smoother, not stronger. For a stronger swirl, use Mix. |
| `fxPhaserMix` | 169 | Phaser Mix | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How much of the swept copy you hear against the dry piano. The notches cut deepest in the middle, half and half, which is where the classic pedal is fixed. Toward either end the swirl fades: at a third it is only a hint. |
| `fxPhaserSync` | 170 | Phaser Sync | 0 = Free · 1 = 1/1 · 2 = 1/2 · 3 = 1/4 · 4 = 1/8 · 5 = 1/16 · 6 = 1/32 | 0 | Free follows the Rate knob. A note value locks the speed to the tempo — the song's tempo inside a DAW. |
| `fxPhaserStereo` | 171 | Phaser Stereo | 0 = Off · 1 = On | 1 | Stereo: the two sides sweep a quarter turn apart, so the swirl spreads left and right. Off, both sides sweep together. Turn it off for a mono PA or a one-channel recording: summed to mono, the stereo sweep loses up to half its depth. |

#### Chorus

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxChorusOn` | 180 | Chorus On | 0 = Off · 1 = On | 0 | Chorus — doubles the piano with slightly moving copies, for width and shimmer. |
| `fxChorusMode` | 181 | Chorus Mode | 0 = I · 1 = II · 2 = I+II · 3 = Ensemble · 4 = Vintage · 5 = Dark · 6 = Wide · 7 = Strings | 0 | The voicing of the chorus. Picking one sets the chorus to a starting point for it. |
| `fxChorusDepth` | 182 | Chorus Depth | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How far the copies drift. Low is subtle; high gets seasick. |
| `fxChorusMix` | 183 | Chorus Mix | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How much of the effect you hear against the dry piano. |
| `fxChorusRate` | 184 | Chorus Rate | 0.05 → 12 *(log)*<br><sub>0.05 Hz → 12.00 Hz</sub> | 4<br><sub>4.00 Hz</sub> | Speed of the movement for Vintage, Dark, Wide and Strings. I, II, I+II and Ensemble keep their own fixed speeds. |
| `fxChorusNoise` | 185 | Chorus Noise | 0 → 1<br><sub>0.00 → 1.00</sub> | 0<br><sub>0.00</sub> | Adds the hiss of the old analog circuit. Zero is silent; a little makes the chorus feel alive. |

#### Vibe

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxVibeOn` | 196 | Vibe On | 0 = Off · 1 = On | 0 | Vibe — the liquid, throbbing pulse of a vintage phase pedal. Deep on chords, lovely at a slow rate. |
| `fxVibeRate` | 197 | Vibe Rate | 0.05 → 6 *(log)*<br><sub>0.05 Hz → 6.00 Hz</sub> | 0.8<br><sub>0.80 Hz</sub> | Speed of the pulse. |
| `fxVibeDepth` | 198 | Vibe Depth | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.7<br><sub>0.70</sub> | How strong the pulse is. |
| `fxVibeChar` | 199 | Vibe Character | 0 = Vibrato · 1 = Chorus | 0 | Vibrato wobbles the pitch; Chorus mixes it with the dry sound for the throb. Switching sets a starting point for each. |
| `fxVibeMix` | 200 | Vibe Mix | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How much of the effect you hear against the dry piano. |

#### Flanger

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxFlangerOn` | 212 | Flanger On | 0 = Off · 1 = On | 0 | Flanger — a very short moving delay that sweeps a metallic whoosh through the sound. |
| `fxFlangerRate` | 213 | Flanger Rate | 0.02 → 10 *(log)*<br><sub>0.02 Hz → 10.00 Hz</sub> | 0.3<br><sub>0.30 Hz</sub> | Speed of the sweep. |
| `fxFlangerDepth` | 214 | Flanger Depth | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.6<br><sub>0.60</sub> | How far the sweep travels. |
| `fxFlangerFb` | 215 | Flanger Feedback | 0 → 0.95<br><sub>0.00 → 0.95</sub> | 0.5<br><sub>0.50</sub> | Feedback: higher sounds more metallic, like a jet passing. |
| `fxFlangerMix` | 216 | Flanger Mix | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How much of the effect you hear against the dry piano. |

#### Tremolo

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxTremoloOn` | 228 | Tremolo On | 0 = Off · 1 = On | 0 | Tremolo — pulses the volume up and down, on top of any sound, and can lock to the song's tempo. |
| `fxTremoloRate` | 229 | Tremolo Rate | 0.05 → 20 *(log)*<br><sub>0.05 Hz → 20.00 Hz</sub> | 5<br><sub>5.00 Hz</sub> | Speed of the pulse. |
| `fxTremoloDepth` | 230 | Tremolo Depth | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How deep the pulse goes: low is gentle, full chops down to silence. |
| `fxTremoloSync` | 231 | Tremolo Sync | 0 = Free · 1 = 1/1 · 2 = 1/2 · 3 = 1/4 · 4 = 1/8 · 5 = 1/16 · 6 = 1/32 | 0 | Free follows the Rate knob. A note value locks the speed to the tempo — the song's tempo inside a DAW. |
| `fxTremoloStereo` | 232 | Tremolo Stereo | 0 = Off · 1 = On | 0 | Stereo: the two sides pulse in turn, so the sound swings left and right — the suitcase amp. Off, both sides pulse together, the classic volume tremolo. Choosing Suitcase in the Amp switches this tremolo on for you. |
| `fxTremoloType` | 233 | Tremolo Type | 0 = Smooth · 1 = Opto · 2 = Choppy · 3 = Harmonic | 0 | The character of the pulse. Smooth is a plain wave on the volume. Opto is the suitcase amp's photocell: a lamp and a light sensor, so the volume dips at once and swells back slowly — and at fast speeds it gets shallower, as on the real thing. Choppy switches the lamp on and off. Harmonic is the old amp's throb: lows and highs pulse against each other. |

#### Auto-Pan

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxAutoPanOn` | 244 | Auto-Pan On | 0 = Off · 1 = On | 0 | Auto-Pan — moves the sound between the left and right speakers. |
| `fxAutoPanRate` | 245 | Auto-Pan Rate | 0.05 → 12 *(log)*<br><sub>0.05 Hz → 12.00 Hz</sub> | 1<br><sub>1.00 Hz</sub> | Speed of the left-right movement. |
| `fxAutoPanDepth` | 246 | Auto-Pan Depth | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.6<br><sub>0.60</sub> | How far it travels: low stays near the center, full reaches each side. |
| `fxAutoPanSync` | 247 | Auto-Pan Sync | 0 = Free · 1 = 1/1 · 2 = 1/2 · 3 = 1/4 · 4 = 1/8 · 5 = 1/16 · 6 = 1/32 | 0 | Free follows the Rate knob. A note value locks the speed to the tempo — the song's tempo inside a DAW. |

#### Rotary

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxRotaryOn` | 260 | Rotary On | 0 = Off · 1 = On | 0 | Rotary — a rotating speaker cabinet: horn and drum spinning, with the swirl and the tube drive of the organ sound. |
| `fxRotarySpeed` | 261 | Rotary Speed | 0 = Slow · 1 = Fast | 0 | Slow (chorale) or Fast (tremolo). Switching ramps the rotors up or down like the real cabinet — map it to a pedal to change it live. |
| `fxRotaryBrake` | 262 | Rotary Brake | 0 = Off · 1 = On | 0 | Stops the rotors. Release it and they spin back up. |
| `fxRotaryDrive` | 263 | Rotary Drive | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.12<br><sub>0.12</sub> | The cabinet's tube amp: from clean to a growling overdrive. |
| `fxRotaryMix` | 264 | Rotary Mix | 0 → 1<br><sub>0.00 → 1.00</sub> | 1<br><sub>1.00</sub> | How much of the effect you hear against the dry piano. |
| `fxRotaryBalance` | 265 | Rotary Balance | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | Horn (top) against drum (bottom). More horn is brighter and swirlier; more drum is warmer. |
| `fxRotarySpread` | 266 | Rotary Spread | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.8<br><sub>0.80</sub> | Stereo width of the microphones around the cabinet. |
| `fxRotaryAccel` | 267 | Rotary Acceleration | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How fast the rotors speed up and slow down when you switch between Slow and Fast. |
| `fxRotaryModel` | 268 | Rotary Cabinet | 0 = Vintage · 1 = Studio · 2 = Modern · 3 = Compact | 0 | The type of cabinet. Picking one sets the rotary to a starting point for it. |
| `fxRotaryMic` | 269 | Rotary Mic Distance | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.35<br><sub>0.35</sub> | Microphone distance. Close is direct and intense; far adds room and softens the swirl. |

#### Lo-Fi

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxLoFiOn` | 276 | Lo-Fi On | 0 = Off · 1 = On | 0 | Lo-Fi — ages the sound: fewer bits, a narrow band, hiss and the wobble of tape or vinyl. |
| `fxLoFiCrush` | 277 | Lo-Fi Crush | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.3<br><sub>0.30</sub> | Reduces the resolution — grainy and digital as it goes up. |
| `fxLoFiBand` | 278 | Lo-Fi Band | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.3<br><sub>0.30</sub> | Narrows the frequency band, toward a radio or a telephone. |
| `fxLoFiNoise` | 279 | Lo-Fi Noise | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.2<br><sub>0.20</sub> | Hiss and crackle under the sound. |
| `fxLoFiWow` | 280 | Lo-Fi Wow | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.2<br><sub>0.20</sub> | The slow pitch wobble of a worn tape or a warped record. |
| `fxLoFiMix` | 281 | Lo-Fi Mix | 0 → 1<br><sub>0.00 → 1.00</sub> | 1<br><sub>1.00</sub> | How much of the effect you hear against the dry piano. |

#### Delay

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxDelayOn` | 292 | Delay On | 0 = Off · 1 = On | 0 | Delay — echoes of what you play, from a short slapback to long repeats that wash over the sound. |
| `fxDelayTime` | 293 | Delay Time | 20 → 2000 *(log)*<br><sub>20 ms → 2.00 s</sub> | 300<br><sub>300 ms</sub> | Time between echoes, in milliseconds. Ignored when Sync picks a note value. |
| `fxDelaySync` | 294 | Delay Sync | 0 = Free · 1 = 1/1 · 2 = 1/2 · 3 = 1/4 · 4 = 1/8 · 5 = 1/16 · 6 = 1/32 | 0 | Free uses the Time knob. A note value locks the echoes to the tempo — the song's tempo inside a DAW. |
| `fxDelayFeedback` | 295 | Delay Feedback | 0 → 0.95<br><sub>0.00 → 0.95</sub> | 0.35<br><sub>0.35</sub> | How many repeats. Low is one or two echoes; high keeps repeating for a long time. |
| `fxDelayPingPong` | 296 | Delay Ping-Pong | 0 = Off · 1 = On | 0 | Bounces the echoes between left and right. |
| `fxDelayTone` | 297 | Delay Tone | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.6<br><sub>0.60</sub> | Brightness of the repeats. Down makes each echo darker, like tape; up keeps them clear. |
| `fxDelayMix` | 298 | Delay Mix | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.3<br><sub>0.30</sub> | How much of the effect you hear against the dry piano. |
| `fxDelayWow` | 299 | Delay Wow | 0 → 1<br><sub>0.00 → 1.00</sub> | 0<br><sub>0.00</sub> | Pitch wobble on the repeats, like a tape echo. |
| `fxDelaySat` | 300 | Delay Saturation | 0 → 1<br><sub>0.00 → 1.00</sub> | 0<br><sub>0.00</sub> | Tape-style saturation on the repeats: warmer, rounder echoes. |

#### Reverb

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxReverbOn` | 308 | Reverb On | 0 = Off · 1 = On | 0 | Reverb — the space around the piano: from a small room to a cathedral, plus the classic plate and spring. |
| `fxReverbType` | 309 | Reverb Type | 0 = Room · 1 = Hall · 2 = Cathedral · 3 = Plate · 4 = Spring · 5 = Shimmer · 6 = Cloud · 7 = Gate · 8 = Swell | 3 | The kind of space. Picking one sets the reverb to a starting point for that space. |
| `fxReverbSize` | 310 | Reverb Decay | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How long the tail lasts. |
| `fxReverbDim` | 311 | Reverb Size | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How big the space is. Bigger spreads the reflections out; smaller is tighter. |
| `fxReverbDamp` | 312 | Reverb Damping | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | How quickly the highs die in the tail — like soft walls. Up is darker and warmer. |
| `fxReverbMix` | 313 | Reverb Mix | 0 → 1.25<br><sub>0.00 → 1.25</sub> | 0.35<br><sub>0.35</sub> | How much of the effect you hear against the dry piano. |
| `fxReverbPreDelay` | 314 | Reverb Pre-Delay | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | A short gap before the reverb starts, so the attack of the note stays clear. The middle is the natural setting of each type. |
| `fxReverbTone` | 315 | Reverb Tone | 0 → 1<br><sub>0.00 → 1.00</sub> | 1<br><sub>1.00</sub> | Brightness of the reverb tail. |
| `fxReverbLowEnd` | 316 | Reverb Low End | 0 → 1<br><sub>0.00 → 1.00</sub> | 1<br><sub>1.00</sub> | Bass in the tail. Turn it down to keep the reverb from muddying your chords. |
| `fxReverbModDepth` | 317 | Reverb Mod Depth | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | Mod (hold Decay): how much the tail moves — a slow chorus inside the room. The middle is the type's own amount; up swirls, down stays still and clean. |
| `fxReverbModRate` | 318 | Reverb Mod Rate | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | Rate (hold Decay): how fast the tail moves. The middle is the type's own speed. |
| `fxReverbShimPitch` | 319 | Reverb Shimmer Pitch | 0 → 1<br><sub>-24 st → +24 st</sub> | 0.75<br><sub>+12 st</sub> | Pitch (hold Type, on Shimmer): the interval the tail climbs to. +12 st is the classic octave up; 0 keeps it in unison; below zero it falls. |
| `fxReverbFreeze` | 320 | Reverb Freeze | 0 = Off · 1 = On | 0 | Freeze holds the tail forever: the chord you were playing becomes a pad, and what you play on top stays dry. Tap again to let it go. Hold it for Feed. |
| `fxReverbP1` | 321 | Reverb Param 1 | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | Changes with the type (hold Type): Shimmer — how much octave enters the tail; Diffuse, on Cloud — how dense the cloud is; Time, on Gate — how long it holds before the cut; Attack, on Swell — how slowly it swells in. |
| `fxReverbP2` | 322 | Reverb Param 2 | 0 → 1<br><sub>0.00 → 1.00</sub> | 0.5<br><sub>0.50</sub> | Shape (hold Type, on Gate): how the gated tail falls — down drops like a door, up lets it breathe out. |
| `fxReverbDuck` | 323 | Reverb Duck | 0 → 1<br><sub>Off → 100%</sub> | 0<br><sub>Off</sub> | Duck (hold Mix): the tail steps back while you play and blooms in the gaps between phrases. Off keeps it as it always was. |
| `fxReverbDry` | 356 | Reverb Dry | 0 → 1<br><sub>0% → 100%</sub> | 1<br><sub>100%</sub> | Dry (hold Mix): how much of the piano itself passes. 100% keeps the piano full with the reverb on top; 0% leaves only the reverb. |
| `fxReverbFreezeIn` | 357 | Reverb Freeze Feed | 0 → 1<br><sub>Held → 100%</sub> | 0<br><sub>Held</sub> | Feed (hold Freeze): how much of what you play still gets into the frozen tail. Held keeps the door closed. |

#### EQ

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxEqOn` | 324 | EQ On | 0 = Off · 1 = On | 0 | EQ — a five-band equalizer to shape the tone: cut the mud, lift the bell, make room in the mix. |
| `fxEqLow` | 325 | EQ Low | -15 → 15<br><sub>-15.0 dB → 15.0 dB</sub> | 0<br><sub>0.0 dB</sub> | Low band: weight and body. Touch and hold (or right-click) for its frequency — every underlined band has one. |
| `fxEqLoMid` | 326 | EQ Low Mid | -15 → 15<br><sub>-15.0 dB → 15.0 dB</sub> | 0<br><sub>0.0 dB</sub> | Low-mid band: where mud and boxiness live — often better cut than boosted. Touch and hold (or right-click) to move its frequency. |
| `fxEqMid` | 327 | EQ Mid | -15 → 15<br><sub>-15.0 dB → 15.0 dB</sub> | 0<br><sub>0.0 dB</sub> | Middle band: the honk and the body of the piano. Touch and hold (or right-click) to move its frequency. |
| `fxEqHiMid` | 328 | EQ High Mid | -15 → 15<br><sub>-15.0 dB → 15.0 dB</sub> | 0<br><sub>0.0 dB</sub> | High-mid band: attack, bell and presence. Touch and hold (or right-click) to move its frequency. |
| `fxEqHigh` | 329 | EQ High | -15 → 15<br><sub>-15.0 dB → 15.0 dB</sub> | 0<br><sub>0.0 dB</sub> | High band: air and sparkle. Touch and hold (or right-click) to move its frequency. |
| `fxEqLowFreq` | 330 | EQ Low Freq | 40 → 320 *(log)*<br><sub>40.00 Hz → 320.00 Hz</sub> | 80<br><sub>80.00 Hz</sub> | Frequency of this band (it opened from the band's gain knob). Sweep it with the band boosted to find the spot, then set the gain. The ✕ closes it. |
| `fxEqLoMidFreq` | 331 | EQ Low Mid Freq | 120 → 800 *(log)*<br><sub>120.00 Hz → 800.00 Hz</sub> | 240<br><sub>240.00 Hz</sub> | Frequency of this band (it opened from the band's gain knob). Sweep it with the band boosted to find the spot, then set the gain. The ✕ closes it. |
| `fxEqMidFreq` | 332 | EQ Mid Freq | 400 → 2500 *(log)*<br><sub>400.00 Hz → 2.5 kHz</sub> | 1000<br><sub>1.0 kHz</sub> | Frequency of this band (it opened from the band's gain knob). Sweep it with the band boosted to find the spot, then set the gain. The ✕ closes it. |
| `fxEqHiMidFreq` | 333 | EQ High Mid Freq | 1500 → 8000 *(log)*<br><sub>1.5 kHz → 8.0 kHz</sub> | 3500<br><sub>3.5 kHz</sub> | Frequency of this band (it opened from the band's gain knob). Sweep it with the band boosted to find the spot, then set the gain. The ✕ closes it. |
| `fxEqHighFreq` | 334 | EQ High Freq | 4000 → 18000 *(log)*<br><sub>4.0 kHz → 18.0 kHz</sub> | 12000<br><sub>12.0 kHz</sub> | Frequency of this band (it opened from the band's gain knob). Sweep it with the band boosted to find the spot, then set the gain. The ✕ closes it. |
| `fxEqQ` | 335 | EQ Q | 0.1 → 8 *(log)*<br><sub>×0.10 → ×8.00</sub> | 0.9<br><sub>×0.90</sub> | Width of the middle bands. Narrow for surgical cuts; wide for gentle, musical moves. |

#### Limiter

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxLimiterOn` | 340 | Limiter On | 0 = Off · 1 = On | 0 | Limiter — a ceiling at the end of the chain: nothing goes above it, so loud chords never clip. It shares its slot with Stereo: on the card each half has its own light, and the chip in the effects row switches the whole slot. |
| `fxLimiterGain` | 341 | Limiter Gain | 0 → 24<br><sub>0.0 dB → 24.0 dB</sub> | 0<br><sub>0.0 dB</sub> | Pushes the sound into the limiter: louder and denser as it goes up. |
| `fxLimiterCeil` | 342 | Limiter Ceiling | -24 → 0<br><sub>-24.0 dB → 0.0 dB</sub> | -0.3<br><sub>-0.3 dB</sub> | The maximum output level. |
| `fxLimiterRel` | 343 | Limiter Release | 1 → 500 *(log)*<br><sub>1 ms → 500 ms</sub> | 100<br><sub>100 ms</sub> | How fast it recovers after a peak. Short is loud but can pump; long is smoother. |

#### Stereo

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxLimiterStereoOn` | 344 | Stereo | 0 = Off · 1 = On | 0 | Stereo — opens the piano out to both sides. It shares the Limiter's slot with its own light: switch on either half, or both. It comes before the Limiter, so the ceiling still holds, and played back in mono nothing disappears. |
| `fxLimiterWidth` | 345 | Stereo Width | 0 → 2<br><sub>0% → 200%</sub> | 1.5<br><sub>150%</sub> | Width — at 100% the sound stays as it is; below that it narrows toward mono, above it spreads wider. |
| `fxLimiterMonoBelow` | 346 | Stereo Mono Below | 20 → 500 *(log)*<br><sub>Off → 500 Hz</sub> | 120<br><sub>120 Hz</sub> | Mono < — below this pitch the sound goes back to the middle: the left hand keeps its weight while the top opens up. All the way down (Off), the bass spreads too. |
| `fxLimiterCenter` | 347 | Stereo Center | 0 → 2<br><sub>0% → 200%</sub> | 1<br><sub>100%</sub> | Center — how much of the middle you keep. Below 100% hollows the centre so the piano wraps around you; above it brings the middle back to the front. |

### Rack

#### Chain

| identifier | address | name | range | default | what it does |
|---|---|---|---|---|---|
| `fxOrder0` | 400 | Comp Position | whole number, 0 → 15 | 0 |  |
| `fxOrder1` | 401 | Wah Position | whole number, 0 → 15 | 1 |  |
| `fxOrder2` | 402 | Drive Position | whole number, 0 → 15 | 2 |  |
| `fxOrder3` | 403 | Amp Position | whole number, 0 → 15 | 3 |  |
| `fxOrder4` | 404 | Phaser Position | whole number, 0 → 15 | 4 |  |
| `fxOrder5` | 405 | Chorus Position | whole number, 0 → 15 | 5 |  |
| `fxOrder6` | 406 | Vibe Position | whole number, 0 → 15 | 6 |  |
| `fxOrder7` | 407 | Flanger Position | whole number, 0 → 15 | 7 |  |
| `fxOrder8` | 408 | Tremolo Position | whole number, 0 → 15 | 8 |  |
| `fxOrder9` | 409 | Auto-Pan Position | whole number, 0 → 15 | 9 |  |
| `fxOrder10` | 410 | Rotary Position | whole number, 0 → 15 | 10 |  |
| `fxOrder11` | 411 | Lo-Fi Position | whole number, 0 → 15 | 11 |  |
| `fxOrder12` | 412 | Delay Position | whole number, 0 → 15 | 12 |  |
| `fxOrder13` | 413 | Reverb Position | whole number, 0 → 15 | 13 |  |
| `fxOrder14` | 414 | EQ Position | whole number, 0 → 15 | 14 |  |
| `fxOrder15` | 415 | Limiter Position | whole number, 0 → 15 | 15 |  |
| `fxRackBypass` | 390 | Effects Bypass | 0 = In · 1 = Bypass | 0 | Switches the whole effects chain off at once, with a smooth crossfade — handy to compare the sound with and without. |

---

## 5 · The effects chain

16 places, in factory order. Each has an On switch and a position (its `fxOrder…` parameter): the
chain plays from the lowest position to the highest. Keep the positions a permutation of 0–15, as
the app writes them; if two effects share a number, they play in factory order. `fxRackBypass` = 1 bypasses
the whole chain.

The last place holds **two** effects, each with its own switch — `fxLimiterOn` and `fxLimiterStereoOn`.
Inside it the Stereo always plays first, so the Limiter's ceiling holds for the widened sound.

| factory position | effect | switch | position parameter |
|---|---|---|---|
| 0 | Comp | `fxCompOn` | `fxOrder0` |
| 1 | Wah | `fxWahOn` | `fxOrder1` |
| 2 | Drive | `fxOdOn` | `fxOrder2` |
| 3 | Amp | `fxAmpOn` | `fxOrder3` |
| 4 | Phaser | `fxPhaserOn` | `fxOrder4` |
| 5 | Chorus | `fxChorusOn` | `fxOrder5` |
| 6 | Vibe | `fxVibeOn` | `fxOrder6` |
| 7 | Flanger | `fxFlangerOn` | `fxOrder7` |
| 8 | Tremolo | `fxTremoloOn` | `fxOrder8` |
| 9 | Auto-Pan | `fxAutoPanOn` | `fxOrder9` |
| 10 | Rotary | `fxRotaryOn` | `fxOrder10` |
| 11 | Lo-Fi | `fxLoFiOn` | `fxOrder11` |
| 12 | Delay | `fxDelayOn` | `fxOrder12` |
| 13 | Reverb | `fxReverbOn` | `fxOrder13` |
| 14 | EQ | `fxEqOn` | `fxOrder14` |
| 15 | Limiter + Stereo | `fxLimiterOn`, `fxLimiterStereoOn` | `fxOrder15` |

---

## 6 · Editing, end to end

**The quick way — copy and paste:**

1. In the library, touch and hold a sound close to what you want (right-click on the Mac) → *Copy Sound*.
2. Paste it into the conversation with your assistant, together with this kit, and ask in musical terms:
   *"darker, with a softer hammer, and a slow phaser in scene B"*.
3. The answer must be the whole sound: **`TONICEP-PRESET-v1:`** immediately followed by the JSON, with nothing before
   it. That label is how the app recognises a sound on the clipboard — without it, nothing is pasted.
4. Copy the answer, open the library and tap **Paste**. It is saved as a new sound in your bank; nothing you
   already have is replaced.

**With a file:** *Export Sound…* → edit → save it with the `.tep` extension → open it on the device
(Files, AirDrop, Mail). It lands in your bank as a new sound, and the library opens on it.

**Things that will bite:**

- **No brand names** in `name`, `tags` or anywhere that gets published — no instrument makers, no artists, no
  song titles. Describe the sound instead (*"Warm Ballad Tine"*).
- **`mechanism` and `engineModel` must agree.** The sound plays the model the parameter says; the library shows
  the badge the field says.
- **An effect needs its switch.** The knobs of an effect that is off change nothing you can hear.
- **Balance the Volume last,** by ear, against a sound you know.

---

## 7 · Sounds written by other versions

You will open sounds older — or newer — than the app reading them. Nothing breaks, and knowing the rules saves
you from chasing a bug that is not there:

- **A key the app does not know is ignored.** When you paste a sound made by a newer Tonic EP, the app says how
  many controls it did not know, and plays without them.
- **A value outside its range is moved to the nearest edge** when the sound opens. An invented number never
  crashes anything — it just lands at the limit.
- **A key left out opens at its default** — which is why a sound only needs the values that differ.
- **No `level`** means the sound was written by 1.0 or 1.1: its Volume is adjusted once, and it is saved as
  level 3 from then on.
- **Older sounds are translated when they open.** Keep whatever keys came; the app knows its own history.

---

## 8 · Checking a sound before it reaches the app

- `format` is `"tonic-ep"`, `version` is 1, `kind` is `"preset"` (or `"bank"`).
- Every key in `params` — and in every scene — is in §4; every value is within its range; options and
  positions are whole numbers.
- `mechanism` agrees with `engineModel`.
- The 16 `fxOrder…` values are a permutation of 0–15.
- `scenes` has six entries; `lastScene`, if present, points at a filled one.
- `level` is `3`.

`patch-kit.json` carries everything needed to run these checks by machine.

---

## 9 · What this kit does not give you

The factory sounds are not in this document: they are the instrument's own voice, and they ship inside the app.
Nor are MIDI maps (`.tepmap`): a map belongs to the keyboard on your desk, not to a sound — make it
in the app with MIDI Learn. This kit is the format, the ranges and what the numbers mean — enough to build your
own sounds, and enough for an assistant to do it with you without guessing.
