Real-time captions for VRChat and Twitch, powered by Qwen3-ASR.
Turn your voice into text displayed inside VRChat's chatbox, or send transcriptions to a Twitch channel — no typing required.
- Live VRChat captions — sends real-time transcriptions directly to VRC's in-game chatbox via OSC
- Twitch mode — stream your own live captions to Twitch chat instead (
--twitch) - OBS browser source — built-in web server serves live subtitles for OBS Studio overlays (run with
--twitch) - Clipboard copy — dump full transcriptions to your clipboard (
--clipboard) - Hallucination & erase detection — filters ASR hallucinations and clears the buffer on an erase keyword
| Requirement | Details |
|---|---|
| OS | Linux or Windows |
| GPU | NVIDIA with 8+ GB VRAM (CUDA 12.8+) |
| Python | 3.12 |
| Package manager | uv |
# Clone the repo
git clone https://github.com/atomicflag/yap-to-text.git
cd yap-to-text
# Create a virtual environment and install dependencies
uv syncThat's it — uv resolves everything including the PyTorch and flash-attn wheels. The Qwen3-ASR model (1.7B) downloads automatically on first run.
Note: If you're not familiar with Python or the uv ecosystem, see uv getting started for a quick intro.
Copy the example config and fill in your values:
cp config.json.example config.jsonDefault mode sends text to VRChat's chatbox over localhost OSC. Just make sure VRChat is running.
- Register an app on the Twitch Developer Console
- Note your Client ID and Client Secret
- Add them to
config.jsonundertwitch, along with your channel name - On first run with
--twitch, a browser window opens for OAuth authorization — grant permissions and you're done
uv run python -m yttTranscriptions appear in VRC's chatbox in real-time.
uv run python -m ytt --twitchSends final transcriptions to Twitch chat and serves live captions via a local web server (port 9098) for OBS browser source. A blip sound plays when each speech segment ends.
To add the OBS browser source:
- Open OBS → Sources → Browser
- Set URL to
http://localhost:9098 - Adjust width/height as needed
uv run python -m ytt --clipboard # or --twitch --clipboardCopies the full running transcription to your system clipboard whenever a segment is finalized.
Run uv run python -m ytt --help to see all available command-line flags:
| Flag | Description |
|---|---|
--twitch |
Enable Twitch chat mode (sends to Twitch instead of VRC) |
--clipboard |
Copy final transcriptions to the system clipboard |
--config PATH |
Custom path to config.json (default: config.json) |
MIT — see LICENSE for details.
{ "twitch": { "app_id": "your_client_id", "app_secret": "your_client_secret", "target_channel": "your_channel_name" }, "hallucinations": ["The.", "."], "erase_keyword": "not what i said", "audio_input_device": null, "audio_output_device": null }