20 KiB
Voice Creator User Manual
This manual explains how to use TTS Voice Creator - Clone, Design, Deploy from the browser UI. It is written for day-to-day use: setting up engines, building a voice library, cloning and designing voices, rehearsing scripts, running a live voice agent, and connecting other apps.
Table Of Contents
- Quick start
- How the app is organized
- Engines and backend setup
- Voice library
- Clone a Voice
- Design a Voice
- Get Voices Online
- Try It Out
- Script Rehearser
- Conversation Playground
- Benchmark
- App Routing
- Connect Apps and APIs
- Settings
- Troubleshooting
- Recommended workflows
1. Quick Start
-
Start the Docker stack.
-
Open the app in a browser, usually:
http://localhost:7890or, from another machine:
http://<server-ip>:7890 -
Go to Setup -> Engines and confirm your STT, TTS, and LLM containers are detected.
-
Go to Setup -> Engines -> Text to Speech and click Use as TTS or the backend-specific button for the TTS engine you want.
-
Go to Speech to Text or Settings -> Connections and set your STT endpoint.
-
Go to Try It Out, fetch voices, select a voice, type text, and synthesize.
-
Build your voice library with Clone a Voice, Design a Voice, or Get Voices Online.
-
Use Script Rehearser for scripts or Conversation for a live voice agent.
2. How The App Is Organized
The left sidebar is the main map of the app.
Voices
- My Voices: Browse and manage all local voices.
- All voices: Every visible voice.
- Cloned: Voices created from reference audio.
- Designed: Voices created from a voice-design prompt.
- Favorites: Voices marked as favorites.
- Hidden: Voices hidden from normal pickers.
- Library tools: Bulk library maintenance.
Voice Creation
- Clone a Voice: Create a voice from an audio file, recording, URL, or extracted clip.
- Design a Voice: Create a new voice from a text description.
- Get Voices Online: Search and import online voice clips.
- Try It Out: Test TTS, STT, effects, voice style, and persona rewriting.
Script And Agent Workflows
- Script Rehearser: Import scripts, cast characters, assign voices, and rehearse scenes.
- Conversation: Talk to a live AI voice agent using STT -> LLM -> TTS.
- Benchmark: Measure speed and quality across voices and engines.
Setup And Integration
- Engines: See local Docker engines and connect them to the app.
- App Routing: Route incoming TTS requests from other apps to voices/backends.
- Connect Apps: Copy API examples for other tools.
- Settings: Configure URLs, storage, keys, logs, backup, and defaults.
3. Engines And Backend Setup
The app is a control surface. Most speech generation and recognition happens in separate local or cloud engines.
Engine Types
| Type | Used For | Examples |
|---|---|---|
| Text to Speech | Generate spoken audio | Qwen3-TTS, Fish-Speech, XTTS, VibeVoice, NVIDIA Magpie |
| Speech to Text | Transcribe microphone or uploaded audio | faster-whisper, Parakeet, WhisperX, Nemotron ASR |
| Language Model | Rewrite text, cast characters, run conversation agent | LiteLLM, llama.cpp, Ollama, vLLM |
Setup From Engines Page
- Open Setup -> Engines.
- Choose Text to Speech, Speech to Text, or Language Models.
- Look at the cards at the top. These are detected local Docker containers.
- If a card matches the engine you want, click its action button:
- Use as TTS
- Use as Voice Design
- Use as Custom Voice
- Use as Fish-Speech
- Use as VibeVoice
- If the engine is not detected, click Add Custom and enter the URL manually.
- Use Refresh after starting or restarting containers.
Common Local Ports
These are common local endpoints. Your stack may differ.
| Engine | Typical URL | Notes |
|---|---|---|
| Qwen3 Voice Clone/Base | http://host.docker.internal:8020 |
Best default for cloned voices |
| Qwen3 Voice Design | http://host.docker.internal:8021 |
Required for design prompts |
| Qwen3 Custom Voice | http://host.docker.internal:8022 |
Custom voice/tone-style backend |
| Qwen3 Streaming | http://host.docker.internal:8023 |
Lower latency streaming |
| faster-whisper | http://host.docker.internal:8010 |
STT transcription |
| NVIDIA Parakeet ASR | http://host.docker.internal:8090 or app card URL |
Fast STT |
| NVIDIA Magpie TTS | http://host.docker.internal:8091 |
Fixed-speaker TTS |
| VibeVoice | http://host.docker.internal:8027 |
Simple TTS backend |
| XTTS v2 | http://host.docker.internal:8005 |
OpenAI-compatible voice clone endpoint |
| LiteLLM | http://host.docker.internal:14000/v1 |
OpenAI-compatible LLM gateway |
| llama-swap | http://host.docker.internal:28080/v1 |
LLM routing gateway |
| Ollama | http://host.docker.internal:11434/v1 |
Local LLM endpoint |
Which Engines Make Sense Where?
| App Area | Good Engines |
|---|---|
| Clone a Voice | Qwen3 Voice Clone/Base, XTTS, Fish-Speech if configured |
| Design a Voice | Qwen3 Voice Design, Qwen3 Custom Voice |
| Try It Out | Any available TTS backend |
| Script Rehearser | Qwen3 Voice Clone/Base for cast voices; Voice Design for generating new cast voices; LLM for auto-casting |
| Conversation | Fast STT plus fast LLM plus fast/streaming TTS |
| Benchmark | Any backend you want to compare |
4. Voice Library
The voice library is the center of the app. A voice usually consists of:
- A reference audio file, usually WAV.
- A text transcript/reference prompt.
- Metadata such as language, gender, tags, rating, notes, and persona.
- Optional picture/avatar.
Browsing Voices
- Open My Voices.
- Use sidebar filters such as All voices, Cloned, Designed, Favorites, and Hidden.
- Use the search field to filter by name, tags, language, or metadata.
- Click a voice to inspect and edit it.
Voice Visibility
- Visible voices appear in normal pickers.
- Hidden voices are kept in the library but filtered out from most assignment/search fields.
- Use Hidden in the sidebar when you need to review or restore them.
Metadata
For each voice you can usually manage:
- Display name
- Language
- Gender
- Tags
- Favorite flag
- Hidden/visible state
- Notes
- Character persona
- Reference text
- Picture/avatar
Character Persona
A persona is a writing-style prompt attached to a voice. When enabled, the app sends your text through an LLM first so the generated speech sounds more like that character.
Example persona:
Warm but dry-humored older engineer. Speaks clearly, uses practical metaphors, and avoids dramatic language.
Use persona rewrite when:
- You want an assistant to stay in character.
- A script line needs a more natural phrasing for a voice.
- You want a voice to preserve a speaking style across different apps.
Avoid persona rewrite when:
- You need exact text output.
- You are generating legal, medical, or quoted text.
- You are benchmarking raw TTS speed.
5. Clone A Voice
Use Clone a Voice when you have an audio sample and want to create a reusable voice.
Good Source Audio
Best results come from audio that is:
- 5 to 30 seconds long.
- One speaker only.
- Clean and close-mic recorded.
- No music or loud background noise.
- Emotionally representative of the voice you want.
- Not heavily compressed or distorted.
Workflow
- Open Clone a Voice.
- Choose a source:
- Upload file
- Record microphone
- Paste URL
- Import from another source if available
- Use the waveform editor to trim to the cleanest section.
- Transcribe the clip or enter the reference text manually.
- Name the voice.
- Set language, tags, and notes.
- Click Save to Voice Library.
- Go to Try It Out and test it.
Tips
- Short clean clips beat long noisy clips.
- Trim out breaths, music, applause, and other speakers.
- Keep the transcript close to the actual words in the audio.
- Use consistent naming, for example
EN_F_Name_01orDE_M_Name_01.
6. Design A Voice
Use Design a Voice when you want a new voice from a description rather than a recorded speaker.
Workflow
- Open Design a Voice.
- Make sure the Voice Design backend is connected, usually Qwen3 Voice Design on port
8021. - Write a voice prompt.
- Generate a sample.
- Adjust the prompt and regenerate until it fits.
- Save the result to the voice library.
Prompt Template
A calm German male narrator in his late 40s, warm baritone, precise articulation, subtle smile, low breathiness, natural documentary pacing.
Useful prompt parts:
- Language/accent
- Age range
- Gender presentation
- Pitch/timbre
- Energy level
- Emotion
- Speaking pace
- Use case, such as narrator, villain, teacher, assistant
Tone And Style Control
Some Qwen3-style backends support a style or instruction field per request. Use that for line-level emotion, such as:
gentle reassurance, slower pace, quiet confidence
In Script Rehearser, tone can be set per line or character when the backend supports it.
7. Get Voices Online
Use Get Voices Online to find and import external voice clips.
General workflow:
- Search or paste a source URL.
- Preview the clip.
- Import it into the library.
- Clean up metadata.
- Test it in Try It Out.
Always review licensing and consent before using a voice outside personal testing.
8. Try It Out
Try It Out is the fastest place to test voices and backends.
Basic TTS Test
- Select a TTS backend.
- Click Fetch voices.
- Pick a voice from the searchable picker.
- Type text.
- Optional: add style instruction.
- Click synthesize/play.
Searchable Voice Picker
The voice picker lets you:
- Search by voice name.
- See avatar/picture when available.
- Select quickly without scrolling through hundreds of voices.
If hidden voices appear where they should not, check the voice visibility in My Voices -> Hidden.
Style Instruction
Use style instruction for delivery, not content.
Good:
quiet, serious, slightly slower, emotionally restrained
Less good:
change the sentence to be about pirates
STT To TTS
Some Try It Out views let you:
- Record or upload audio.
- Transcribe it with STT.
- Optionally clean/refine it with an LLM.
- Re-synthesize it with another voice.
9. Script Rehearser
Script Rehearser is for importing a screenplay or dialogue, assigning voices to characters, and rehearsing selected parts.
Main Phases
| Phase | Purpose |
|---|---|
| Library | Import, browse, or load scripts |
| Cast | Match characters to voices |
| Stage | Play, rehearse, select, hide, ignore, and edit lines |
| Summary | Review script/cast status |
| Import/Export | Move .reh files in and out |
Import A Script
Options include:
- Paste text manually.
- Upload
.txt,.md,.pdf,.fdx, or.osfwhen supported. - Use Browse scripts to browse IMSDb scripts.
- Paste an IMSDb or Scripts.com URL.
- Import a
.rehproject.
Browse Scripts
- Open Script Rehearser -> Library.
- Click Browse scripts.
- Search titles in the modal.
- Switch between thumbnail and list view.
- Click a title to fetch it.
- Click Parse & cast after it loads.
You can also paste a direct Scripts.com URL, for example:
https://www.scripts.com/script/the_pianist_72/2
Cast Characters
- Parse the script.
- Open Cast.
- Choose a TTS backend.
- Click Fetch voices.
- Assign voices manually, or use LLM-assisted matching:
- Match from local library
- Match from online voices when available
- Design new voices using Voice Design
- Use the searchable voice picker to find voices quickly.
- Add speaking-style notes for characters when needed.
Stage Playback
The Stage lets you:
- Play the whole script.
- Play from a selected line.
- Click a character/avatar play button for an individual line.
- Skip descriptions.
- Pre-synthesize lines for faster playback.
- Re-synthesize stale lines when tone/style changed.
- Save/export the rehearsal project.
Select Mode
Use Select in Stage when you want to work with only part of a script.
- Click Select to enter selection mode.
- Click lines to select or deselect them.
- Shift-click another line to select a range.
- Click Set range to make playback use that selected range.
- Use Ignore, Un-ignore, Hide, or Delete for bulk cleanup.
- Click Done when finished.
For actors, common navigation is usually by:
- Page number
- Scene heading
- Cue line
- Character entrance
- Act/scene number for stage plays
For this app, the cleanest practical workflow is: scene heading plus selected range. Example: "Rehearse from EXT. HARBOR - NIGHT through Jack's next line."
Hide vs Ignore vs Delete
| Action | Meaning |
|---|---|
| Ignore | Keep visible, but skip during playback/synthesis |
| Hide | Remove from normal view, but keep recoverable |
| Delete | Permanently remove from the project |
10. Conversation Playground
Conversation Playground is a live voice-agent pipeline:
Microphone -> STT -> LLM -> TTS -> Spoken answer
Basic Setup
- Pick an STT backend.
- Enter or select an LLM endpoint.
- Fetch/select an LLM model.
- Pick a TTS backend.
- Fetch/select a voice.
- Set the system prompt.
- Click the mic button to start live listening.
Hot Mic Mode
The mic button is now an on/off toggle.
- Click once: mic is active and keeps listening.
- Click again: mic turns off.
- While active, silence does not submit empty turns.
- Speech interrupts LLM/TTS processing and starts a new recording.
- The app automatically enables Auto-stop, Hands-free, and Live agent for this mode.
Live Agent Options
| Option | What It Does |
|---|---|
| Auto-stop | Sends speech after silence is detected |
| Hands-free | Re-arms the mic after the agent finishes |
| Live agent | Shorter silence and interruption delays |
Interrupting The Agent
With hot mic or Live agent active, you can speak while the agent is:
- Generating LLM text
- Synthesizing speech
- Playing speech
The current turn is aborted and the app begins recording the new utterance.
Good Conversation Settings
For fast live turn-taking:
- Use a fast STT backend such as Parakeet or faster-whisper on GPU.
- Use a small/fast LLM model for conversation.
- Use a low-latency TTS backend.
- Prefer streaming TTS if available.
- Keep the system prompt short.
11. Benchmark
Use Benchmark to compare voice/backend performance.
Typical use:
- Select backend.
- Select test text or sentence set.
- Run one voice or a batch.
- Compare latency, duration, and reliability.
Useful metrics:
- Time to first audio
- Total synthesis time
- Realtime factor
- Failures/timeouts
- Subjective quality notes
12. App Routing
App Routing lets other tools call one TTS endpoint while this app decides which voice/backend to use.
Use routing when:
- Multiple apps share the same TTS server.
- You want app-specific default voices.
- You want language-specific voices.
- You want before/after sounds for certain apps.
Typical workflow:
- Open App Routing.
- Add a client/app name.
- Pick a default voice.
- Choose backend if needed.
- Add language or voice-name rules.
- Test with the generated curl example.
13. Connect Apps And APIs
Open Connect Apps for ready-to-copy examples.
Common API patterns:
Generate Speech
curl -X POST http://localhost:7890/speak \
-H "Content-Type: application/json" \
-d '{"text":"Hello from Voice Creator","voice":"EN_F_Example"}' \
--output out.wav
Bind A Client To A Voice
curl -X PUT http://localhost:7890/speak/bindings/my-app \
-H "Content-Type: application/json" \
-d '{"voice":"EN_F_Example"}'
Use A Bound Voice
curl -X POST http://localhost:7890/speak \
-H "Content-Type: application/json" \
-H "X-Voice-Creator-Client-Id: my-app" \
-d '{"text":"Use the voice bound to this app."}' \
--output out.wav
MCP
The app includes an MCP endpoint. Use Connect Apps or Settings -> About for current connection examples.
14. Settings
Settings are grouped by task.
| Area | Use It For |
|---|---|
| General | App defaults and behavior |
| Connections | Backend URLs for TTS, STT, LLM, NVIDIA, VibeVoice, etc. |
| Playback | Audio playback defaults |
| Captures | Saved recordings and generated clips |
| Payloads | Advanced request payload settings |
| Storage | Voice directories and file handling |
| API Keys | Cloud provider keys |
| Backup | Export/import app settings and library metadata |
| Logs | Inspect recent app logs |
| About | Version, examples, MCP info |
15. Troubleshooting
Browser Microphone Does Not Work
Browsers require a secure context for microphone access.
Try one of these:
- Open the app at
http://localhost:7890on the same machine. - Use HTTPS.
- In Chrome, allow the local network origin as secure if needed.
- Check browser microphone permissions.
Voice Picker Shows Old Data
- Click Fetch voices again.
- Hard refresh the page.
- If the app is installed as a PWA, close and reopen it.
- Check that the selected TTS backend is correct.
Hidden Voices Appear
- Confirm the voice is actually marked hidden in My Voices -> Hidden.
- Fetch voices again.
- Hard refresh if the browser cached an older script.
Script Browser Looks Wrong
- Switch between thumbnail and list view.
- Refresh the catalogue.
- Hard refresh the page if the modal layout looks stale.
- Paste the direct IMSDb/Scripts.com URL instead of browsing.
Conversation Hears Nothing
- Confirm STT backend is running.
- Confirm browser mic permissions.
- Check Speech to Text engine status.
- Try the fake/manual text input to confirm LLM/TTS works.
- Turn hot mic off and on again.
Conversation Sends Empty Turns
Hot mic mode should ignore silence. If empty turns still happen:
- Make sure the latest page is loaded with a hard refresh.
- Use Auto-stop and Live agent together.
- Increase microphone input level if real speech is too quiet.
- Reduce background noise.
Agent Is Too Slow
Latency is the sum of STT, LLM, and TTS.
Improve it by:
- Using a faster STT engine.
- Using a smaller LLM model.
- Using streaming TTS.
- Keeping prompts short.
- Preloading models where possible.
- Avoiding huge conversation history.
TTS Fails For A Voice
- Confirm the voice exists in the active voice library.
- Confirm the backend supports that voice type.
- Fetch voices again.
- Check logs in Settings -> Logs.
- Try another backend to isolate whether the issue is voice data or engine support.
Service Worker Or Cache Issues
The app can be installed as a PWA and may cache UI files.
If UI changes do not appear:
- Hard refresh the page.
- Open DevTools and disable cache while reloading.
- Unregister the service worker for the app origin.
- Reopen the app.
16. Recommended Workflows
Build A Clean Voice Library
- Import or clone voices.
- Normalize names and tags.
- Mark favorites.
- Hide experiments and failed voices.
- Add persona prompts only to voices you want to use as characters.
- Benchmark your best voices.
Create A Script Rehearsal
- Import or browse a script.
- Parse and inspect characters.
- Use Cast to assign voices.
- Use LLM matching for a first pass.
- Manually fix important roles.
- Open Stage.
- Select a scene/range.
- Pre-synthesize the selected range.
- Rehearse with playback or Train mode.
- Save/export
.reh.
Build A Fast Voice Agent
- Use Parakeet or faster-whisper for STT.
- Use LiteLLM/llama-swap/Ollama with a small model.
- Use a fast TTS backend.
- Select a voice in Conversation.
- Keep the system prompt short.
- Turn on hot mic.
- Interrupt naturally by speaking.
Design Voices For A Cast
- Parse script.
- Open Cast.
- Let the LLM describe character souls/briefs.
- Use Voice Design for missing archetypes.
- Save successful designs to the library.
- Hide rejected experiments.
- Assign final voices to the cast.
Glossary
| Term | Meaning |
|---|---|
| Backend | A separate engine/server that performs TTS, STT, or LLM work |
| Voice clone | A reusable voice made from reference audio |
| Voice design | A voice generated from a text description |
| Persona | A character-writing prompt attached to a voice |
| STT | Speech to Text, transcription |
| TTS | Text to Speech, synthesis |
| LLM | Language model used for rewriting, matching, and conversation |
| Hot mic | Always-listening conversation mode toggled by the mic icon |
.reh |
Script Rehearser project export |