Releases: linkstar612/polyvox-releases
Release list
Polyvox VRC 2026.9.21-alpha.9
Alpha 9 is a fix release. Two faults on alpha 8 left some people with an app
that would not run at all, and both are fixed here.
Polyvox could close itself the instant you opened it, with no error message and
nothing written to the crash folder. This happened after a graphics driver
upgrade only half applied: the card keeps working everywhere else, but the
Vulkan entry Polyvox reads to find it is gone. The startup GPU check then walked
into the driver and the process died on the spot, and because Polyvox runs
without a console there was nothing on screen to say so. That check now asks the
driver a question it can answer instead. When the answer is that no usable GPU
is present, Polyvox stays open and tells you to repair the display driver rather
than disappearing. If you hit this, repairing or reinstalling the GPU driver is
still the actual fix; the difference is that the app now says so.
The installer did not install the WebView2 runtime. Polyvox draws its entire
window with WebView2, so on a machine that did not already have it the download
verified, Setup.exe completed, the app started, and nothing was ever drawn.
Setup.exe carries the runtime bootstrapper again, so a clean machine installs
and opens.
Speaker portraits are back. VRChat moved the field that carries a user's picture
in mid-September and dropped the two Polyvox had been reading, so every portrait
fetched since then came back empty. Polyvox reads the new field first and still
falls back to the old ones.
Polyvox now keeps everything in one folder. The program, its data and the
WebView2 profiles used to be spread across three folders under
%LOCALAPPDATA%; the program now installs to <data>\app and the browser
profiles to <data>\webview, under the one data folder you can see and move.
Per-language speech models can now be layered over the base model in place, so a
language you use often can run on weights tuned for it without loading a second
model or paying for a second copy in memory. Japanese is the first one built
this way. The memory card in Settings shows a system-memory row beside the GPU
one, so a model that runs on the processor is no longer billed as free, and a
model tile now reports the size actually on disk instead of the published
figure.
Settings > Updates names the exact package you are running, not just the release
it came from, and keeps an offline history of past release notes you can read
without a connection. Paid BOOTH tiers now carry their own signed unlock file.
The universal Setup.exe installs a lower processor tier rather than dead-ending
when the one it detects is not on the release, and the mainland mirrors serve a
fixed tier, which is what they can host.
Everything Polyvox does, in full
The short version
Polyvox listens to your microphone and to everything your PC is playing, writes
down what was said, translates it, and puts it where you can read it: the VRChat
chatbox, a desktop overlay, or a tablet you can grab in VR. It does both sides of
the conversation, tells you who said what when several people are talking, and
shows you how each line is pronounced so you pick the language up instead of
leaning on the translation forever.
Transcription runs on your own GPU. Nothing about your audio has to leave the
machine for the core loop to work.
What you need
| Windows | Windows 10 or 11, 64-bit. Installer, in-app updates. |
| Linux and Steam Deck | AppImage, x86-64, glibc 2.35 or newer (Ubuntu 22.04 and later, SteamOS). |
| macOS | Not in Alpha 1. The target compiles under test but is not built or shipped. |
| GPU | Any Vulkan-capable GPU, including integrated Intel and AMD. CPU-only is not supported. |
| VRChat | Optional. Polyvox works as a plain transcriber without it. |
The Windows installer and the Linux AppImage are both published on every release,
with an updater signature checked against the file's contents.
Hearing the room
Your microphone and your PC audio, at the same time. Two independent capture
paths. The microphone side is what you say. The loopback side is everything else
your machine is playing, which in practice means the other people in the instance.
Each has its own language settings, its own translation engine, and its own
on and off switch.
Speech models you choose. Whisper in several sizes, FireRedASR as a second
transcriber scored against it on the same utterance, and Moonshine as a small fast
option with per-language builds for Arabic, Spanish, Japanese and Korean. The model
picker sizes a default to your hardware on first boot and tells you how much
graphics memory each one wants before you download it.
Per-language fine-tunes. A model trained on one language can take over
whenever you speak that language, and hand back when you switch. Set once per
language, loaded on demand.
Language detection that follows you. Code-switch mid-sentence and Polyvox
keeps up without a trip to a menu. FireRedLID is selectable as a dedicated
detector (Beta) with its own calibrated gates; it stands down and hands the floor
back rather than guessing when it cannot answer.
93 languages in the picker, with a per-language priority list you can order so
detection prefers the ones you actually speak.
Voice activity detection decides what is speech before anything is decoded, so
silence, keyboard noise and background music do not become transcript lines.
Knowing who said what
Speaker diarization. Voices are separated and labeled, so a five-person
multilingual instance reads as a conversation instead of a wall of anonymous text.
Runs on the CPU in a few milliseconds per clip, so it costs your GPU nothing.
Names that stick. Name a speaker once and they keep it across sessions. In a
one-on-one, the other person can be named automatically. Profiles can be merged
when the same person is split in two, and a wrong merge can be undone without
destroying the calibration behind it.
A speaker gallery with per-speaker language restrictions, bulk editing, and
deletion. Each speaker can carry its own allowed-language list that overrides the
global priority.
Game audio is not a person. Another player's music or game sound is not
treated as that player speaking.
Understanding it
26 translation engines, plus a passthrough that sends your text through
untouched. Free ones that need no key, the paid majors, the Chinese providers, the
LLM APIs, and local engines that run on your own PC:
| No key needed | Google (free endpoint), Bing, MyMemory, QQ TransMart, Papago |
| Dedicated APIs | DeepL, Azure Translator, Yandex, Baidu, Tencent, Caiyun, Volcano, Alibaba, Youdao |
| LLM | OpenAI, Gemini, Groq, OpenRouter, Kimi, DeepSeek, PLaMo, Google TLLM |
| Local, on your machine | Ollama, LM Studio, LibreTranslate, M2M100 |
It fails over on its own. Engines are ranked by measured reachability and
latency. When the one you are on throttles, dies, or hits its quota, the next one
takes over without you noticing. Your hand-curated engine order is respected and
not silently rewritten.
Each direction can use a different engine. What you send out and what you
receive do not have to route the same way.
Picking the language up
This is the part no other VRChat translator does, and it is the reason the app
exists.
Readings, on every line. You always see the original, its pronunciation, and
its meaning together, so the script stops being opaque:
- Japanese: romaji, or furigana over the kanji, with optional pitch accent
coloring and a stepped pitch display - Mandarin: pinyin with colored tones, tone sandhi applied, and word grouping
- Cantonese: jyutping, with its own tone set
- Korean: Hangul romanization
- Also Cyrillic, Greek, Hindi, Thai (RTGS), and Arabic with optional
diacritization - IPA as an alternative to romanization anywhere a reading is shown
You choose where readings appear. Transcript, translation, chatbox, desktop
overlay, VR overlay, screen text, microphone side, loopback side. Each is a
separate switch, globally or per language.
Clip studio. Any line you heard can be replayed, trimmed, and looped. Mark
lettered regions inside a clip, set a speed per region with the pitch preserved,
choose how many repetitions and how much silence between them, and play every
region in order. It is a shadowing tool built out of the conversation you just had.
Anki. Send a line to a flashcard deck over AnkiConnect, with the sentence, the
expression, the source, and the audio clip. Polyvox installs its own note type for
you.
Getting it into VRChat
The chatbox, over OSC. Transcripts and translations go straight into VRChat's
chatbox. The message format is yours to build: which blocks appear, in what order,
what gets truncated first when a line is too long. Send pacing adapts to your own
measured speaking cadence rather than a fixed timer, and each send records which
constraint it waited on.
Mute sync. Polyvox follows your VRChat mute state, and re-seeds when VRChat
restarts.
A desktop overlay. Always on top, positioned and sized how you like, with saved
positions you can switch between. Every block is individually hideable: speaker
pill, timestamp, source text, translation, transliteration, language badge,
translation engine. Arrow and WASD snapping, rebindable.
A VR tablet. A real panel in SteamVR and XSOverlay with a pointer ray you aim
and chrome you can press. Dock it, hide it, bring it back, scroll its history.
Per-controller-family defaults for the gestures, so it works with what you are
holding.
A tone glyph per line (Beta), derived from the text rather than invented, with
negation handling. You pick the emoji for each detected tone. Reaches the chatbox
and the VR overlay.
Speaking back...
Polyvox VRC 2026.9.19-alpha.8
Alpha 8 is the light-install release. PolyvoxVRC-Setup.exe is about 28 MB and
is now the only link on every download page: it reads your processor, fetches
the matching build and installs it, so there is no tier to choose. That fetch
tries GitHub and then both mainland mirrors, and a connection that drops resumes
where it stopped instead of starting the 350 MB again. The 834 MB speech model
is no longer inside the installer. It downloads in the background the first
time you open the app, so you can look around while it lands. The desktop shell
shows a progress card in the corner while it does; the native shell has no
progress surface for it yet.
Two transcript defects are fixed. A line the pipeline dropped used to sit at the
bottom of the panel showing its pending dots for the rest of the session; it is
withdrawn now, and anything still pending after 12 seconds is withdrawn too.
Short utterances that the detector labelled with the wrong language came back
with no translation at all, because the engine was handed text already in the
target language and the unchanged answer was suppressed as a duplicate. That
passthrough is now treated as evidence of the real source language and the
route is retried once.
The desktop overlay's toolbar starts at the top of its window instead of 15
pixels down, so its buttons are no longer sliced off in a short window, and the
pass-through button shows the state it is actually in. Recordings survive a
settings reset and the storage cap defaults to no limit. Sortformer is removed:
pyannote segmentation 3.0 is the only segmenter. PolyASR and "Retry stuck lines"
are behind the developer gate until each has a measurement behind it.
New
- Settings/engines: the PolyASR row is dev-only, because its weights do not exist on any install. (R-OFI.1, 7a8efec65)
- Setup/remote: the thin shell walks every release endpoint, not the first one. (R-OFH.1, dd425d264)
- Ngram/fusion: the n+1 draft acceptance rate is measured before any speculative loop is written. (R-OFC.4, ebea1823b)
- Stt/engine: PolyASR is a selectable engine, badged beta, and refuses to activate until its weights are published. (R-OFC.1, 5ab83321b)
- Bench:
scripts/asr-eval/polyasr/bench-polyasr.mjsscores every arm on the human-referenced halves only and prints WER/CER, duplication rate, RTF, p50/p90, VRAM and draft acceptance; ship gate per language is WER within 1.0 pp,. (R-OFC.7, 356edf2b6) - Asr-eval/polyasr: the training and export pipeline is scripted end to end. (R-OFC.6, c0591f76e)
- Retention: a settings reset never erases consented clips, and the cap defaults to no limit. (R-OFC.3, b886b2613)
- Corpus/spoken: weekly spoken-word promotion, OTA. (R-OFC.5, a8f1c0333)
- Translation/openrouter: an unset model picker sends
None, so the engine's own DEFAULT_MODEL applies. (R-OFB.1, ee1eb59c3) - Stt/whisper: whisper.cpp has no LoRA runtime, so a Whisper LoRA is only ever shipped merged, and the merge finally has a script. (R-OFA.11, 3aa0c687b)
- Three partial-translation toggles become one gate and one scope. (7b5f7151f)
- Reset to defaults belongs to the subsection, not the whole tab. (55f47cd3c)
- "Retry stuck lines" shipped garbage, and nothing recorded the beam. (5e05c8e3c)
- The model catalog stops fighting the user, and two engines nobody measured go behind the dev gate. (b7d8f086c)
- Settings > Storage answers one question at a time. (0a7e5160f)
- Stt/interim: a dropped utterance withdraws the preview row it published, and any row left pending is withdrawn after 12 s. Owner, 2026-09-17: a transcript line sat at the bottom of the panel with its pending ellipsis for the rest of the. (R-OEX.1, 5cfd72e59)
- Src/components/supporters + native/app: the quick-donate card. (R-OEQ.1, 5a9f8e63a)
- One donate block under the goal meter, custom amount on the one-time row. (f5f6e8557)
- Ops/models: weights live in the app's saved folder, not in the checkout. (R-OEP.5, 5b4aa3c4f)
- Ops/disk: the reaper reclaims instead of refusing, and scratch has a contract. (R-OEP.1, e461b31b7)
- CN leg:
publish-cn-mirror.ps1already pushes every staged file (the AppImage is in its LFS patterns) and rewrites everyplatforms.*url in the derivedlatest-cn.json, so the Linux entry from R-OEO.5 rides unchanged;. (R-OEO.7, 7532e0e1b) - Publish-release-local.ps1:
scripts/i18n-release-gate.mjsandscripts/release-notes-gate.mjs(the workflow'sgatejob) run after staging and beforegh release create --draft, so a failed gate leaves nothing on the remote; the prune. (R-OEO.6, 9893d04c8) - Publish-release-local.ps1: the Velopack Linux set (
PolyvoxVRC-linux-Setup.AppImage,PolyvoxVRC-<version>-linux-full.nupkg+.minisig,releases.linux.json) is required unless-SkipLinux(said in yellow on the console);-LinuxDir. (R-OEO.5, 59cbe21b1) - Build-portable.sh + build.ps1:
--updaterpacks the Tauri AppDir with vpk and ships vpk's image asPolyvoxVRC-<channel>-Setup.AppImage(+.sig), withvelopack/holding the*-full.nupkg(+.minisig),releases.<channel>.json. (R-OEO.4, 57d4424db) - Src-tauri: the Velopack client compiles on Linux. (R-OEO.3, 5b1eca00b)
- Build.ps1 Linux leg: installer builds pass
--appimage --updatertobuild-portable.sh,TAURI_SIGNING_PRIVATE_KEY/TAURI_SIGNING_PRIVATE_KEY_PASSWORD/POLYVOX_BUILDcross into WSL throughWSLENV, the AppImage.sigis verified. (R-OEO.2, 4d0b21871)
Transcription
- Feedback/flyout: a reason that says the words were wrong has to say what the words were, and the box opens already holding the decode. (R-CAL.78, d5414bf24)
Downloads and updates
- Vad/floor: a persisted noise floor louder than any real room is refused at both the write and the re-seed. (R-REL.9, 63987b9eb)
Fixes
- Build/gate: the accuracy gate no longer fails on a file the build stages a step later. (R-OFH.7, b7d780b9e)
- First-launch: a fresh install transcribes without a download. (R-OFH.5, f0379dca1)
- Ci/release: the thin shell is built on every release and checked against the channel roster. (R-OFH.3, d6720f8d1)
- Release/signatures:
PolyvoxVRC-win-Setup.exe.minisighad never been published, on any release, on any host. (R-OFE.1, 3096f57c8) - Release/contract: every channel is listed, required, and proved. (R-OFD.1, ef0c8bcc0)
- Scripts/ai: the three Flash entry points stop failing silently. (R-OEL.15, 951a40628)
- Stt/whisper: the three same-class candidates ship as unscored opt-in rows, ranked below the primary. (R-OFA.8, 179024e12)
- The new floor test pinned 768 to a test-local 512 and failed. (c3d0e9560)
- Params.rs never compiled, so six clippy rows failed at once. (fe92dee3b)
- Regenerate the native IPC manifest this lane's commands made stale. (074990cda)
- Ops/disk: the scratch caps are sized to a wide batch, and free space has its own floor. (R-OEP.7, 13843c66a)
- Bench: partial translation on against off, measured at the chatbox. (R-OEU.2, 1edb27547)
- Models/gate: Moonshine and Parakeet are developer-only. (R-OEV.3, b7033db03)
- Installer: one download picks the processor's build for the user. (R-OET.1, 2bcc5301d)
- Settings/ui: one master toggle and one scope picker over the three stored fields. (R-OEU.1, 3a2779f13)
- Native/app: the same five resets in
settings_panels/overlay.rs,screen_text.rs,device.rsandperformance.rs, drawn by aSettingsResetControlinsettings_share.rswith the same copy and geometry;settings_panels/mod.rshides. (R-OES.5, d74aac8bb) - Models/repair: a model deleted from the folder while the app runs repairs itself instead of silently degrading. (R-OEV.2, 8819ec970)
- Diarization/sortformer: Sortformer is gone end to end, and pyannote seg-3.0 is the only segmenter. (R-OEY.1, 3146cb886)
- Release/channels: three Velopack channels by CPU tier, a baseline guard, an Updates page selector, and a CI matrix. (R-OEM.4, 5f984aa18)
Other
- I18n(R-OFH.6): PolyASR engine option fills in 26 locales, audit doc dash fix. (R-OFH.6, 075f6306e)
- Bench/asr: the first LoRA ever put through this harness, and it says the merge is fine and the shipped prompt is what kills it. (R-OFA.12, c6bb54e69)
- Bench/asr: the manifest declares where its references came from, and
asr_benchrefuses a cross-family A/B on pseudo-labels. (R-OFA.10, de209d085) - Stt/window:
transcription.adaptive_window_retry(default off) sizes the encoder window to the VAD-trimmed clip, penalizes a token the segment already repeated, and decodes once more at 768 when the first pass trips a threshold. (R-OEM.6, 5e8e40005) - Bench/asr: the Japanese live corpus grades Whisper against itself on 51.3% of its clips. (R-OFA.1, e0cb57a87)
- Research/asr: both licensed Korean fine-tunes were converted, run in our own Rust engine, and both lost significantly. (R-OEZ.2, 0bc34c60c)
- Bench/asr: Korean has a measured baseline now, and it is weak. (R-OEZ.2a, b251697ff)
- Stt/latency: streaming on costs nothing at the end of the utterance. (R-OEK.5, e4eff8019)
Everything Polyvox does, in full
The short version
Polyvox listens to your microphone and to everything your PC is playing, writes
down what was said, translates it, and puts it where you can read it: the VRChat
chatbox, a desktop overlay, or a tablet you can grab in VR. It does both sides of
the conversation, tells you who said what when several people are talking, and
shows you how each line is pronounced so you pick the language up instead of
leaning on the translation forever.
Transcription runs on your own GPU. Nothing about your audio has to leave the
machine for the core loop to work.
What you need
| Windows | Windows 10 or 11, 64-bit. Installer, in-app updates. |
| Linux and Steam Deck | AppImage, x86-64, glibc 2.35 or newer (Ubuntu 22.04 and later, SteamOS). |
| macOS | Not in Alpha 1. The target compiles under test but is not built or shipped. |
| GPU | Any Vu... |
Polyvox VRC 2026.9.17-alpha.7
Alpha 7 is the one-download release. The Velopack setup is the only file to
fetch; on first launch it asks which drive holds models and data, and Settings >
Storage can move them later. Updates gains a CPU tier selector (AVX2 default,
AVX-512, no-AVX) so the app starts on every processor instead of crashing at
launch on the ones without AVX. Loopback is on by default, its partial lines
stream at the bottom of the transcript and both overlays until the final
replaces them, and the chatbox is paced by VRChat's own rate limit. In mainland
China the translator order starts with a reachable engine. Japanese can use
Kotoba-whisper, Persian gets its corrected prompt and letter folding, and a chunk
the speech model abandons is retried once with a plainer prompt.
New
- Stt/firered: an INT8 FireRedLID measured against fp32 on FLEURS, and the correction that the shipped file already IS the INT8 one. (R-OEM.7, 1459e4b8f)
- Translation/partials: a partial that is computed and then held is pure waste, and it is what mainland China actually pays. (R-OEK.8, bb910082c)
- Tooling/cost: every reply that closes a prompt ends with what the prompt and the session cost, per model, in USD. (R-OEM.1, 42da414a8)
- Scripts/ai + .claude: the seat's own reading is routed, not only its spawns. (R-OEL.14, 58f72846d)
- Scripts/ai + .claude: the routing is enforced, not remembered. (R-OEL.11, dc436b51c)
- Scripts/ai/or.mjs: four fixes from the first live day. (R-OEL.7, 1e7fe56b0)
- Translation/openrouter: the OpenRouter card defaulted to
meta-llama/llama-3.1-8b-instruct, an 8B model from 2024, so a user who entered a key and never opened the model picker got the weakest translator in the tree. (R-OEL.5, 24c50ecf4) - Route the reading off Opus, with the measurement that says search is not the leak. (5d251ca14)
- Translation/stress: every configured engine measured under burst: what earns a 429 or a cooldown, and how long it lasts. (R-OEK.3, a4f144f26)
- Audio/loopback: loopback is on by default for everyone, once. (R-OEJ.1, 2a81bc476)
- Release/publish: 2026.9.15-alpha.5 ships and is announced everywhere, and Discord is split. (R-OEJ.8, 47c0bc800)
Fixes
- Refuse to run over a live session, and put the settings tab back. (R-OEM.3, e07c0e46a)
- Stt/partials: loopback streams partial transcription and translation, pinned at the bottom until the final fuses it into the queue. (R-OEJ.9, da8bae982)
- Version/label: the Updates page names the release, not the package. (R-OEJ.4, db6693bdb)
- Translation/region: the shipped engine order starts with an engine the Great Firewall blocks, and nothing reorders it for a user in China. (R-OEK.9, 99570ff03)
- Osc/chatbox: the live line is paced by VRChat's bucket, not the dwell. (R-OEK.6, b03033549)
- Tooling/logs: one command reads a friend's log. (R-OEK.7, 82d403c4d)
- Speakers/readings: "Readings under speaker names" lives under Speaker identity and follows the ruby switch. (R-OEJ.3, 35c079b5e)
- Vrchat/liveness: a closed VRChat leaves no instance behind, and a game that carries no voices never matches a saved VRChat person. (R-OEJ.10, 75a36f3ff)
Other
- Version/policy: a prerelease number is never skipped, and the recut path is documented. (R-OEJ.5, 872667117)
- Translation/partials: the streaming switches off kill the pipeline. (R-OEK.1, ce741afb0)
- Performance/survey: the hardware survey can be read in the app, not only copied. (R-OEJ.2, 2b9bed455)
Everything Polyvox does, in full
The short version
Polyvox listens to your microphone and to everything your PC is playing, writes
down what was said, translates it, and puts it where you can read it: the VRChat
chatbox, a desktop overlay, or a tablet you can grab in VR. It does both sides of
the conversation, tells you who said what when several people are talking, and
shows you how each line is pronounced so you pick the language up instead of
leaning on the translation forever.
Transcription runs on your own GPU. Nothing about your audio has to leave the
machine for the core loop to work.
What you need
| Windows | Windows 10 or 11, 64-bit. Installer, in-app updates. |
| Linux and Steam Deck | AppImage, x86-64, glibc 2.35 or newer (Ubuntu 22.04 and later, SteamOS). |
| macOS | Not in Alpha 1. The target compiles under test but is not built or shipped. |
| GPU | Any Vulkan-capable GPU, including integrated Intel and AMD. CPU-only is not supported. |
| VRChat | Optional. Polyvox works as a plain transcriber without it. |
The Windows installer and the Linux AppImage are both published on every release,
with an updater signature checked against the file's contents.
Hearing the room
Your microphone and your PC audio, at the same time. Two independent capture
paths. The microphone side is what you say. The loopback side is everything else
your machine is playing, which in practice means the other people in the instance.
Each has its own language settings, its own translation engine, and its own
on and off switch.
Speech models you choose. Whisper in several sizes, FireRedASR as a second
transcriber scored against it on the same utterance, and Moonshine as a small fast
option with per-language builds for Arabic, Spanish, Japanese and Korean. The model
picker sizes a default to your hardware on first boot and tells you how much
graphics memory each one wants before you download it.
Per-language fine-tunes. A model trained on one language can take over
whenever you speak that language, and hand back when you switch. Set once per
language, loaded on demand.
Language detection that follows you. Code-switch mid-sentence and Polyvox
keeps up without a trip to a menu. FireRedLID is selectable as a dedicated
detector (Beta) with its own calibrated gates; it stands down and hands the floor
back rather than guessing when it cannot answer.
93 languages in the picker, with a per-language priority list you can order so
detection prefers the ones you actually speak.
Voice activity detection decides what is speech before anything is decoded, so
silence, keyboard noise and background music do not become transcript lines.
Knowing who said what
Speaker diarization. Voices are separated and labeled, so a five-person
multilingual instance reads as a conversation instead of a wall of anonymous text.
Runs on the CPU in a few milliseconds per clip, so it costs your GPU nothing.
Names that stick. Name a speaker once and they keep it across sessions. In a
one-on-one, the other person can be named automatically. Profiles can be merged
when the same person is split in two, and a wrong merge can be undone without
destroying the calibration behind it.
A speaker gallery with per-speaker language restrictions, bulk editing, and
deletion. Each speaker can carry its own allowed-language list that overrides the
global priority.
Game audio is not a person. Another player's music or game sound is not
treated as that player speaking.
Understanding it
26 translation engines, plus a passthrough that sends your text through
untouched. Free ones that need no key, the paid majors, the Chinese providers, the
LLM APIs, and local engines that run on your own PC:
| No key needed | Google (free endpoint), Bing, MyMemory, QQ TransMart, Papago |
| Dedicated APIs | DeepL, Azure Translator, Yandex, Baidu, Tencent, Caiyun, Volcano, Alibaba, Youdao |
| LLM | OpenAI, Gemini, Groq, OpenRouter, Kimi, DeepSeek, PLaMo, Google TLLM |
| Local, on your machine | Ollama, LM Studio, LibreTranslate, M2M100 |
It fails over on its own. Engines are ranked by measured reachability and
latency. When the one you are on throttles, dies, or hits its quota, the next one
takes over without you noticing. Your hand-curated engine order is respected and
not silently rewritten.
Each direction can use a different engine. What you send out and what you
receive do not have to route the same way.
Picking the language up
This is the part no other VRChat translator does, and it is the reason the app
exists.
Readings, on every line. You always see the original, its pronunciation, and
its meaning together, so the script stops being opaque:
- Japanese: romaji, or furigana over the kanji, with optional pitch accent
coloring and a stepped pitch display - Mandarin: pinyin with colored tones, tone sandhi applied, and word grouping
- Cantonese: jyutping, with its own tone set
- Korean: Hangul romanization
- Also Cyrillic, Greek, Hindi, Thai (RTGS), and Arabic with optional
diacritization - IPA as an alternative to romanization anywhere a reading is shown
You choose where readings appear. Transcript, translation, chatbox, desktop
overlay, VR overlay, screen text, microphone side, loopback side. Each is a
separate switch, globally or per language.
Clip studio. Any line you heard can be replayed, trimmed, and looped. Mark
lettered regions inside a clip, set a speed per region with the pitch preserved,
choose how many repetitions and how much silence between them, and play every
region in order. It is a shadowing tool built out of the conversation you just had.
Anki. Send a line to a flashcard deck over AnkiConnect, with the sentence, the
expression, the source, and the audio clip. Polyvox installs its own note type for
you.
Getting it into VRChat
The chatbox, over OSC. Transcripts and translations go straight into VRChat's
chatbox. The message format is yours to build: which blocks appear, in what order,
what gets truncated first when a line is too long. Send pacing adapts to your own
measured speaking cadence rather than a fixed timer, and each send records which
constraint it waited on.
Mute sync. Polyvox follows your VRChat mute state, and re-seeds when VRChat
restarts....
Polyvox VRC 2026.9.13-alpha.6
New
- Stt/zh: mixed English and Chinese honors Simplified when Simplified is selected. (R-OEI.15, 8f59ccd15)
- Translation/partials: "Partial translation on paid engines" is renamed for what it does, and partials run on local translators too. (R-OEI.9, e7022c752)
- Stt/source: the default speech-to-text source is the game microphone, not both. (R-OEI.14, d887f72b3)
- Settings/reset: Reset to defaults restarts both pipelines. (R-OEI.16, af3d429eb)
- Tts: enabling text to speech works without toggling "send my voice". (R-OEI.11, 8bf988d86)
- Osc/chatbox: "Minimum time on screen" holds at every value, not only 1.0 s. (R-OEI.10, 54777246d)
- Diarization/calibrate: "Open in a window" draws frames instead of black. (R-OEI.8, 402579091)
- About/community: every website in Settings > About > Community shows the icon of what it is. (R-OEI.3, 434ef8c59)
- Stt/music-gate: the music gate is installed and enabled for everyone. (R-OEI.13, 868ceb453)
- Telemetry/region: Mainland China is selectable in the Region control. (R-OEI.5, 38e325474)
- About/community: group the links by where they live, region-aware. (R-OEI.4, 9d34e1ccd)
- Screen-text/pen: the pen uses raw pointer input, no smoothing. (R-OEI.12, 852dae55b)
- Diagnostics/copy: the Bug report section is named for both things it holds. (R-OEI.7, 3e16edd4a)
- Paths/resolver:
polyvox_persist::data_dir()answers<install root>\datafor a custom install. (R-OEG.1, b38179b8b) - Diarization/db: a per-speaker spectral profile that never reached the disk. (R-OEE.1, bc4ddcd92)
- Release/installer:
PolyvoxVRC-win-Setup.exeis THE download. (R-OED.1, 3428b7dc1) - Scripts/lib: one affinity mask, read by every build entry point in the tree. (R-OEF.1, 8fa730720)
- Audio/detect: a per-session detector for a mic that is already noise-cancelled, on the mic capture path only. (R-OEC.1, 30c102ccd)
- Deploy: the deploy GUI offers the Velopack installer as its own kind. (R-ODZ.4, 2a90a83aa)
- Ui/bundle: one copy of the fonts on disk, read by the web UI, the native shell and the VR renderer. (R-ODQ.4, 85b71f4de)
- Filters/overlays: the received and sent filters apply to the VR and desktop overlays. (R-ODY.9, 955201e57)
- Overlay/settings: the desktop overlay toggle removes the overlay when off and shows it when on; in VR the desktop overlay follows a policy that avoids its cost while the VR overlay is up. (R-ODY.4, 133f5970b)
- Community/socials: the Community tab lists every owner channel: ModelScope, GitHub, Twitter/X for HGM, Patreon, Discord, BOOTH, Ko-fi, Gitee. (R-ODY.1, 9b44ef637)
- Worker/reports: every bug report and feature request reaches Discord and GitHub the moment it lands, with its category. (R-ODS.1, 80d74db66)
- Distribution/cn: one stable mainland China page whose README names the current direct installer link. (R-ODX.1, b865d59e4)
- Telemetry/settings: the settings rows say which defaults to revisit, and the answer is read from a documented interface. (R-ODW.3, fb71b2d07)
- Ui/screen-text: Escape clears the screen text capture. (R-ODW.1, eabdf6686)
- Audio/aec: other people's speech transcribed as the user's own mic. (R-ODW.4, 0bf93cfcd)
- Native-ui/tooling: the WebView2 152 switch is set programmatically, so the R-OCK.7 screenshot pair and the R-BW.13 switches work again. (R-ODS.5, 2b0c2f980)
- Ui/overlay: the desktop overlay has no boundary the lines do not have, and it moves in every state. (R-ODT.4, ec331f4d7)
- Telemetry/settings: the digest says which settings people touch, how often, and which ones they undo. (R-ODT.1, 4c54bdc25)
- Ops/deploy: an internal build carries the deploying machine's local date, and the sequence number is untouched. (R-ODT.10, a63655766)
- License/trade-up: a Valid license bound to no machine (the compiled-in fallback or the R-LIC.12 bridge code,
hwid_hash == "transferable") asks the mint at launch and trades up to a machine-bound seat when it answers. (R-ODV.1, 8e17dcf3c) - Settings/transcription: the per-language list persists exactly what the user added and removed. (R-ODT.2, ba09e489d)
- Stt/adaptive: Phrase memory: a per-user collocation table the rerank interpolates, learned from the speaker's own final lines and corrections. (R-ODS.4, 4c2386bf3)
- Ops/deploy: the internal build number is reserved, then committed only when the deploy verifies complete. (R-ODT.9, 1bbc00090)
- Ui/screen-text: one rectangle per keybind press, adjustable until it is closed. (R-ODT.3, d7d7912ef)
- Updates/velopack: Velopack owns the check, the download and the apply on a Velopack install. (R-ODQ.7b, 792d729f7)
- Install/eula: the app asks you to accept the license on first run, and the docs name the Velopack paths. (R-ODQ.7d, 6898e5179)
- Downloads/speed: model and update downloads run parallel ranged segments and resume. (R-ODQ.2, bcb512c5b)
- Release/velopack: the Velopack package set is built and published beside the NSIS installer. (R-ODQ.7c, 952d9731a)
- Release/bundle: OCR models leave the installer and auto-download at first launch. (R-ODQ.1, ec4538f4b)
- Transliteration/ja: phrase-level accent prediction, the rule that changes when words are strung together. (R-ODR.2, 0efcf3ea4)
- Docs/agents: the parity rule as a written rule, not only a gate. (R-ODR.5, 112501de9)
- Stt/bundle: the n-gram corpus is one resource file per language, not bytes inside two exes. (R-ODQ.3, 7c6242cee)
- Updates/apply: the staged update installs silently, no NSIS window. (R-ODQ.6, 2687b2e70)
- Release/installer: the release ships the raw NSIS under the installer's name until the setup shell paints (R-ODJ.2). (R-ODQ.5, 76a7d21c1)
- The VR overlay's screen-text capture becomes a VRChat-style camera. (R-ODO.5, 84149ac62)
Fixes
- Translation/deepseek: the DeepSeek engine gets a model picker. (R-OEI.1, 5ed91f690)
- Translation/cost: every API-key engine lets you pick a model and shows the correct price, with OpenRouter as the reference for current prices. (R-OEI.2, f0cd9bc4a)
- Telemetry/voice: the "Help improve speech recognition" section shows an option instead of "Pick your state above". (R-OEI.6, 00a0e0a5e)
- Translation/partial: an unpunctuated partial dispatches on growth, not only on a clause mark. (R-OEB.1, afcfd283d)
- Deploy: the build names the installer to run. (R-ODZ.2, 334e598d9)
- Ui/hotkeys: a synthetic keydown without a
keyno longer takes the document down. (R-ODZ.1, 524fed6ab) - Build/native:
native/app/build.rsreadsCARGO_MANIFEST_DIRat runtime, so a build script cached in a shared target dir embeds the icon from the worktree that is building, not from the one that compiled it first. (R-ODY.16, 55e63d1da) - I18n/release: the 26 locales carry every key this batch added, so the release gate does not block the next tag. (R-ODY.17, 6c7d83773)
- Stt/japanese: the katakana veto fires on confident nonsense without touching real speech; kotoba-whisper does not decode and stays out of the app. (R-ODY.11, 9e61f89cf)
- The bridge resolves the download region before ordering feeds. (R-ODQ.7e, 7d20c3969)
- Licensing/check-in: a 90-day online check-in with a 14-day offline grace, and a service-published minimum supported version. (R-ODT.8, 1c5b10b31)
- Filters/languages: no bare two-letter codes in Filters; zh, ba, nn fold into the listed language whatever the source language. (R-ODY.14, 01075bf32)
- Overlay/window: the main window can be brought forward at any time. (R-ODY.5, 46e3aa375)
- Osc/crash: live typing spawns on Tauri's runtime, so a partial from a decoder thread can no longer kill the mic preview or the decoder. (R-ODY.10, 6e6046b16)
- Stt/parakeet: turning Parakeet off leaves no Portuguese-via-Parakeet rows, and enabling it never populates languages the owner did not pick. (R-ODY.8, 875aba3ff)
- Overlay/desktop: the minimized desktop overlay draws whole at launch, and its position survives a restart. (R-ODY.2, 8fea628f7)
- Transcript/icons: the VRChat app icon renders in the main transcript window as it already does in the desktop overlay. (R-ODY.13, dc169d3e9)
- Updates/cn: an alpha.4.2 install updates to the latest release without an error. (R-ODY.7, fcc9d4955)
- Demo/release: the demo feed never runs at start on a release build. (R-ODY.6, 67e66b99b)
- Ui/theme: the light theme is one theme: the owner image sits behind the transcript window and the sidebar too, and every light color reads. (R-ODY.12, fe02d3e1a)
- Transliteration/native: the pitch accent renderers the native shell still does not draw. (R-ODR.7, 745da2ac2)
- Telemetry/translation: high-ping and slow end-to-end events reach the digest per engine endpoint. (R-ODW.2, ae8f6c9e0)
- Side-by-side parity harness: identical demo feed in both shells, coordinate-scripted walk through every page, per-page screenshots, tolerance-based diff per element class, ffmpeg side-by-side video artifact for owner review. (R-OCK.7, 731c77c04)
- Ops/licensing: PolyvoxDeploy lists every seat, including the alpha.2, alpha.3 and alpha.4 installs. (R-ODT.5, 4bacd8138)
- Ui/reports: the report form asks bug or feature, and whether the reporter wants to be thanked by name. (R-ODS.2, 908d36635)
- Downloads/correctness: the review findings on R-ODQ.2, fixed before the next tag. (R-ODQ.8, 789b82485)
- Transliteration/ui: the pitch contour is pixel-exact over the reading, in React and in native. (R-ODR.4, dc67d56c2)
Other
- What's New highlights are localized. (R-ODO.7, 4db2cb679)
- Every control is indexed, by contract. (R-ODO.4, ff1d5ef91)
- The CI Windows installer ships the native shell, and the switch is only offered when the shell is there. (R-ODO.1, a43d0d939)
Install anywhere, and your data goes with it. Pick any folder during setup
and Polyvox keeps settings, logs, models, themes and transcripts under that
folder instead of your C: drive. An install that already moved gets its data
carried across on the next launch, verified file by file before the old copy is
removed.
**Every met...
Polyvox VRC 2026.9.9-alpha.4
New
- Updates/robustness: one bad mirror never ends the update. (R-ODL.1, f941d145c)
- Updates/errors: the update error is a code, not an English sentence. (R-ODL.2, 8e57000bd)
- Updates/notes: a release notes history view in Settings > Updates, bundled and offline. (R-ODK.3, f1fc82bc0)
- Publish/cn: the CN mirror cannot publish an update manifest the client is unable to decode. (R-ODM.1, 2a00923be)
- Updates/notes: the update prompt shows the release notes and the manifest carries them. (R-ODK.1, fbbc4bdae)
- Installer/native-shell: the setup shell falls back to the NSIS wizard when its window never presents. (R-ODJ.1, ab49d2112)
- Speech/auto model: the throughput step-down is keyed to the graphics card that measured it. (R-ODN.1, 059df97db)
Updating from China works again. When the app's language is Chinese, update
checks go to the China mirrors first. A mirror file with a hidden byte-order mark
no longer stops the check, each update server gets its own time limit so one
blocked server cannot stall the rest, and update errors are shown in the app's
language instead of English.
If the setup window does not appear within five seconds, the standard installer
wizard opens instead.
The China update mirror now reads back the file it just published and stops the
release if the app would not be able to open it.
Update notes where you decide. Settings > Updates now shows what is in an
update under the version it offers, instead of the version number alone, and the
notice that appears when one is found has a "See what's new" link straight to it.
You can turn the post-update panel off. The "What's New" box that opens after
an update has a "Don't show these after updates" box, and Settings > Updates has
the same switch. Notes for an offered update still show, because you asked for
those.
A slow graphics card no longer follows you to another. Polyvox steps the
speech model down when decodes fall behind, and that verdict now belongs to the
card that produced it; switching cards starts the measurement over.
Everything Polyvox does, in full
The short version
Polyvox listens to your microphone and to everything your PC is playing, writes
down what was said, translates it, and puts it where you can read it: the VRChat
chatbox, a desktop overlay, or a tablet you can grab in VR. It does both sides of
the conversation, tells you who said what when several people are talking, and
shows you how each line is pronounced so you pick the language up instead of
leaning on the translation forever.
Transcription runs on your own GPU. Nothing about your audio has to leave the
machine for the core loop to work.
What you need
| Windows | Windows 10 or 11, 64-bit. Installer, in-app updates. |
| Linux and Steam Deck | AppImage, x86-64, glibc 2.35 or newer (Ubuntu 22.04 and later, SteamOS). |
| macOS | Not in Alpha 1. The target compiles under test but is not built or shipped. |
| GPU | Any Vulkan-capable GPU, including integrated Intel and AMD. CPU-only is not supported. |
| VRChat | Optional. Polyvox works as a plain transcriber without it. |
The Windows installer and the Linux AppImage are both published on every release,
with an updater signature checked against the file's contents.
Hearing the room
Your microphone and your PC audio, at the same time. Two independent capture
paths. The microphone side is what you say. The loopback side is everything else
your machine is playing, which in practice means the other people in the instance.
Each has its own language settings, its own translation engine, and its own
on and off switch.
Speech models you choose. Whisper in several sizes, FireRedASR as a second
transcriber scored against it on the same utterance, and Moonshine as a small fast
option with per-language builds for Arabic, Spanish, Japanese and Korean. The model
picker sizes a default to your hardware on first boot and tells you how much
graphics memory each one wants before you download it.
Per-language fine-tunes. A model trained on one language can take over
whenever you speak that language, and hand back when you switch. Set once per
language, loaded on demand.
Language detection that follows you. Code-switch mid-sentence and Polyvox
keeps up without a trip to a menu. FireRedLID is selectable as a dedicated
detector (Beta) with its own calibrated gates; it stands down and hands the floor
back rather than guessing when it cannot answer.
93 languages in the picker, with a per-language priority list you can order so
detection prefers the ones you actually speak.
Voice activity detection decides what is speech before anything is decoded, so
silence, keyboard noise and background music do not become transcript lines.
Knowing who said what
Speaker diarization. Voices are separated and labeled, so a five-person
multilingual instance reads as a conversation instead of a wall of anonymous text.
Runs on the CPU in a few milliseconds per clip, so it costs your GPU nothing.
Names that stick. Name a speaker once and they keep it across sessions. In a
one-on-one, the other person can be named automatically. Profiles can be merged
when the same person is split in two, and a wrong merge can be undone without
destroying the calibration behind it.
A speaker gallery with per-speaker language restrictions, bulk editing, and
deletion. Each speaker can carry its own allowed-language list that overrides the
global priority.
Game audio is not a person. Another player's music or game sound is not
treated as that player speaking.
Understanding it
26 translation engines, plus a passthrough that sends your text through
untouched. Free ones that need no key, the paid majors, the Chinese providers, the
LLM APIs, and local engines that run on your own PC:
| No key needed | Google (free endpoint), Bing, MyMemory, QQ TransMart, Papago |
| Dedicated APIs | DeepL, Azure Translator, Yandex, Baidu, Tencent, Caiyun, Volcano, Alibaba, Youdao |
| LLM | OpenAI, Gemini, Groq, OpenRouter, Kimi, DeepSeek, PLaMo, Google TLLM |
| Local, on your machine | Ollama, LM Studio, LibreTranslate, M2M100 |
It fails over on its own. Engines are ranked by measured reachability and
latency. When the one you are on throttles, dies, or hits its quota, the next one
takes over without you noticing. Your hand-curated engine order is respected and
not silently rewritten.
Each direction can use a different engine. What you send out and what you
receive do not have to route the same way.
Picking the language up
This is the part no other VRChat translator does, and it is the reason the app
exists.
Readings, on every line. You always see the original, its pronunciation, and
its meaning together, so the script stops being opaque:
- Japanese: romaji, or furigana over the kanji, with optional pitch accent
coloring and a stepped pitch display - Mandarin: pinyin with colored tones, tone sandhi applied, and word grouping
- Cantonese: jyutping, with its own tone set
- Korean: Hangul romanization
- Also Cyrillic, Greek, Hindi, Thai (RTGS), and Arabic with optional
diacritization - IPA as an alternative to romanization anywhere a reading is shown
You choose where readings appear. Transcript, translation, chatbox, desktop
overlay, VR overlay, screen text, microphone side, loopback side. Each is a
separate switch, globally or per language.
Clip studio. Any line you heard can be replayed, trimmed, and looped. Mark
lettered regions inside a clip, set a speed per region with the pitch preserved,
choose how many repetitions and how much silence between them, and play every
region in order. It is a shadowing tool built out of the conversation you just had.
Anki. Send a line to a flashcard deck over AnkiConnect, with the sentence, the
expression, the source, and the audio clip. Polyvox installs its own note type for
you.
Getting it into VRChat
The chatbox, over OSC. Transcripts and translations go straight into VRChat's
chatbox. The message format is yours to build: which blocks appear, in what order,
what gets truncated first when a line is too long. Send pacing adapts to your own
measured speaking cadence rather than a fixed timer, and each send records which
constraint it waited on.
Mute sync. Polyvox follows your VRChat mute state, and re-seeds when VRChat
restarts.
A desktop overlay. Always on top, positioned and sized how you like, with saved
positions you can switch between. Every block is individually hideable: speaker
pill, timestamp, source text, translation, transliteration, language badge,
translation engine. Arrow and WASD snapping, rebindable.
A VR tablet. A real panel in SteamVR and XSOverlay with a pointer ray you aim
and chrome you can press. Dock it, hide it, bring it back, scroll its history.
Per-controller-family defaults for the gestures, so it works with what you are
holding.
A tone glyph per line (Beta), derived from the text rather than invented, with
negation handling. You pick the emoji for each detected tone. Reaches the chatbox
and the VR overlay.
Speaking back
Text to speech, so a translation can be heard instead of read:
- Kokoro (Beta), a 160 MB model that downloads once and then speaks locally
- Windows voices, whatever is installed on your system
- VOICEVOX, for Japanese
- A cloned voice, matched to a sample you provide, with a likeness control that
tries several candidates and keeps the closest
Into other games. Route synthesized speech to a game's microphone and hold it...
Polyvox VRC 2026.9.9-alpha.3
Known issue: the installer window may not appear. On some machines the new
setup window is created but never drawn, so double-clicking
Polyvox-VRC_2026.9.9-alpha.3_x64-setup.exe looks like nothing happened. The
installer underneath it is fine. Two ways around it:
- Download
Polyvox-VRC_2026.9.9-alpha.3_x64-setup-classic.exefrom the
assets below. Same installer, same bytes, without the new window. It opens on
a normal double-click.
SHA-256cc942dd3f3a427e72a4457cc82108d77110a36a790d021b352c3168d51773872 - Or run the original with any argument, which gives you the standard wizard:
Polyvox-VRC_2026.9.9-alpha.3_x64-setup.exe /wizard
In-app updates are not affected. If you are already on a recent build, Settings >
About > Check for updates installs this one normally.
Alpha 3. The installer, the chatbox and the Linux build are the headline.
Every build since Alpha 2 updates itself, so if you are on Alpha 2 you get this
automatically. If you are still on Alpha 4, install this one by hand: that build
cannot read the current signing key.
A new installer. The setup exe is now drawn by the same native shell as the
app: welcome, license, an install location with a drive picker, progress, and a
launch page. It runs the previous installer silently underneath, so nothing about
what gets installed changed. The model weights follow the folder you pick, so an
install on D: no longer fills C:.
The chatbox paces itself. One clock decides when the chatbox may change, so
a burst of speech no longer stacks messages that VRChat then rate-limits. The
slider in Settings is a minimum dwell per message. While you are still speaking
the chatbox shows a live partial on its own row, and the translation of that
partial follows on a second row, so the reader sees the sentence build instead
of waiting for it to end. The desktop overlay and the VR panel show the same
partial rows.
Linux. The AppImage updates itself in place, and the Linux build is part of
every release again.
Hardware. Settings > Diagnostics has one button that copies the full hardware
survey (CPU, GPU, VRAM, RAM sticks with type and speed, motherboard, drives,
headset) so a bug report carries it in one paste. With telemetry consent on,
the weekly rollup now includes GPU model and VRAM, RAM and speed buckets, and
Calibration Studio verdicts, counters only.
Hitches. The screen-text reader no longer rebuilds its recognizer on every
read (this was the pause every few seconds with a nameplate on screen). The VR
panel caps how often it submits a frame and rides out a refused upload instead
of stalling. The mic cadence learner keeps the value it measured instead of
drifting back to the floor.
Overlay and Calibration Studio. The native overlay's black box behind text
is gone (it composited opaque). The overlay drawer has visible grips, a live
size readout, and a minus/plus line stepper. Calibration Studio can replay a
recording, mark every nameplate box with a verdict and a name, train on it and
export the result. Touch targets are sized for a laser at arm's length.
Also. The tip buttons are back on the Supporters tab, with one goal bar.
ngram_probe.exe no longer ships in the installer. The site lists the minimum
and recommended hardware tiers.
New
- Ci/native: the seven red tests in
polyvox-nativeclose as parity fixes, not as relaxed assertions. (R-ODI.1, c95765ccf) - Updater/linux: the in-app update installs on Linux by replacing the running AppImage and relaunching. (R-ODA.2, e2281aa24)
- Installer/payload: the shell carries the NSIS installer and runs it. (R-ODF.2, 4e51a7354)
- Settings/osc: the send-rate control says what it does, and no install loses its cadence to the rename. (R-ODB.4, 0b18b56e5)
- Installer/pipeline: the release builds and ships the bootstrapper, and the updater uses it. (R-ODF.3, 23a3a4445)
- Telemetry/hardware: the two rollup events now name the machine that produced the speed figure, and a Calibration Studio training run reports whether it improved anything. (R-ODD.2, 10c9ae1c2)
- Installer/native-shell: the setup window is the app's own renderer, not an NSIS dialog. (R-ODF.1, b1c2c8f13)
- Overlay/parity: the VR panel streams a partial the way the transcript and the desktop overlay already do, and a contract plus a gate keeps the three surfaces together. (R-ODB.5, bb4f5d53f)
- Osc/chatbox: one clock decides when the chatbox may change, and the slider means one thing at every value. (R-ODB.2, 8e07b427b)
- Installer/storage: the install directory you type is the one you get, on any drive, and the model weights go with it. (R-ODE.1, 92b65c1e8)
- Osc/observability: the partial translation lane says whether it reached the chatbox. (R-ODB.1, 4945bf1c9)
- Diagnostics/hardware: one button copies a full hardware survey (board, BIOS, RAM per slot with SKU and clock, CPU, drives, GPU, displays, HMD, OS) and the GPU load row sits above the CPU row. (R-ODD.1, 8804ca6c4)
- Ui/studio: Calibration Studio, the page. (R-OCZ.6, d11b9db0d)
- Native/text: native text is hinted at every zoom and reads like the React overlay. (R-OCZ.9, e59b48c31)
- Diarization/studio: Calibration Studio, backend: a recording through the live detector, labels, a trainer, a profile. (R-OCZ.5, 3d53fba38)
- Vr/overlay: touch targets sized for a laser at arm's length. (R-OCZ.3, bdca89325)
- Diarization/screen: the plate detector stops minting what moves. (R-OCZ.4, 02a9cf91e)
Transcription
- Re-benchmark the adaptive encoder window over the full stored corpus (owner runs
audio_ctx_mode = off). (R-ACX.5, a40948c65)
Supporters
- Supporters: the Stripe tip buttons come back, and the three goal bars become one. (R-DON.12, 3a7cc1462)
Fixes
- Perf/vr: the VR panel stops uploading faster than a headset can show it, a refused upload no longer rebuilds the OpenVR session, and the decode budget stops asking for the whole machine. (R-ODC.2, 79603fa32)
- Osc/chatbox: the message shape is fixed at the first partial and only its contents change. (R-ODB.3, cd1815002)
- Telemetry/digest: a weekly reading of the Cloudflare bucket arrives on its own, and it reports both verdicts. (R-ODD.3, 3c43696d4)
- Linux/build: the Linux build compiles again:
HostHandleis imported on every OS,cursor_positionexists on the host handle, and the storage-class helper is gated to the callers that exist. (R-ODA.3, 5646b8555) - Vad/cadence: the mic learner has 64 ms of range, and it throws away the value it measured. (R-CAD.16, 3436b09ca)
- Perf/vr: the OCR script pass stops rebuilding nine ONNX sessions on every read, and the Speaker Identity capture stops copying a whole window 30 times a second beside a live VR session. (R-ODC.1, f6706ff25)
- Release/bundle:
ngram_probe.exeno longer ships in the installer. (R-ODG.1, 039b26912) - Native/overlay: the native desktop overlay spawns and looks like the React one, and the collapsed dot is a dot. (R-OCZ.8, 5775e0095)
- Vr/overlay: one texture size, plates uploaded on size change only, and a refused upload rides out instead of tearing the session down. (R-OCZ.1, 5ccc53af0)
- Vr/ocr: SCAN TEXT in VR freezes what the headset shows. (R-OCZ.2, d1d2fc001)
- Overlay/desktop: resizing you can find, and a line stepper you can see. (R-OCZ.7, 28e2caddd)
- Site/payments: the product page no longer reads as an under-construction site to a payment reviewer. (R-PAY.1, bd3d5e743)
Everything Polyvox does, in full
The short version
Polyvox listens to your microphone and to everything your PC is playing, writes
down what was said, translates it, and puts it where you can read it: the VRChat
chatbox, a desktop overlay, or a tablet you can grab in VR. It does both sides of
the conversation, tells you who said what when several people are talking, and
shows you how each line is pronounced so you pick the language up instead of
leaning on the translation forever.
Transcription runs on your own GPU. Nothing about your audio has to leave the
machine for the core loop to work.
What you need
| Windows | Windows 10 or 11, 64-bit. Installer, in-app updates. |
| Linux and Steam Deck | AppImage, x86-64, glibc 2.35 or newer (Ubuntu 22.04 and later, SteamOS). |
| macOS | Not in Alpha 1. The target compiles under test but is not built or shipped. |
| GPU | Any Vulkan-capable GPU, including integrated Intel and AMD. CPU-only is not supported. |
| VRChat | Optional. Polyvox works as a plain transcriber without it. |
The Windows installer and the Linux AppImage are both published on every release,
with an updater signature checked against the file's contents.
Hearing the room
Your microphone and your PC audio, at the same time. Two independent capture
paths. The microphone side is what you say. The loopback side is everything else
your machine is playing, which in practice means the other people in the instance.
Each has its own language settings, its own translation engine, and its own
on and off switch.
Speech models you choose. Whisper in several sizes, FireRedASR as a second
transcriber scored against it on the same utterance, and Moonshine as a small fast
option with per-language builds for Arabic, Spanish, Japanese and Korean. The model
picker sizes a default to your hardware on first boot and tells you how much
graphics memory each one wants before you download it.
Per-language fine-tunes. A model trained on one language can take over
whenever you speak that language, and hand back when you switch. Set once per
language, loaded on demand.
Language detection that follows you. Code-switch mid-sentence and Polyvox
keeps up without a trip to a menu. FireRedLID is selectable as a dedicated
detector (Beta) with its own calibrated gates; it stands d...
Polyvox VRC 2026.9.8-alpha.2
Alpha 2. This is the release that should have gone out on September 7. The
one that was cut then never published: its release run stopped when the Actions
quota ran out for the month, and three more builds (Alpha 3, 4 and 5) went out
while Alpha 2 never existed for anyone. This build carries all of that work.
If you are on Alpha 1, you get this automatically. Open Settings and check
for updates, or wait for the app to find it.
If you are on Alpha 4, install this one by hand. Alpha 4 shipped with an
updater that cannot read this build's signing key, so it will offer the update
and then fail to apply it. Download the installer from the release page and run
it. Your settings and your license carry over, and every build after this one
updates itself normally.
Everything in Alpha 3, 4 and 5 is included. See those sections below for the
detail; nothing has been removed.
Everything Polyvox does, in full
The short version
Polyvox listens to your microphone and to everything your PC is playing, writes
down what was said, translates it, and puts it where you can read it: the VRChat
chatbox, a desktop overlay, or a tablet you can grab in VR. It does both sides of
the conversation, tells you who said what when several people are talking, and
shows you how each line is pronounced so you pick the language up instead of
leaning on the translation forever.
Transcription runs on your own GPU. Nothing about your audio has to leave the
machine for the core loop to work.
What you need
| Windows | Windows 10 or 11, 64-bit. Installer, in-app updates. |
| Linux and Steam Deck | AppImage, x86-64, glibc 2.35 or newer (Ubuntu 22.04 and later, SteamOS). |
| macOS | Not in Alpha 1. The target compiles under test but is not built or shipped. |
| GPU | Any Vulkan-capable GPU, including integrated Intel and AMD. CPU-only is not supported. |
| VRChat | Optional. Polyvox works as a plain transcriber without it. |
The Windows installer and the Linux AppImage are both published on every release,
with an updater signature checked against the file's contents.
Hearing the room
Your microphone and your PC audio, at the same time. Two independent capture
paths. The microphone side is what you say. The loopback side is everything else
your machine is playing, which in practice means the other people in the instance.
Each has its own language settings, its own translation engine, and its own
on and off switch.
Speech models you choose. Whisper in several sizes, FireRedASR as a second
transcriber scored against it on the same utterance, and Moonshine as a small fast
option with per-language builds for Arabic, Spanish, Japanese and Korean. The model
picker sizes a default to your hardware on first boot and tells you how much
graphics memory each one wants before you download it.
Per-language fine-tunes. A model trained on one language can take over
whenever you speak that language, and hand back when you switch. Set once per
language, loaded on demand.
Language detection that follows you. Code-switch mid-sentence and Polyvox
keeps up without a trip to a menu. FireRedLID is selectable as a dedicated
detector (Beta) with its own calibrated gates; it stands down and hands the floor
back rather than guessing when it cannot answer.
93 languages in the picker, with a per-language priority list you can order so
detection prefers the ones you actually speak.
Voice activity detection decides what is speech before anything is decoded, so
silence, keyboard noise and background music do not become transcript lines.
Knowing who said what
Speaker diarization. Voices are separated and labeled, so a five-person
multilingual instance reads as a conversation instead of a wall of anonymous text.
Runs on the CPU in a few milliseconds per clip, so it costs your GPU nothing.
Names that stick. Name a speaker once and they keep it across sessions. In a
one-on-one, the other person can be named automatically. Profiles can be merged
when the same person is split in two, and a wrong merge can be undone without
destroying the calibration behind it.
A speaker gallery with per-speaker language restrictions, bulk editing, and
deletion. Each speaker can carry its own allowed-language list that overrides the
global priority.
Game audio is not a person. Another player's music or game sound is not
treated as that player speaking.
Understanding it
26 translation engines, plus a passthrough that sends your text through
untouched. Free ones that need no key, the paid majors, the Chinese providers, the
LLM APIs, and local engines that run on your own PC:
| No key needed | Google (free endpoint), Bing, MyMemory, QQ TransMart, Papago |
| Dedicated APIs | DeepL, Azure Translator, Yandex, Baidu, Tencent, Caiyun, Volcano, Alibaba, Youdao |
| LLM | OpenAI, Gemini, Groq, OpenRouter, Kimi, DeepSeek, PLaMo, Google TLLM |
| Local, on your machine | Ollama, LM Studio, LibreTranslate, M2M100 |
It fails over on its own. Engines are ranked by measured reachability and
latency. When the one you are on throttles, dies, or hits its quota, the next one
takes over without you noticing. Your hand-curated engine order is respected and
not silently rewritten.
Each direction can use a different engine. What you send out and what you
receive do not have to route the same way.
Picking the language up
This is the part no other VRChat translator does, and it is the reason the app
exists.
Readings, on every line. You always see the original, its pronunciation, and
its meaning together, so the script stops being opaque:
- Japanese: romaji, or furigana over the kanji, with optional pitch accent
coloring and a stepped pitch display - Mandarin: pinyin with colored tones, tone sandhi applied, and word grouping
- Cantonese: jyutping, with its own tone set
- Korean: Hangul romanization
- Also Cyrillic, Greek, Hindi, Thai (RTGS), and Arabic with optional
diacritization - IPA as an alternative to romanization anywhere a reading is shown
You choose where readings appear. Transcript, translation, chatbox, desktop
overlay, VR overlay, screen text, microphone side, loopback side. Each is a
separate switch, globally or per language.
Clip studio. Any line you heard can be replayed, trimmed, and looped. Mark
lettered regions inside a clip, set a speed per region with the pitch preserved,
choose how many repetitions and how much silence between them, and play every
region in order. It is a shadowing tool built out of the conversation you just had.
Anki. Send a line to a flashcard deck over AnkiConnect, with the sentence, the
expression, the source, and the audio clip. Polyvox installs its own note type for
you.
Getting it into VRChat
The chatbox, over OSC. Transcripts and translations go straight into VRChat's
chatbox. The message format is yours to build: which blocks appear, in what order,
what gets truncated first when a line is too long. Send pacing adapts to your own
measured speaking cadence rather than a fixed timer, and each send records which
constraint it waited on.
Mute sync. Polyvox follows your VRChat mute state, and re-seeds when VRChat
restarts.
A desktop overlay. Always on top, positioned and sized how you like, with saved
positions you can switch between. Every block is individually hideable: speaker
pill, timestamp, source text, translation, transliteration, language badge,
translation engine. Arrow and WASD snapping, rebindable.
A VR tablet. A real panel in SteamVR and XSOverlay with a pointer ray you aim
and chrome you can press. Dock it, hide it, bring it back, scroll its history.
Per-controller-family defaults for the gestures, so it works with what you are
holding.
A tone glyph per line (Beta), derived from the text rather than invented, with
negation handling. You pick the emoji for each detected tone. Reaches the chatbox
and the VR overlay.
Speaking back
Text to speech, so a translation can be heard instead of read:
- Kokoro (Beta), a 160 MB model that downloads once and then speaks locally
- Windows voices, whatever is installed on your system
- VOICEVOX, for Japanese
- A cloned voice, matched to a sample you provide, with a likeness control that
tries several candidates and keeps the closest
Into other games. Route synthesized speech to a game's microphone and hold its
push-to-talk while a line plays. One profile per game, with setup guides for the
common ones.
Dictate anywhere. One hotkey starts and stops dictation from any application,
independent of the transcription pipeline.
Reading the screen
Screen text OCR. Point at a window or drag a highlighter over part of the
screen and Polyvox reads the text, translates it, and shows it with readings. The
bundled model reads 50 languages with no Windows language pack required; the
Windows OCR engine is there as a fallback for the languages you have packs for.
Useful for in-game signage, menus in a language you do not read, and the parts of
VRChat that are text rather than voice.
Your data
Transcription is local. Audio is decoded on your GPU. It is not uploaded for
the core loop to work.
Raw audio is never written to disk. No PCM dumps, no WAV corpus. The one
exception is a consent-gated, encrypted retention path you switch on yourself, and
it covers your microphone only, never loopback.
Translation is a network call, by nature, and the app is explicit about which
engin...
turkmed-tr-large-v3-q8_0
turkmedSTT/whisper-large-v3-turkish-general converted to GGML and quantized q8_0. License apache-2.0 (HF API license field). R-OFA.8 opt-in Turkish row.
OCR models v1
PaddleOCR PP-OCRv5/v6 ONNX exports (Apache-2.0), self-hosted for Polyvox first-launch download
naiveneuron-sk-turbo-q8_0
NaiveNeuron/whisper-large-v3-turbo-sk (license mit, verified via the HF API license field 2026-09-17) converted to whisper.cpp GGML and quantized q8_0. 874188075 bytes, SHA256 76e808163d58c1dbd6b1418fd78b066ce0f49cdad9b8eb5734ff4dd4bb4ccb62. Source model.safetensors SHA256 f96ba6785a70e95387909a70e8eb1d5455c7e62cfb19c8fc6d4f25cb3148a9c3.