- `[2026-07-18]` **zonos-gateway 0.2.1 — voice-resolved emotion presets baked (provisional) from the axes sweep.** After the axes sweep ([[reference_zonos_tts_stack]] + the `[2026-07-18] axes sweep` Recent-decisions entry) rescued angry and confirmed startled-happy, the operator green-lit baking the results as **provisional** gateway presets + docs. Shipped `vh/zonos-gateway` **0.2.1** (main `8f1885b`, tag `v0.2.1`, PUSHED; deployed live on irv-ml1 `:8890`). **Design — voice-resolved, NOT global.** `resolve_preset(name, voice)` picks the per-voice measured cell, because a single global preset is unsafe (dvalin ruling; BritishFemale's *named* angry misfires as fear). Presets: - `angry`, `happy`, `startled_happy` (+ aliases `surprised`, `startled` → startled_happy). All expressive (`accurate_mode:false`), cfg 1.5, pure-axes (no named sliders). - Calibrated cells (the 3 default voices): - angry: AmF v-0.4/a+1.0 s1.0 (emo0.53/id0.685); BrF v-0.4/a+0.8 s1.0 (emo0.99/id0.725, metric fear-clean); AmM **two-tier** — soft v-0.6/a+0.8 s1.0 (0.23/id0.654) + drama v-0.6/a+0.8 s1.2 (1.0/id0.616 clean; strength is NOT a smooth knob on AmM, 1.0→1.2 is the window, past that flips to disgust). - happy / startled_happy: AmF v+0.6/a+0.8; AmM v+0.3/a+1.0; BrF v+0.6/a+1.0 (happy~1.0, id 0.74-0.80; axes-happy keeps +0.15 id over the named happy slider). - `sad` = unchanged named-slider preset (not axes-tested). - Uncalibrated voices (Cora + the 4 clones) → mid-region fallback until measured. - Docs surface: `/v1/dials` exposes `voice_emotion_presets`; the FastAPI `/docs` description documents it; durable spec `docs/EMOTION-DIALS-SPEC.md` (moved INTO the repo — was mirror-only); README table. 44 tests green. **Repo-hygiene gotcha (fixed).** The local clone `~/development/zonos-gateway` and gitea `vh/zonos-gateway` had **TWO UNRELATED git histories** (no merge-base) — gitea held the voice-wav commits, the local clone held the code + no remote. Reconciled by resetting local→origin/main, overlaying the 7 bake files, `uv lock`, commit, push (fast-forward). Voices stay tracked; local now shares gitea's lineage + has origin wired. **The deployed irv-ml1 tree `/opt/docker/compose/zonos-gateway` is still NON-git** (hand-updated build context) — CI-wire remains an open follow-up. **Provisional pending** ear-validation on emotion-congruent text (the neutral-text audition was inconclusive: "they all sound different, hard to tell"). Follow-ups: sad axes/text pass on the 3 voices; congruent-text pass; clone-char emotion rows. Tools `~/development/zonos-tools/{axes_sweep,strength_ladder,gen_auditions,dial-in-studio}.py` (run ON irv-ml1; scoring env `uv run --with resemblyzer --with funasr --with "numpy<2" --with soundfile --with requests --with "setuptools<80" --with torchaudio`).