Files
esh-pfi-infrastructure/persistent-memory.d/2026-07-18-zonos-gateway-0.2.1-emotion-presets.md
T
vh abc8f0ceab memory: snapshot — soong-lab cutover + zonos 0.2.1 presets + fleet CI recipe + peer creds
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).
2026-07-18 16:40:49 -07:00

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 (+ 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).