Free, offline AI voice studio for Windows, macOS (Apple silicon) and Linux — 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 app (Rust + C++ on CUDA, Vulkan or Metal); 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++ engines (GGUF/ONNX) on CUDA, Vulkan or Metal. 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 v3, Nemotron 3.5 (28 languages with punctuation) and CrisperWhisper 2.0 turbo (99 languages with word times) on audio.cpp, Parakeet Ultra on transcribe.cpp, 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 CrisperWhisper — 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); Higgs — in the audio.cpp engine on 22.10, three runs, first sound not measured; 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 | 3.4× | — | as it speaks | 5.3 GB | ~7 GB |
Recognition — Speech Studio 0.2.1 (CrisperWhisper — the audio.cpp engine on 22.10: a 625.8-second Russian recording, the engine loading included, on the processor and its video memory not measured), 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 |
| CrisperWhisper 2.0 turbo | 96× (6.5 s) | — | 99 | 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); macOS 13 or newer on Apple silicon and Linux x86-64 as experimental builds
- GPU: NVIDIA with 8 GB of VRAM or more. Cards from Turing on (GTX 16, RTX 20 and newer) with driver 580 or newer run the CUDA 13 builds; GTX 900, GTX 10, Volta and drivers 525–579 run the CUDA 12 builds of Higgs, Supertonic, Parakeet, Nemotron, CrisperWhisper, diarization, Qwen3-TTS, separation and the director, and Parakeet Ultra through Vulkan. Drama 3 needs CUDA 13: it 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). An AMD or Intel card runs the Vulkan builds, a computer without a card the CPU ones, a Mac Metal (no Drama 3); these setups are not tested by the author
- 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 from the latest release: for Windows the portable
Speech-Studio-<version>-portable-windows-x64.zip(unzip anywhere) or the installerSpeech.Studio_<version>_x64-setup.exe; for macOSSpeech-Studio-<version>-macos-arm64.dmg; for LinuxSpeech-Studio-<version>-linux-x86_64-experimental.AppImageorSpeech-Studio-<version>-linux-amd64-experimental.deb. - Run
Speech Studio.exe(Windows), Speech Studio from Applications (macOS) or the AppImage (Linux). - 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.
On Windows everything downloads and lives inside the app folder: models, caches, voices and projects go nowhere else. On Linux it lives in
~/.local/share/speech-studio, on macOS in~/Library/Application Support/Speech Studio.
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 the pins of the shared crates it names, and this table is checked against them. The table lists the Windows files: an NVIDIA card CUDA 13 runs on takes the CUDA 13 builds, an older NVIDIA card or driver the CUDA 12.9 ones, an AMD or Intel card the Vulkan ones, a computer without a card the CPU ones; a stage set to another device in Settings → Models takes that device's build. On Linux and macOS the app downloads the builds of the same components for that system.
| 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 |
| audio.cpp server, CUDA 13 (Higgs, Supertonic, Parakeet, Nemotron, CrisperWhisper, diarization) | required | audiocpp-server-win-cuda13-x64.zip | 131 MB | unzip the files, without subfolders, into tools\audiocpp\ |
| 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 | 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-windows-x64.zip |
292 MB | as is, to the path after the arrow unzip the files, without subfolders, into models\qwen3-tts\ |
| 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 13) | required | transcribe_engine.dll → models\transcribe-engine\transcribe_engine.dll |
144 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 |
| transcribe.cpp engine (Vulkan) | optional | transcribe_engine-vulkan.dll → models\transcribe-engine-vulkan\transcribe_engine.dll |
49 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 |
| CrisperWhisper 2.0 turbo (audio.cpp) | optional | LICENSE.md → models\crisperwhisper2-turbo\LICENSE.mdREADME.md → models\crisperwhisper2-turbo\README.mdadded_tokens.json → models\crisperwhisper2-turbo\added_tokens.jsonconfig.json → models\crisperwhisper2-turbo\config.jsongeneration_config.json → models\crisperwhisper2-turbo\generation_config.jsonmerges.txt → models\crisperwhisper2-turbo\merges.txtmodel.safetensors → models\crisperwhisper2-turbo\model.safetensorsnormalizer.json → models\crisperwhisper2-turbo\normalizer.jsonpreprocessor_config.json → models\crisperwhisper2-turbo\preprocessor_config.jsonspecial_tokens_map.json → models\crisperwhisper2-turbo\special_tokens_map.jsontokenizer.json → models\crisperwhisper2-turbo\tokenizer.jsontokenizer_config.json → models\crisperwhisper2-turbo\tokenizer_config.jsonvocab.json → models\crisperwhisper2-turbo\vocab.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 13) | recommended | BSRoformer-windows-cuda13-x64.zip | 117 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\ |
| BSRoformer.cpp (Vulkan) | optional | BSRoformer-windows-vulkan.zip | 23 MB | unzip the files, without subfolders, into tools\bsroformer-vulkan\ |
| llama.cpp server (CUDA 13) | optional | llama-b11900-bin-win-cuda-13.4-x64.zip | 165 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-127021-ge0c94b2d1c-win64-gpl.zip | 199 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 |
61 MB | as is, to the path after the arrow unzip the files, without subfolders, into tools\yt-dlp\ |
| CUDA 13 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\ |
| audio.cpp server, CUDA 12.9 (cards and drivers CUDA 13 left) | optional | audiocpp-server-win-cuda12-x64.zip | 178 MB | unzip the files, without subfolders, into tools\audiocpp-cuda12\ |
| audio.cpp server, Vulkan | optional | audiocpp-server-win-vulkan-x64.zip | 33 MB | unzip the files, without subfolders, into tools\audiocpp-vulkan\ |
| audio.cpp server, CPU | optional | audiocpp-server-win-cpu-x64.zip | 16 MB | unzip the files, without subfolders, into tools\audiocpp-cpu\ |
| CUDA 12.9 runtime (cudart, cuBLAS, cuFFT) | optional | nvidia_cuda_runtime_cu12-12.9.79-py3-none-win_amd64.whl nvidia_cublas_cu12-12.9.2.10-py3-none-win_amd64.whl nvidia_cufft_cu12-11.4.1.4-py3-none-win_amd64.whl |
757 MB | take every .dll of the archive into models\cuda12-runtime\ |
| Qwen3-TTS CUDA 13 module | optional | ggml-cuda13-windows-x64.dll → models\qwen3-tts\ggml-cuda.dll |
142 MB | as is, to the path after the arrow |
| Qwen3-TTS CUDA 12.9 module | optional | ggml-cuda12-windows-x64.dll → models\qwen3-tts\ggml-cuda.dll |
170 MB | as is, to the path after the arrow |
| Qwen3-TTS Vulkan module | optional | ggml-vulkan-windows-x64.dll → models\qwen3-tts\ggml-vulkan.dll |
42 MB | as is, to the path after the arrow |
| BSRoformer.cpp (CUDA 12.9) | optional | BSRoformer-windows-cuda12-x64.zip | 171 MB | unzip the files, without subfolders, into tools\bsroformer-cuda12\ |
| llama.cpp server (CUDA 12.4) | optional | llama-b11900-bin-win-cuda-12.4-x64.zip | 279 MB | unzip the files, without subfolders, into tools\llama-cuda12\ |
| llama.cpp server (Vulkan) | optional | llama-b11900-bin-win-vulkan-x64.zip | 37 MB | unzip the files, without subfolders, into tools\llama-vulkan\ |
| llama.cpp server (CPU) | optional | llama-b11900-bin-win-cpu-x64.zip | 24 MB | unzip the files, without subfolders, into tools\llama-cpu\ |
Each stage has its own device in Settings → Models: Auto, GPU (CUDA), Vulkan or CPU. Auto takes the card's CUDA build — CUDA 13, or CUDA 12.9 on an older card or driver.
| Stage | Engine | NVIDIA (CUDA) | Vulkan (AMD, Intel) | CPU | Mac (Apple silicon) | Cloud |
|---|---|---|---|---|---|---|
| Voice and cloning | Higgs Audio v3 (audio.cpp) | yes | yes | yes | Metal | OpenRouter, Gemini, fal.ai, Runware |
| Voice and cloning | Qwen3-TTS (qwentts.cpp) | yes | yes | yes | Metal | — |
| Voice and cloning | Fish Audio Drama 3 (drama-rs) | CUDA 13 only | no | no | no | — |
| Voice | Supertonic 3 (audio.cpp) | yes | yes | yes | Metal | — |
| Speech recognition | Parakeet-TDT v3, Nemotron 3.5 (audio.cpp) | yes | yes | yes | Metal | OpenRouter, fal.ai |
| Speech recognition | Parakeet Ultra (transcribe.cpp) | CUDA 13 | yes | yes | Metal | — |
| Speech recognition | CrisperWhisper 2.0 turbo (audio.cpp) | yes | no | yes | Metal | — |
| Speakers | Nemotron 3 Diarization (audio.cpp) | yes | yes | yes | Metal | no |
| Pauses and noise | Silero VAD v6 (transcribe.cpp), DPDFNet | no | no | yes | CPU | no |
| Voice from music | Mel-Band Roformer (BSRoformer.cpp) | yes | yes | yes | Metal | no |
| Stress and homographs | RUAccent | no | no | yes | CPU | no |
| Director (podcast, characters) | Gemma-4 12B (llama.cpp) | yes | yes | yes | Metal | 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 CUDA 13 builds need a card from Turing on (GTX 16, RTX 20 and newer) and driver 580 or newer; GTX 900, GTX 10, Volta and drivers 525–579 get the CUDA 12 builds by themselves. Drama 3 has only a CUDA 13 build: on an older card or driver update the driver or use another engine or 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: Drama 3 (drama_engine.dll, timoncool/drama-rs), Qwen3-TTS (qwen.dll, timoncool/qwentts.cpp), Parakeet Ultra, Silero VAD and VoxLingua107 (transcribe_engine.dll, timoncool/transcribe.cpp), DPDFNet, RUAccent and WeSpeaker on ONNX Runtime. Higgs Audio v3, Supertonic 3, Parakeet-TDT v3, Nemotron 3.5, CrisperWhisper and Nemotron 3 Diarization run in one helper program, the audio.cpp server (audiocpp_server, timoncool/audio.cpp); BSRoformer.cpp and llama.cpp's server are helpers too, ffmpeg handles 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 release packages come from scripts/build-release.ps1 (Windows), scripts/build-linux-docker.sh (Linux, in an Ubuntu 22.04 container) and scripts/build-release-macos.sh (macOS, on a Mac with Apple silicon).
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 for the CUDA 13 builds, 525 or newer for the CUDA 12 ones), libgomp1 and libssl3 come from the system; models and engines go into ~/.local/share/speech-studio.
The .dmg for macOS 13 or newer on Apple silicon is experimental too: the macOS builds of the same engines on Metal, not run by the author on a real Mac. Drama 3 is not offered there, it runs on NVIDIA cards only. The app is signed ad hoc and not notarized, so macOS stops the first start: open it once from System Settings → Privacy & Security → Open Anyway. Models and engines go into ~/Library/Application Support/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, the seconds of speech the local engines voiced and the seconds they worked for them, and why a task failed as one line with paths, names and quoted text removed (for a failed download, the component and the site it came from). 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: fixes to the macOS and Linux builds, AMD and Intel cards on Vulkan, 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.
- 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's ONNX from altunenes/parakeet-rs.
- handy-computer / transcribe.cpp — the transcribe.cpp engine and the GGUF of Parakeet-TDT, Parakeet Ultra, Nemotron 3.5, Silero VAD v6.2 and VoxLingua107.
- Silero — Silero VAD v6; Ceva-IP / DPDFNet — noise suppression.
- nyra health / CrisperWhisper 2.0 turbo — Whisper recognition with word times; 0xShug0 / audio.cpp — the engine Higgs Audio v3, Supertonic 3, Parakeet-TDT v3, Nemotron 3.5, CrisperWhisper and Nemotron 3 Diarization run in.
- 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 | |
| CrisperWhisper 2.0 turbo (nyra health) | MIT for its code; nyra health Non-Commercial Research License for the weights and what they output | Non-commercial use only; commercial use needs a license from nyra health |
| audio.cpp | Apache-2.0 | |
| 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 · macOS · Linux



