aboutsummaryrefslogtreecommitdiff
path: root/app/docs
diff options
context:
space:
mode:
Diffstat (limited to 'app/docs')
-rw-r--r--app/docs/backend-audiocpp.md23
1 files changed, 23 insertions, 0 deletions
diff --git a/app/docs/backend-audiocpp.md b/app/docs/backend-audiocpp.md
index 47115ef..353fe1b 100644
--- a/app/docs/backend-audiocpp.md
+++ b/app/docs/backend-audiocpp.md
@@ -98,6 +98,29 @@ python audiobook.py --backend audiocpp --model <id> --voice narrator \
--option emotion=neutral --option speed=1.1
```
+### Voice cloning transcripts (prompt_text)
+
+Some clone families require the **transcript of the reference audio** with
+every request (Qwen3-TTS's Base model clones in ICL mode and rejects each
+request without it: "voice clone ICL mode requires reference text"). The
+server supplies the transcript itself, from either of two places:
+
+- `prompt_text` in the configured `voice_dir`: one `<voice>|<transcript>` line
+ per wav (the setup wizard writes it from whisper transcriptions), or
+- `reference_text` on a `voice_presets` entry in `server.json`.
+
+An **empty or missing transcript makes every clone request for that voice
+fail**, so `audiobook.py` aborts on the first chunk with instructions instead
+of retrying. The setup warns loudly about any voice whose transcript came
+back empty — fill those in before converting (edit `prompt_text` by hand and
+restart nothing: the server re-reads it per request), or rerun the audio.cpp
+setup to re-transcribe. A re-transcription that fails keeps any existing
+non-empty transcript rather than overwriting it with a blank.
+
+If accurate transcripts are not available, cloning without one is possible
+per run with `--option x_vector_only_mode=true` (speaker-embedding-only
+cloning — no transcript needed, noticeably lower speaker similarity).
+
In the hub's **Generate Audiobooks** form the Model picker shows each entry's voice capability (`speaker` / `clone` / `design`). The Voice field is labelled **Built-in voice** on CustomVoice entries (listing the model's speakers) and **Voice to clone** everywhere else (listing the server's preset/voice_dir entries). Instructions are shown for every entry: required for `vdes` design models, an optional style/delivery instruction elsewhere — and on families without built-in speakers that read instructions, a description alone can define the voice, so leaving Voice empty is fine there. A Request options field accepts the same `KEY=VALUE` items as `--option`, and appears only for model families whose audio.cpp checkout spec declares request options (e.g. Neutts, Outetts, F5-TTS — not Qwen3-TTS or Higgs Audio). Editing Instructions or Request options shows a short dim hint with an example (for Instructions: `"Speak in a calm, soothing, and happy tone."`). Language is a static picker over the languages of audio.cpp's WebUI menus (it shows the same "Check model documentation for supported languages." hint while editing) and overrides the global setting for this run only.
The hub also works with an audio.cpp server that runs somewhere else (another checkout, another machine): set `AUDIOCPP_REMOTE_URL` in `app/converter/config.py` (or the TUI **Settings** → "audio.cpp remote URL") to its `host:port`. The hub probes that URL and, when it answers, offers an `audio.cpp [remote]` entry in **Generate Audiobooks…** whose models and voices are queried live (`GET /v1/models` and `GET /v1/audio/voices`) — alongside the managed `audio.cpp` entry, which keeps reading the local `server.json`. The remote URL defaults to `127.0.0.1:8080`, so a server started outside this tool on the local port is found automatically. On the CLI, pass `--api-url http://host:port` (and `--model`/`--voice` matching that server's config).