End-of-session snapshot for /clear. In-flight compressed (four majors landed: zonos-gateway 0.2.1 emotion presets, soong-lab containerized cutover, Wyrd + wtsdk credential provisions). New Recent-decisions + Tried entries and three detail files capture the durable lessons (fleet Gitea build recipe, the vh-is-a-user package-write constraint, soong-lab deploy layout).
2.8 KiB
[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(+ aliasessurprised,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/dialsexposesvoice_emotion_presets; the FastAPI/docsdescription documents it; durable specdocs/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).