qwen3-tts: deploy was using the -Base checkpoint, which sounds like
the right one ("supports voice cloning") but the upstream wrapper's
only synthesis path goes through generate_custom_voice. The -Base
variant doesn't expose that, so every request — including ones with
the wrapper's listed built-in voices like Ryan/Vivian — errored with
"does not support generate_custom_voice". The -CustomVoice variant
exposes both the cloning machinery and the preset voices, and is
what the wrapper actually needs.
The .env.example comments had the variant labels backward; fixed in
this commit. Live host already updated to -CustomVoice via direct
.env edit (model downloaded on container restart).
chatterbox README listed [whisper] and [breath] as supported tags —
those are in the base Chatterbox tag set but NOT in the Turbo set
that's actually loaded. Replaced with the canonical 9-tag list
verified against /api/model-info: laugh, chuckle, sigh, gasp, cough,
clear throat, sniff, groan, shush.
68 lines
3.6 KiB
Bash
68 lines
3.6 KiB
Bash
# Qwen3-TTS stack tunables. Copy to `.env` on irv-ml1 before deploying.
|
||
|
||
# ── build pin ────────────────────────────────────────────────────────
|
||
# SHA of groxaxo/Qwen3-TTS-Openai-Fastapi to build from. Bump + rebuild
|
||
# when you want upstream wrapper updates.
|
||
QWEN3_TTS_SHA=10323ce778c48a75dbda93d0a4891983fb371f58
|
||
|
||
# Local image tag — bump when you change build context to force a
|
||
# fresh layer build. v2 = first GPU build (target=production); v1
|
||
# was the accidental CPU-only image (last stage of upstream's
|
||
# multi-stage Dockerfile).
|
||
QWEN3_TTS_TAG=v2
|
||
|
||
# ── network ──────────────────────────────────────────────────────────
|
||
# Host port (container listens on 8880 internally).
|
||
QWEN3_TTS_PORT=8191
|
||
|
||
# Bind address. 0.0.0.0 exposes on all interfaces (incl. WG tunnel
|
||
# interface 10.100.79.3); 127.0.0.1 restricts to local-only.
|
||
QWEN3_TTS_BIND=0.0.0.0
|
||
|
||
# ── runtime ──────────────────────────────────────────────────────────
|
||
# Inference backend. `official` = default upstream; `optimized` =
|
||
# faster but slightly less robust; `vllm_omni` = vLLM-backed (needs
|
||
# more VRAM); `pytorch` = bare pytorch path.
|
||
QWEN3_TTS_BACKEND=official
|
||
|
||
# Model variant. Upstream publishes four checkpoints on HF:
|
||
# Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice — flagship, supports voice cloning + preset voices (RECOMMENDED)
|
||
# Qwen/Qwen3-TTS-12Hz-1.7B-Base — flagship, foundation only — REJECTS all synthesis through this wrapper
|
||
# Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice — lightweight cloning-capable variant
|
||
# Qwen/Qwen3-TTS-12Hz-0.6B-Base — lightweight foundation only
|
||
# 1.7B = ~6–8 GB VRAM bfloat16, best quality. 0.6B = ~2–3 GB.
|
||
#
|
||
# IMPORTANT: the wrapper's only synthesis code path goes through the
|
||
# voice cloning machinery. The -Base variants do NOT expose
|
||
# generate_custom_voice; they error with "does not support
|
||
# generate_custom_voice" on every request, no matter what voice you
|
||
# specify (built-ins like Ryan, Vivian etc. count as custom voices).
|
||
# Use -CustomVoice. The Base variant is foundation-model territory
|
||
# that needs a different harness to be useful.
|
||
# (This file had the labels backwards through 2026-04-27 — fixed
|
||
# after the 2026-04-27 voice-fleet bench surfaced the failure mode.)
|
||
QWEN3_TTS_MODEL=Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
|
||
|
||
# Warm the model on container start so the first synthesis request
|
||
# doesn't pay the load latency. Adds ~30 s to startup. Recommended.
|
||
QWEN3_TTS_WARMUP=true
|
||
|
||
# Concurrency cap on synthesis requests. Single GPU + 1.7B model →
|
||
# leave at 1 unless you're load-testing.
|
||
QWEN3_TTS_MAX_CONCURRENT=1
|
||
|
||
# Mount the gradio voice-studio UI at /voice-studio for browser-side
|
||
# voice cloning. Set "false" to disable for headless deployments.
|
||
QWEN3_TTS_VOICE_STUDIO=true
|
||
|
||
# ── persistent storage on the host ───────────────────────────────────
|
||
# HuggingFace cache (model weights, ~5 GB after first run). Bind-mounted
|
||
# so model state survives container recreate. Excluded from restic
|
||
# (regenerable from HF Hub).
|
||
QWEN3_TTS_CACHE_DIR=/worktank/qwen3-tts/cache
|
||
|
||
# Cloned voice profiles (meta.json + reference.wav per voice). Precious
|
||
# — cloned voices need the original reference audio to recreate.
|
||
# Included in restic.
|
||
QWEN3_TTS_VOICES_DIR=/worktank/qwen3-tts/voices
|