Free, offline AI voice studio for Windows — voice any text with cloned and built-in voices, and turn recordings into text with the speakers. Russian done right: numbers in their cases, stress marks, «ё» and homographs. 100% local, zero Python: one native .exe (Rust + C++/CUDA); every model and engine downloads with a button.
Speech Studio has three modes. Speech voices text: a line, a dialog with a voice per character, a podcast the director writes for you, or a whole book from EPUB, FB2, PDF or DOCX. Listening turns a recording, a video or a link into text with who said what and when, cuts it by its words, checks a voicing against the text it should say and makes library voices from its speakers. Live is a voice conversation with an AI agent connected over MCP: it says each phrase as soon as it writes it and hears you through the microphone.
Everything runs locally on your machine — no cloud, no subscription; your texts, recordings and voiceprints never leave your computer. If you want a voice your card can't run, the cloud voices of OpenRouter, Google Gemini, fal.ai and Runware are there too, each behind its own key and a confirmation before the first call; they are off by default.
It's a fully native app: no embeddable Python, no torch, no CUDA wheels. The whole studio is Rust + native C++/CUDA engines (GGUF/ONNX) in one process. Models, engines, the CUDA and VC++ runtimes and ffmpeg are downloaded by the app itself on first run, and a model another of the author's studios already has is taken from it instead of downloaded again. An NVIDIA GPU is what the app is built and tested for; see What runs where for the rest.
While Speech Studio is open it serves MCP at http://127.0.0.1:8797/mcp: an agent such as Claude Code, Claude Desktop, Cursor or Codex does everything the window does, through the same code — voices a text into a file in one call, makes and edits projects block by block, casts voices to characters, designs a voice from a description, transcribes and checks recordings, exports audiobooks with chapters and subtitles. Settings, Agent (MCP) shows whether an agent is connected and what to paste into the client. The one thing an agent cannot do is turn the microphone on: Live, a recording and the microphone test start only on your own click or key.
- Install the studio from the latest release and start it.
- Connect to its MCP server:
Other clients:
claude mcp add --transport http speech-studio http://127.0.0.1:8797/mcp
{ "mcpServers": { "speech-studio": { "type": "streamable-http", "url": "http://127.0.0.1:8797/mcp" } } } - Read the skill the server serves (resource
studio://skill), the same text as docs/mcp-skill.md, and start with the toolstudio_status.
The studio also speaks the OpenAI audio API on the same port — POST /v1/audio/speech, POST /v1/audio/transcriptions, GET /v1/models — so tools written for OpenAI voice and transcribe through it, with a library voice's name as voice. llms.txt says the same for tools that look for it. Only programs on this computer may connect.
- An audiobook — drop an EPUB or FB2: chapters, characters with their own voices, an M4B with chapters and cover, ACX loudness checked.
- A podcast or a dialog — the director writes a podcast on a topic for two or three speakers, or paste lines like «Anna: …»; the timeline shows every overlap.
- A voice-over for a video — voice a script or subtitles into their cues, lay music and sounds under it in the track editor, export at the video's loudness.
- A transcript of an interview or a lecture — who said what and when, word times, subtitles by broadcasters' rules, the recording cut by its text.
- A check of a dubbing — lay the script over the recording and see every word said wrong or skipped.
- Your own voice library — record or import voices, clean them, make voices from the speakers of a recording.
- A voice for your AI agent — talk with Claude Code or any MCP agent in Live, or let it voice and transcribe files through MCP or the OpenAI-compatible API.
Examples of every engine and voice, with Russian stress before and after, are on the project page.
| Mode | What it does |
|---|---|
| 🔊 Speech | Text, dialog, podcast or book → voiced blocks with takes, checked by ear, exported as WAV, FLAC, MP3, OGG, M4A or M4B with chapters, subtitles and synced text |
| 👂 Listening | Audio, video or a link → a transcript with speakers and word times, a karaoke player, cut-by-text, export to SRT, VTT, ASS, TXT or JSON, a check against a reference text |
| 🎙️ Live | A voice conversation with an AI agent: the agent connected over MCP speaks each phrase as it writes it, you answer into the microphone and are recognised phrase by phrase, a phrase said over it stops it; only you turn the microphone on, pause with M or Ctrl+Shift+Space, a widget over every window |
Voices and engines
-
Five local engines — Higgs Audio v3 (cloning, emotions and sounds), Fish Audio Drama 3 (the strongest open voice; the whole model on a 24 GB card, from 6 GB with its experts in RAM), Supertonic 3 (fast, ten built-in voices), Qwen3-TTS 1.7B (nine built-in voices, cloning, an instruction per block) and Qwen3-TTS with Russian stress, siriusfreak's LoRA applied at run time.
-
Engine per character and per block over the project's own; an engine that can't speak the voice in use says which of its voices it takes.
-
Voice library — a voice pack in one click, 743 Russian voices from the cloud catalogue, recording from the microphone, import of files and ZIPs, photo, gender, age, language, tags and consent; the reference transcript is recognised once and kept.
-
Clean a reference — Mel-Band Roformer takes the voice from music, DPDFNet takes noise away with a strength control so speech stays alive; the original is kept.
-
Best piece of a reference — windows at pauses between recognised words, each with its length, signal-to-noise, clipping and longest pause.
-
Voice by description — Qwen3-TTS VoiceDesign makes a voice from "an elderly woman with a soft, slightly hoarse voice…": hear several candidates, keep one in the library.
-
Cloud voices — OpenRouter, Google Gemini (parallel requests or Batch at half the price), fal.ai and Runware, each behind its own key and a confirmation before the first call.
Text that sounds right
-
Russian normaliser — numbers in the right case and gender, dates, times, money, units, Roman numerals, Latin brand names and abbreviations.
-
Stress, «ё» and homographs by RUAccent — the large homograph model (big_poetry in int8, the same choices as fp32) picks замо́к or за́мок by the sentence; doubtful ones are highlighted for you, your own
+marks stay. -
Pronunciation dictionary — replace, regex and phonemes, scoped to the project, a language, a voice or an engine, Balabolka
.rex/.dic/.bxdimport, and a check by ear right from the dictionary. -
SpeechKit-compatible markup —
+stress,sil<[300]>and[pause 500ms]pauses,[rate:1.2]tempo,**accent**; what an engine ignores is marked, never silently dropped. -
More of the text read right — an SSML subset, prosody hints coloured word by word, phone numbers, e-mail addresses and codes, a passage in another language in the same voice, and a check of the script before voicing.
Projects
-
Text as the timeline — blocks with speakers, takes (up to five), stale tracking, undo and redo, drag to reorder, search and replace with regex, notes and markers.
-
Quality control — every take recognised back and compared word by word, plus checks for clipping, silence, cut-off, a click at the end, a repeated phrase, a long tail, music or noise instead of speech, and similarity to the reference voice; several takes with the best one picked.
-
Dialog and podcasts —
Anna:and[Anna]lines become characters, the director writes a podcast on a topic for N speakers, negative pauses make interruptions, and the timeline shows every overlap with cut, join or keep. -
Audiobooks — EPUB, FB2, PDF, DOCX, HTML, Markdown and TXT with chapter preview, cast by the director, M4B with chapters and cover, parts for long books, ACX loudness check.
-
Subtitles as a project — SRT, VTT and ASS lines voiced into their cues: the tempo raised ahead, a retry when a take doesn't fit, then stretching and borrowing the silence before the line.
-
Export check — blocks missing, stale, failed, with a changed file or too long for their cue are listed before export; only the length may be allowed through.
-
Loudness — video (−14 LUFS), podcast (−16 LUFS) and ACX presets with a true-peak limiter, room tone and breaths between blocks.
-
Project file —
.speechprojwith text, voices and audio carries a project to another computer. -
Montage — a track editor under the text: move, trim, fade and level each clip, music and sound tracks from files or folders, or a song made right there in YuE2, MiniMax Music3 or ACE-Step Studio.
-
Export for every use — a file per chapter, a track per character in a ZIP, a CSV table of lines, voice effects (radio, phone, loudspeaker), even loudness of pieces, sample rate and bit depth, file name templates, a SHA-256 manifest and a note on how it was made.
-
Compare and approve — A/B of takes, a blind comparison of engines on the same text, approved blocks a re-voicing leaves alone, a quality traffic light and a project report.
-
Books and plays — direct speech apart from the author's, a cast of characters with voices picked for them, footnotes cleaned out, the book's names into the dictionary, a project updated from a corrected book without losing what is voiced, and an HTML player of the book.
Listening
-
Parakeet-TDT and Nemotron 3.5 (28 languages with punctuation) on transcribe.cpp, or Whisper, up to eight speakers by Nemotron 3 Diarization, a long recording cut at pauses by Silero VAD v6, noise removed by DPDFNet, music removed by Roformer.
-
A hint for Whisper — topic and spellings, plus the corrections you add.
-
Batch — drop several files at once; each becomes a recording queued for recognition.
-
Lay a known text over the recording — the reference text takes the time of each heard word, sentence by sentence.
-
Voices from speakers — a library voice from each speaker's cleanest words.
-
As you speak — recognition from the microphone phrase by phrase, a watched folder recognised in the background, quick recognition without the editor.
-
The right model by itself — with the language on Auto, VoxLingua107 finds it and the recording goes to a recogniser that knows it; the chosen model downloads the first time it is used.
-
Subtitles by broadcasters' rules (Netflix, BBC and others), who talks how much, numbers as digits in export.
Live
- A conversation by voice — the agent connected over MCP says each phrase as soon as it writes it; you answer into the microphone and are recognised phrase by phrase; a phrase of two words or more said over the agent stops it, while a cough, a laugh or an «uh-huh» does not; a typed line reaches the agent like a spoken one.
- Changes on the fly — the agent's voice, the recogniser, the language and the microphone can be changed in the middle of a conversation, by you or by the agent at your request: the recogniser switches in place, a new microphone or language restarts the microphone, and the window says «Loading the voice…» while a new voice's engine loads.
- A natural pace — an agent's sentence is said whole up to 300 characters, a pause an engine leaves inside a phrase is heard at most 0.6 s long, and each phrase is heard once.
- Only you turn the microphone on — Live, a Listening recording, a voice recording and the microphone test start only on your own click or key; an agent has no tool that turns the microphone on, and the window does not take its clicks on those buttons. The top bar shows «Microphone on», what it is on for and for how long, with a cross that turns it off; with no studio window open for five seconds the microphone turns off by itself.
- Microphone and sound — pause with M or Ctrl+Shift+Space from any window (the agent falls silent and does not hear you; hold to talk), the cross ends the conversation and what the agent is saying, level meters, hearing yourself back, a speaker test and the agent's volume.
- Five looks and a widget — aura, wave, bars, radial and matrix, and a small widget over every window; Ctrl+3 opens Live.
- Measured — your phrase is text 0.64–0.74 s after you stop speaking (Parakeet on an RTX 4090), and the first sound of the answer comes 15 ms to 1 s after the agent writes it, by engine.
Everywhere
- OpenAI-compatible API, MCP with window control for agents, an assistant panel on an OpenRouter model with the same tools.
- Diagnostics — graphics card, driver, CUDA, libraries, logs, a bug-report package without keys.
- The whole app in six languages, light and dark theme, auto-update, fully portable.
- First run asks only what you want — voices, recognition and extras; engines, libraries and the build for your card come with them, one line each with its size.
- Command palette (Ctrl+K), your own hotkeys, a simple mode and a «?» hint on every control.
On one computer: RTX 4090 (24 GB) under Windows 11, Speech Studio as it installs.
Voicing — Speech Studio 0.2.0, the same 17-second Russian text, the second run of each engine (its model loaded); first sound is the time until audio starts in the window, video memory the peak while speaking.
| Engine | Faster than real time | First sound | Streaming | Download | Video memory |
|---|---|---|---|---|---|
| Supertonic 3 | 168× | 103 ms | by phrase | 0.1 GB | 1.0 GB |
| Qwen3-TTS | 12× | 19 ms | as it speaks | 2.2 GB | 3.1 GB |
| Qwen3-TTS + ru stress LoRA | 10× | 26 ms | as it speaks | 2.3 GB | 3.5 GB |
| Fish Audio Drama 3 | 7.0× | 326 ms | as it speaks | 21.4 GB | 21.9 GB |
| Higgs Audio v3 | 2.3× | 1.0 s | as it speaks | 5.3 GB | 18.1 GB |
Recognition — Speech Studio 0.2.1 (Whisper — 0.2.4), one 5-minute Russian recording of one speaker (299.7 s) in Listening without telling speakers apart, the model loading included; the model leaves video memory when the job ends.
| Model | On the card | On the processor | Languages | Download | Video memory |
|---|---|---|---|---|---|
| Parakeet TDT v3 | 96× (3.1 s) | 33× (9.2 s) | 25 | 0.7 GB | 1.2 GB |
| Parakeet Ultra | 73× (4.1 s) | 33× (9.2 s) | 25 | 0.7 GB | 1.0 GB |
| Nemotron 3.5 | 73× (4.1 s) | 29× (10.3 s) | 28 | 0.7 GB | 1.0 GB |
| Whisper large-v3-turbo | 19× (15.4 s) | 2.2× (134 s) | 99 | 1.6 GB | 1.6 GB |
Live — one turn of a conversation.
| Step | Time |
|---|---|
| Your phrase as text after you stop speaking (Parakeet on the card, the pause that ends a phrase included) | 0.64–0.74 s |
| The agent writes its answer (Claude Sonnet) | 2.0–3.9 s |
| First sound of the answer (by engine, see Voicing) | 15 ms – 1.0 s |
The start screen — a text, a book, subtitles or a podcast script becomes a project:
Listening — a transcript with speakers and word times, a karaoke player, cut-by-text and export:
Live — a voice conversation with an AI agent: what you said and what it answers, five looks, pause and end the conversation:
- OS: Windows 10 / 11 (x64); Linux x86-64 as an experimental build
- GPU: NVIDIA with 8 GB of VRAM or more and a recent driver; Drama 3 runs whole on 24 GB; from 6 GB its experts (18 GB) live in RAM, which then needs 32 GB, and the VRAM it takes is set in Settings (Auto or 5 to 24 GB). Without NVIDIA only the CPU and cloud paths of What runs where run, and that setup is not tested
- WebView2 — preinstalled on Windows 11; on Windows 10 the installer fetches it
- Disk: about 9 GB for the default models, engines and runtime, plus what you add (Drama 3 is 23 GB)
On an NVIDIA machine the only thing you install by hand is a recent NVIDIA driver.
- Download the portable build from Releases and unzip anywhere (or install via
-setup.exe/.msi). - Run
Speech Studio.exe. - On the First run panel press Download selected — the app fetches models, engines and runtime once.
- Paste a text and press Create, or switch to Listening and drop a recording.
Everything downloads and lives inside the app folder: models, caches, voices and projects go nowhere else.
What changed and when is in CHANGELOG.md, and the sparkles button at the top of the app shows it. Rules for contributors and coding agents: AGENTS.md.
The first-run panel fetches all of this with a button. Behind a proxy, or where Hugging Face is blocked, set the proxy in Settings → Network. You can also download the direct files yourself, put them where the last column says, counted from the app folder, and press Import from folder; archive components the app downloads itself. Every file is checked against its pinned SHA-256 before it is used. Sizes and hashes come from the app's manifest, crates/speech-server/src/setup.rs, and this table is checked against it.
| Component | Need | Files (direct links) | Size | Put it in |
|---|---|---|---|---|
| Higgs Audio v3 Q8_0 | required | q8_0.gguf → models\higgs-q8_0\q8_0.ggufconfig.json → models\higgs-q8_0\config.jsonchat_template.jinja → models\higgs-q8_0\chat_template.jinjatokenizer.json → models\higgs-q8_0\tokenizer.jsontokenizer_config.json → models\higgs-q8_0\tokenizer_config.jsonhiggs_audio_v2_tokenizer_config.json → models\higgs-q8_0\higgs_audio_v2_tokenizer_config.json |
5.5 GB | as is, to the path after the arrow |
| audiocpp_engine.dll (Higgs engine) | required | audiocpp_engine.dll → models\higgs-engine\audiocpp_engine.dll |
129 MB | as is, to the path after the arrow |
| Gemma-4 12B QAT q4_0 + vision | optional | gemma-4-12b-it-qat-q4_0.gguf → models\mt\gemma-4-12b-it-qat-q4_0.ggufmmproj-gemma-4-12b-it-qat-q4_0.gguf → models\mt\mmproj-gemma-4-12b-it-qat-q4_0.gguf |
7.2 GB | as is, to the path after the arrow |
| Gemma-4 12B Q5_K_M + vision | optional | gemma-4-12b-it-Q5_K_M.gguf → models\mt-q5_0\gemma-4-12b-it-Q5_K_M.ggufmmproj-F16.gguf → models\mt-q5_0\mmproj-F16.gguf |
8.6 GB | as is, to the path after the arrow |
| Gemma-4 12B Q6_K + vision | optional | gemma-4-12b-it-Q6_K.gguf → models\mt-q6_k\gemma-4-12b-it-Q6_K.ggufmmproj-F16.gguf → models\mt-q6_k\mmproj-F16.gguf |
10.0 GB | as is, to the path after the arrow |
| Gemma-4 12B Q8_0 + vision | optional | gemma-4-12b-it-Q8_0.gguf → models\mt-q8_0\gemma-4-12b-it-Q8_0.ggufmmproj-F16.gguf → models\mt-q8_0\mmproj-F16.gguf |
12.8 GB | as is, to the path after the arrow |
| Parakeet-TDT 0.6B v3 Q8_0 (transcribe.cpp) | required | parakeet-tdt-0.6b-v3-Q8_0.gguf → models\asr-gguf-parakeet-v3\parakeet-tdt-0.6b-v3-Q8_0.gguf |
740 MB | as is, to the path after the arrow |
| Higgs Audio v3 Q6_K | optional | q6_k.gguf → models\higgs-q6_k\q6_k.ggufconfig.json → models\higgs-q6_k\config.jsonchat_template.jinja → models\higgs-q6_k\chat_template.jinjatokenizer.json → models\higgs-q6_k\tokenizer.jsontokenizer_config.json → models\higgs-q6_k\tokenizer_config.jsonhiggs_audio_v2_tokenizer_config.json → models\higgs-q6_k\higgs_audio_v2_tokenizer_config.json |
5.0 GB | as is, to the path after the arrow |
| Higgs Audio v3 Q4_K_M | optional | q4_k_m.gguf → models\higgs-q4_k_m\q4_k_m.ggufconfig.json → models\higgs-q4_k_m\config.jsonchat_template.jinja → models\higgs-q4_k_m\chat_template.jinjatokenizer.json → models\higgs-q4_k_m\tokenizer.jsontokenizer_config.json → models\higgs-q4_k_m\tokenizer_config.jsonhiggs_audio_v2_tokenizer_config.json → models\higgs-q4_k_m\higgs_audio_v2_tokenizer_config.json |
4.1 GB | as is, to the path after the arrow |
| Fish Audio Drama 3 Q4 + drama_engine (6 GB+ GPU, 32 GB RAM under 24 GB) | optional | .gitattributes → models\drama3\.gitattributesLICENSE → models\drama3\LICENSENOTICE → models\drama3\NOTICEREADME.md → models\drama3\README.mdcodec.safetensors → models\drama3\codec.safetensorsdrama.json → models\drama3\drama.jsonglobals.safetensors → models\drama3\globals.safetensorslayer00.safetensors → models\drama3\layer00.safetensorslayer01.safetensors → models\drama3\layer01.safetensorslayer02.safetensors → models\drama3\layer02.safetensorslayer03.safetensors → models\drama3\layer03.safetensorslayer04.safetensors → models\drama3\layer04.safetensorslayer05.safetensors → models\drama3\layer05.safetensorslayer06.safetensors → models\drama3\layer06.safetensorslayer07.safetensors → models\drama3\layer07.safetensorslayer08.safetensors → models\drama3\layer08.safetensorslayer09.safetensors → models\drama3\layer09.safetensorslayer10.safetensors → models\drama3\layer10.safetensorslayer11.safetensors → models\drama3\layer11.safetensorslayer12.safetensors → models\drama3\layer12.safetensorslayer13.safetensors → models\drama3\layer13.safetensorslayer14.safetensors → models\drama3\layer14.safetensorslayer15.safetensors → models\drama3\layer15.safetensorslayer16.safetensors → models\drama3\layer16.safetensorslayer17.safetensors → models\drama3\layer17.safetensorslayer18.safetensors → models\drama3\layer18.safetensorslayer19.safetensors → models\drama3\layer19.safetensorslayer20.safetensors → models\drama3\layer20.safetensorslayer21.safetensors → models\drama3\layer21.safetensorslayer22.safetensors → models\drama3\layer22.safetensorslayer23.safetensors → models\drama3\layer23.safetensorslayer24.safetensors → models\drama3\layer24.safetensorslayer25.safetensors → models\drama3\layer25.safetensorslayer26.safetensors → models\drama3\layer26.safetensorslayer27.safetensors → models\drama3\layer27.safetensorslayer28.safetensors → models\drama3\layer28.safetensorslayer29.safetensors → models\drama3\layer29.safetensorslayer30.safetensors → models\drama3\layer30.safetensorslayer31.safetensors → models\drama3\layer31.safetensorslayer32.safetensors → models\drama3\layer32.safetensorslayer33.safetensors → models\drama3\layer33.safetensorslayer34.safetensors → models\drama3\layer34.safetensorslayer35.safetensors → models\drama3\layer35.safetensorslayer36.safetensors → models\drama3\layer36.safetensorslayer37.safetensors → models\drama3\layer37.safetensorslayer38.safetensors → models\drama3\layer38.safetensorslayer39.safetensors → models\drama3\layer39.safetensorstokenizer.json → models\drama3\tokenizer.jsontower.safetensors → models\drama3\tower.safetensorsdrama_engine.dll → models\drama-engine\drama_engine.dll |
23.0 GB | as is, to the path after the arrow |
| Supertonic 3 int8 | optional | LICENSE → models\supertonic3\LICENSEduration_predictor.onnx → models\supertonic3\onnx\duration_predictor.onnxtext_encoder.onnx → models\supertonic3\onnx\text_encoder.onnxvector_estimator.onnx → models\supertonic3\onnx\vector_estimator.onnxvocoder.onnx → models\supertonic3\onnx\vocoder.onnxtts.json → models\supertonic3\onnx\tts.jsonunicode_indexer.json → models\supertonic3\onnx\unicode_indexer.jsonF1.json → models\supertonic3\voice_styles\F1.jsonF2.json → models\supertonic3\voice_styles\F2.jsonF3.json → models\supertonic3\voice_styles\F3.jsonF4.json → models\supertonic3\voice_styles\F4.jsonF5.json → models\supertonic3\voice_styles\F5.jsonM1.json → models\supertonic3\voice_styles\M1.jsonM2.json → models\supertonic3\voice_styles\M2.jsonM3.json → models\supertonic3\voice_styles\M3.jsonM4.json → models\supertonic3\voice_styles\M4.jsonM5.json → models\supertonic3\voice_styles\M5.json |
108 MB | as is, to the path after the arrow |
| Qwen3-TTS engine (qwen.dll) and codec | optional | qwen-tokenizer-12hz-Q8_0.gguf → models\qwen3-tts\qwen-tokenizer-12hz-Q8_0.ggufqwen.dll → models\qwen3-tts\qwen.dllggml.dll → models\qwen3-tts\ggml.dllggml-base.dll → models\qwen3-tts\ggml-base.dllggml-cpu.dll → models\qwen3-tts\ggml-cpu.dllggml-cuda.dll → models\qwen3-tts\ggml-cuda.dll |
434 MB | as is, to the path after the arrow |
| Qwen3-TTS 1.7B Q4_K_M (CustomVoice + Base) | optional | qwen-talker-1.7b-customvoice-Q4_K_M.gguf → models\qwen3-tts\qwen-talker-1.7b-customvoice-Q4_K_M.ggufqwen-talker-1.7b-base-Q4_K_M.gguf → models\qwen3-tts\qwen-talker-1.7b-base-Q4_K_M.gguf |
2.4 GB | as is, to the path after the arrow |
| Qwen3-TTS 1.7B Q8_0 (CustomVoice + Base) | optional | qwen-talker-1.7b-customvoice-Q8_0.gguf → models\qwen3-tts\qwen-talker-1.7b-customvoice-Q8_0.ggufqwen-talker-1.7b-base-Q8_0.gguf → models\qwen3-tts\qwen-talker-1.7b-base-Q8_0.gguf |
4.1 GB | as is, to the path after the arrow |
| Qwen3-TTS VoiceDesign Q4_K_M | optional | qwen-talker-1.7b-voicedesign-Q4_K_M.gguf → models\qwen3-tts\qwen-talker-1.7b-voicedesign-Q4_K_M.gguf |
1.2 GB | as is, to the path after the arrow |
| Qwen3-TTS VoiceDesign Q8_0 | optional | qwen-talker-1.7b-voicedesign-Q8_0.gguf → models\qwen3-tts\qwen-talker-1.7b-voicedesign-Q8_0.gguf |
2.0 GB | as is, to the path after the arrow |
| Qwen3-TTS Russian stress LoRA | optional | adapter.safetensors → models\qwen3-tts\qwen-talker-1.7b-base-ru-stress-lora.safetensors |
35 MB | as is, to the path after the arrow |
| Parakeet Ultra 0.6B Q8_0 (Moondream, transcribe.cpp) | optional | parakeet-ultra-Q8_0.gguf → models\asr-gguf-parakeet-ultra\parakeet-ultra-Q8_0.gguf |
740 MB | as is, to the path after the arrow |
| transcribe.cpp engine (CUDA) | required | transcribe_engine.dll → models\transcribe-engine\transcribe_engine.dll |
145 MB | as is, to the path after the arrow |
| transcribe.cpp engine (CPU) | optional | transcribe_engine-cpu.dll → models\transcribe-engine-cpu\transcribe_engine.dll |
4 MB | as is, to the path after the arrow |
| Nemotron 3.5 ASR 0.6B Q8_0 (NVIDIA) | optional | nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf → models\asr-gguf-nemotron\nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf |
751 MB | as is, to the path after the arrow |
| Whisper-Faster (faster-whisper standalone) | optional | Whisper-Faster_r192.3_windows.zip | 88 MB | unzip the files, without subfolders, into tools\whisper\ |
| Whisper CUDA (cuBLAS 11, cuDNN 8) | optional | libcublas-windows-x86_64-11.11.3.6-archive.zip cudnn-windows-x86_64-8.9.7.29_cuda11-archive.zip |
1.1 GB | take every .dll of the archive into tools\whisper\ |
| Whisper tiny | optional | model.bin → models\whisper\faster-whisper-tiny\model.binconfig.json → models\whisper\faster-whisper-tiny\config.jsontokenizer.json → models\whisper\faster-whisper-tiny\tokenizer.jsonvocabulary.txt → models\whisper\faster-whisper-tiny\vocabulary.txt |
78 MB | as is, to the path after the arrow |
| Whisper base | optional | model.bin → models\whisper\faster-whisper-base\model.binconfig.json → models\whisper\faster-whisper-base\config.jsontokenizer.json → models\whisper\faster-whisper-base\tokenizer.jsonvocabulary.txt → models\whisper\faster-whisper-base\vocabulary.txt |
148 MB | as is, to the path after the arrow |
| Whisper small | optional | model.bin → models\whisper\faster-whisper-small\model.binconfig.json → models\whisper\faster-whisper-small\config.jsontokenizer.json → models\whisper\faster-whisper-small\tokenizer.jsonvocabulary.txt → models\whisper\faster-whisper-small\vocabulary.txt |
486 MB | as is, to the path after the arrow |
| Whisper medium | optional | model.bin → models\whisper\faster-whisper-medium\model.binconfig.json → models\whisper\faster-whisper-medium\config.jsontokenizer.json → models\whisper\faster-whisper-medium\tokenizer.jsonvocabulary.txt → models\whisper\faster-whisper-medium\vocabulary.txt |
1.5 GB | as is, to the path after the arrow |
| Whisper large-v3 | optional | model.bin → models\whisper\faster-whisper-large-v3\model.binconfig.json → models\whisper\faster-whisper-large-v3\config.jsonpreprocessor_config.json → models\whisper\faster-whisper-large-v3\preprocessor_config.jsontokenizer.json → models\whisper\faster-whisper-large-v3\tokenizer.jsonvocabulary.json → models\whisper\faster-whisper-large-v3\vocabulary.json |
3.1 GB | as is, to the path after the arrow |
| Whisper large-v3-turbo | optional | model.bin → models\whisper\faster-whisper-large-v3-turbo\model.binconfig.json → models\whisper\faster-whisper-large-v3-turbo\config.jsonpreprocessor_config.json → models\whisper\faster-whisper-large-v3-turbo\preprocessor_config.jsontokenizer.json → models\whisper\faster-whisper-large-v3-turbo\tokenizer.jsonvocabulary.json → models\whisper\faster-whisper-large-v3-turbo\vocabulary.json |
1.6 GB | as is, to the path after the arrow |
| Nemotron 3 Diarization | recommended | nemotron3_diar_v3.onnx → models\nemotron-diar\nemotron3_diar_v3.onnxLICENSE → models\nemotron-diar\LICENSE |
401 MB | as is, to the path after the arrow |
| Mel-Band Roformer voc_fv6 Q8_0 | recommended | voc_fv6-Q8_0.gguf → models\bsroformer\voc_fv6-Q8_0.gguf |
252 MB | as is, to the path after the arrow |
| Mel-Band Roformer voc_fv6 Q5_0 | optional | voc_fv6-Q5_0.gguf → models\bsroformer\voc_fv6-Q5_0.gguf |
167 MB | as is, to the path after the arrow |
| Mel-Band Roformer voc_fv6 Q4_0 | optional | voc_fv6-Q4_0.gguf → models\bsroformer\voc_fv6-Q4_0.gguf |
139 MB | as is, to the path after the arrow |
| WeSpeaker ResNet34-LM (voice similarity) | recommended | voxceleb_resnet34_LM.onnx → models\faces\wespeaker\voxceleb_resnet34_LM.onnx |
27 MB | as is, to the path after the arrow |
| RUAccent (stress, «ё», homographs) | recommended | model.onnx → models\ruaccent\nn\nn_accent\model.onnxconfig.json → models\ruaccent\nn\nn_accent\config.jsonvocab.txt → models\ruaccent\nn\nn_accent\vocab.txtmodel.onnx → models\ruaccent\nn\nn_omograph\tiny2\model.onnxtokenizer.json → models\ruaccent\nn\nn_omograph\tiny2\tokenizer.jsonaccents.json.gz → models\ruaccent\dictionary\accents.json.gzomographs.json.gz → models\ruaccent\dictionary\omographs.json.gzyo_words.json.gz → models\ruaccent\dictionary\yo_words.json.gzyo_homographs.json.gz → models\ruaccent\dictionary\yo_homographs.json.gz |
34 MB | as is, to the path after the arrow |
| RUAccent big_poetry homographs int8 | optional | model.onnx → models\ruaccent\nn\nn_omograph\big_poetry\model.onnxtokenizer.json → models\ruaccent\nn\nn_omograph\big_poetry\tokenizer.json |
185 MB | as is, to the path after the arrow |
| Silero VAD v6.2 | recommended | silero-vad-v6.2-F32.gguf → models\silero-vad\silero-vad-v6.2-F32.gguf |
1 MB | as is, to the path after the arrow |
| VoxLingua107 language identification Q8_0 | required | lang-id-voxlingua107-ecapa-Q8_0.gguf → models\langid-voxlingua107\lang-id-voxlingua107-ecapa-Q8_0.gguf |
27 MB | as is, to the path after the arrow |
| DPDFNet 48 kHz (noise suppression) | recommended | dpdfnet2_48khz_hr.onnx → models\dpdfnet\dpdfnet2_48khz_hr.onnx |
10 MB | as is, to the path after the arrow |
| BSRoformer.cpp (CUDA) | recommended | BSRoformer-windows-cuda-13.1.0.zip | 165 MB | unzip the files, without subfolders, into tools\bsroformer\ |
| BSRoformer.cpp (CPU) | optional | BSRoformer-windows-x64-msvc.zip | 671 KB | unzip the files, without subfolders, into tools\bsroformer-cpu\ |
| llama.cpp server (CUDA) | optional | llama-b11146-bin-win-cuda-13.4-x64.zip | 150 MB | unzip the files, without subfolders, into tools\llama\ |
| ONNX Runtime | required | onnxruntime-win-x64-1.28.2.zip | 79 MB | unzip with its folder tree into models\runtime\ |
| ONNX Runtime GPU (CUDA) | recommended | onnxruntime-win-x64-gpu_cuda13-1.28.2.zip | 366 MB | unzip with its folder tree into models\runtime\ |
| FFmpeg (static build) | required | ffmpeg-N-126342-gf88b741dbf-win64-gpl.zip | 171 MB | take ffmpeg.exe and ffprobe.exe from the archive into tools\ffmpeg\ |
| yt-dlp + deno | optional | yt-dlp.exe → tools\yt-dlp\yt-dlp.exedeno-x86_64-pc-windows-msvc.zip |
60 MB | as is, to the path after the arrow unzip the files, without subfolders, into tools\yt-dlp\ |
| CUDA runtime (cudart, cuBLAS, cuFFT) | required | nvidia_cuda_runtime-13.4.92-py3-none-win_amd64.whl nvidia_cublas-13.8.0.4-py3-none-win_amd64.whl libcufft-windows-x86_64-12.4.0.43-archive.zip |
586 MB | take every .dll of the archive into models\higgs-engine\ |
| cuDNN 9 | recommended | nvidia_cudnn_cu13-9.27.0.42-py3-none-win_amd64.whl | 436 MB | take every .dll of the archive into models\higgs-engine\ |
| Stage | Engine | NVIDIA GPU | CPU | Cloud |
|---|---|---|---|---|
| Voice and cloning | Higgs Audio v3, Drama 3, Qwen3-TTS | yes (CUDA) | no | OpenRouter, Gemini, fal.ai, Runware |
| Voice | Supertonic 3 | yes (ONNX Runtime CUDA) | yes | — |
| Speech recognition | Parakeet-TDT or Whisper | yes | yes | OpenRouter, fal.ai |
| Speech recognition | Parakeet-TDT, Nemotron 3.5 (transcribe.cpp) | yes (CUDA) | not tested | — |
| Speakers | Nemotron 3 Diarization | yes | yes | no |
| Pauses and noise | Silero VAD v6, DPDFNet | no | yes | no |
| Voice from music | Mel-Band Roformer (BSRoformer.cpp) | yes | yes (separate build) | no |
| Stress and homographs | RUAccent | no | yes | no |
| Director (podcast, characters) | Gemma-4 12B (llama.cpp) | yes | no | OpenRouter |
The installer stops on WebView2. Install WebView2 from Microsoft's Evergreen Standalone x64 installer, then run the installer of Speech Studio again.
Downloads stall or fail. Large files resume from where they stopped, so press the button again. If Hugging Face or GitHub is blocked for you, set a proxy in Settings → Network, or put the files from the table in place and press Import from folder.
A voice engine reports an old card or driver. The local engines are built for CUDA 13 and cards from Turing on (GTX 16, RTX 20 and newer). Update the NVIDIA driver; on older cards use the cloud voices.
Recognition finds no speech. The recording is quieter than the speech threshold: lower it in Recognition → Cutting at pauses.
Settings → Diagnostics collects a package for a bug report without keys: attach it to an issue.
Stack: a native Tauri 2 (Rust) shell runs speech-server (axum) in the same process on 127.0.0.1:8797 and opens a window onto the SPA — React 19 + Vite + Tailwind. Engines live in the process through their C ABIs: Higgs (audiocpp_engine.dll), Drama 3 (drama_engine.dll, timoncool/drama-rs), Qwen3-TTS (qwen.dll, timoncool/qwentts.cpp), Parakeet-TDT and Nemotron 3.5 (transcribe_engine.dll, timoncool/transcribe.cpp), Supertonic, Silero VAD, DPDFNet and RUAccent on ONNX Runtime, Whisper and BSRoformer.cpp as helpers, ffmpeg for audio. Not a single Python process at runtime.
git clone https://github.com/timoncool/speech-studio.git
cd speech-studio
cd frontend && npm install && npm run build && cd .. # 1) SPA
cargo build --release -p speech-server # 2) native server (axum)
cd desktop && npm install && npx tauri build # 3) desktop shell (Tauri)Needs Node 20+, Rust (MSVC toolchain) and WebView2. The engines don't need rebuilding — the app downloads prebuilt binaries.
The .deb and the AppImage for Linux x86-64 are experimental: the same code with the Linux builds of the same engines, not run by the author on a real Linux desktop. Fixes are very welcome as pull requests. The NVIDIA driver (580 or newer), libgomp1 and libssl3 come from the system; models and engines go into ~/.local/share/speech-studio.
The app asks the author's server for news at start and then every hour; the request carries no id. The first-run screen has a checkbox Send anonymous usage statistics, checked by default; the same switch is in Settings, next to What is sent. While it is checked, the app sends the day's report: a random install id made on this computer, the app version, the OS, the window language, the graphics card as vendor, a video memory bucket and whether CUDA works, how many tasks finished, failed or were cancelled, the models each stage ran on, and why a task failed as one line with paths, names and quoted text removed. Never: texts, recordings, voices, file names or anything personal. DO_NOT_TRACK=1 or STUDIO_TELEMETRY=0 turns statistics off entirely.
| Project | What it is |
|---|---|
| Dub Studio | AI video dubbing with cloned voices, translated captions and on-screen text |
| Higgs Ultimate | Native speech synthesis & voice cloning (Higgs Audio v3) |
| ACE-Step Studio | AI music studio — songs, vocals, covers, clips |
| YuE2 Studio | AI song generator with an editable score |
| MiniMax Music3 Studio | Native local/cloud AI music studio powered by MiniMax Music 3 |
| VideoSOS | AI video studio |
Collaborators are very welcome: ports to AMD / Intel GPUs, macOS or Linux, fixes to the Linux build and more interface languages (frontend/src/locales/, crates/speech-server/locales/) — fork it and send a pull request.
- Nerual Dreming — Telegram | neuro-cartel.com | founder of ArtGeneration.me
- Neuro-Soft — Telegram | portable AI apps
- Boson AI — Higgs Audio v3, and drbaph / Higgs-Audio-v3-Studio — its GGUF quants and the native engine.
- Fish Audio — Drama 3; apiplant/drama-q4 — its Q4 weights; drama-rs — the Rust/CUDA engine.
- Qwen team — Qwen3-TTS; ServeurpersoCom / qwentts.cpp and Serveurperso/Qwen3-TTS-GGUF — the C++ engine and the GGUF quants; siriusfreak — the Russian stress LoRA.
- Supertone — Supertonic 3; askurios8/supertonic-3-int8 — its int8 export.
- RUAccent — stress, «ё» and homographs.
- NVIDIA — Parakeet-TDT, Nemotron 3.5 ASR and Nemotron 3 Diarization; the diarization through altunenes/parakeet-rs.
- handy-computer / transcribe.cpp — the transcribe.cpp engine and the GGUF of Parakeet-TDT, Parakeet Ultra and Nemotron 3.5.
- Silero — Silero VAD v6 (istupakov/silero-vad-onnx); Ceva-IP / DPDFNet — noise suppression.
- Systran / faster-whisper and Purfview — Whisper and its standalone build.
- chenmozhijin / BSRoformer.cpp and GaboxR67 — voice separation.
- WeSpeaker — voice similarity; Google Gemma and llama.cpp — the director.
- ONNX Runtime, FFmpeg, Tauri, ort and the NVIDIA CUDA libraries.
I build open-source software and do AI research — most of what I make is freely available. Donations let me build and research more.
All the ways to support | dalink.to/nerual_dreming | boosty.to/neuro_art
- BTC:
1E7dHL22RpyhJGVpcvKdbyZgksSYkYeEBC - ETH (ERC20):
0xb5db65adf478983186d4897ba92fe2c25c594a0c - USDT (TRC20):
TQST9Lp2TjK6FiVkn4fwfGUee7NmkxEE7C
The app code is MIT. The models are not: each keeps its own license. Read them before you publish or sell what you voice.
| Component | License | What it means |
|---|---|---|
| Higgs Audio v3 (Boson AI) | Boson Higgs TTS 3 Research and Non-Commercial License | Research and personal use; digital creators may monetize their own content with the Creator Use Grant if they credit Boson AI; a product or service for others needs a license from Boson |
| Fish Audio Drama 3 | Fish Audio Community License | Research and non-commercial use; commercial use while your annual revenue is under USD 500,000, beyond it a license from Fish Audio; no hosted text-to-speech service |
| Qwen3-TTS (Qwen) | Apache-2.0 | |
| Qwen3-TTS ru-stress LoRA (siriusfreak) | Apache-2.0 | |
| Supertonic 3 (Supertone) | BigScience OpenRAIL-M | Read its use restrictions |
| RUAccent, and its homograph model in int8 | MIT | |
| Parakeet-TDT, Nemotron 3 Diarization (NVIDIA) | CC-BY-4.0, OpenMDW-1.1 | Credit NVIDIA |
| Nemotron 3.5 ASR (NVIDIA) | OpenMDW-1.1 | Credit NVIDIA |
| transcribe.cpp | MIT | |
| Silero VAD | MIT | |
| DPDFNet (Ceva) | Apache-2.0 | |
| Whisper models and faster-whisper | MIT | |
| Mel-Band Roformer voc_fv6, GGUF | No license stated on the model pages | Ask the authors before commercial use |
| WeSpeaker ResNet34-LM | CC-BY-4.0 | Credit WeSpeaker |
| Gemma-4 12B (Google) | Gemma terms | Read them |
| llama.cpp, ONNX Runtime, BSRoformer.cpp, qwentts.cpp | MIT | |
| ElevenLabs UI Orb, SiriWave | MIT | |
| LiveKit Agents UI Aura | Apache-2.0 | |
| FFmpeg (BtbN build) | GPL build | A separate program, not linked into the app |
| NVIDIA CUDA runtime, cuBLAS, cuFFT, cuDNN | NVIDIA's own terms | Downloaded from NVIDIA and PyPI |
text to speech · voice cloning · Russian TTS · stress marks · audiobook maker · podcast · speech recognition · transcription · speaker diarization · offline · local · open source · Windows



