A standalone VRChat OSC companion by NekoSuneVR — chatbox, heart rate, now playing, Discord, world radar & more, in one polished themed app.
Chatbox · Status · AudioLink · Now Playing (KAT) · Component & Network stats · Heart rate (Pulsoid / HypeRate / local device bridge) · Avatar Locker · TikTok / Twitch / Kick counters · TikTok TTS · IntelliChat · Discord Rich Presence (world + Join button) · Discord Voice Bot · VRChat auto-status · Radar · Weather · OSCQR · SpotiOSC · DiscordOSC · ShazamOSC · Soundpad · Stopwatch · Calculator · Auto-AFK · OBS overlay.
| Module | What it does | Needs |
|---|---|---|
| Live Typing | Sends chatbox text while you type, with optional translate-before-send | VRChat OSC; optional translator |
| Translation & Speech | Translator settings, TikTok TTS, hosted/custom LibreTranslate, DeepL, Google, MyMemory, and STT/TTS roadmap | optional provider endpoint/API key |
| Multi-client OSC | Mirror outgoing OSC to extra VRChat clients and listen on extra receive ports | extra VRChat OSC ports |
| Avatar Scaling | VRChat native OSC height scaling from 0.01 to 10000.00, with global hotkeys |
VRChat OSC |
| Avatar Search Providers | Built-in VRCX-style avatar search providers plus custom endpoint support | external avatar search endpoint |
| Localization | App language picker and locale foundation with English fallback | ongoing translation coverage |
| 💬 Chatbox | Type to VRChat + auto-rotate live data lines | — |
| 📝 Status presets | Templated lines with {tokens} |
— |
| 🔊 AudioLink | Low/Bass/Mid/Treble spectrum over OSC | audio output device |
| 🎵 Now Playing | Windows media + KAT + chatbox posting, with timestamp/progress tokens and custom text bars | Windows |
| 🎬 TikTok followers | Live followers / viewers / new follows | creator must be live |
| 🟣 Twitch followers | Follower total (Helix) | Client ID + OAuth token |
| 🔑 OAuth Accounts | Shared provider applications, redirects and tokens | your provider app credentials |
| 🟢 Kick followers | Follower total + live state | channel slug |
| 🗣 TikTok TTS | Voice synthesis via gesserit.co | — |
| ✨ IntelliChat | AI rewrite/spellcheck/shorten/translate | OpenAI-compatible key |
| 🖥 Component stats | CPU/GPU/RAM load & temps | — |
| 🌐 Network stats | Up/down + ping | — |
| 🪟 Window activity | Active app/window title | — |
| ❤️ Heart rate | Live BPM + session history; generic local input for unsupported devices | Pulsoid token, HypeRate key, or a local bridge |
| 🔐 Avatar Locker | Verify signed ownership packages and send avatar feature locks over OSC | A signed .nalown package |
| 🔌 OSC Apps | Native OSCQR, DiscordOSC, SpotiOSC, Twitch interactions, song recognition, Realistic Leash, Rusk Laserdome, and Digital Clock | OSC receive; optional Twitch, Discord Bot, or recognition credentials |
| 💜 Discord Rich Presence | World + ❤️ BPM + 🎵 song, with a Join World button | Discord App ID |
| 🤖 Discord Voice Bot | Read voice state + server mute/deafen via OSC (no allowlist) | your own bot token |
| 🦊 VRChat auto-status | Detect 🟢/🔵/🟠/🔴 from your account | VRChat login (2FA ok) |
| 🫂 Social suite | Friends, groups, search, profiles, favourites, notifications, create group instances, bio prefabs | VRChat login |
| 🧰 VRChat tools | YouTube fix (yt-dlp), VRCVideoCacher install/run, cache tools | Windows |
| 📡 Radar | Live list of players in your instance | reads VRChat log |
| 🌦 Weather | Current conditions as {weather} |
a city (Open-Meteo, no key) |
| 🔊 Soundpad | Trigger Leppsoft Soundpad sounds | Soundpad running |
| ⏱ Stopwatch / 🧮 Calculator / 💤 Auto-AFK | Handy tools, post to chatbox | — |
| 🔋 VR gear battery | HMD/controller battery | native OpenVR helper (see below) |
| 🖥 OBS overlay | Now-playing browser source | — |
cd "D:/DEV/NekoSuneVRAPPS/VRChatStuff/NekoSuneOSC"
npm install
npm startIn VRChat, enable OSC (Action Menu → Options → OSC → Enabled). NekoSuneAPPS sends
to 127.0.0.1:9000 and can receive on 9001 (configurable in Settings — receive
must be on for KAT, SpotiOSC and DiscordOSC).
For multiple VRChat clients, add optional extra ports in Settings -> OSC. Example:
primary VRChat 9000/9001, second VRChat 9002/9003; add 127.0.0.1:9002 as an
extra send target and 9003 as an extra receive port.
The sidebar is grouped into VRChat, Tools, and General.
- Live Typing sends chatbox text as you type and can translate before sending.
- Translator supports LibreTranslate, DeepL, and Google Translate provider settings.
- Avatar Scaling uses VRChat's native OSC height-scaling params and supports precise
values from
0.01to10000.00, plus optional global hotkeys. - Localization adds an app language picker and locale files with English fallback.
- Multiple VRChat clients can be targeted from Settings -> OSC. Keep the first
client on
9000/9001; if a second client uses9002/9003, add127.0.0.1:9002under extra send targets and9003under extra receive ports. Outgoing chatbox, params, AudioLink, KAT text, DiscordOSC, and Avatar Scaling messages are mirrored to extra send ports. OSC listeners can also hear the extra receive ports while receive is enabled or another feature is listening. - Now Playing status tokens include source, elapsed time, duration, and
{songbar}; the text progress bar can be styled as bars, stars, diamonds, dots, squares, or thin blocks.
- Pulsoid: token at pulsoid.net keys with
data:heart_rate:read. The Heart Rate page uses Pulsoid's redirect-free Device Authorization Flow fordata:heart_rate:readonly. Device posting uses a separate manually issued token withdata:heart_rate:write; the two token fields are never copied or combined. The app client ID and read scope are configured inmodules/heartrate/providers/pulsoid/pulsoid.config.json. - HypeRate: request an API key from HypeRate, then enter it + your
hyperate.io/<id>device ID. - Unsupported devices: select Other device / local bridge, start the receiver,
then send JSON such as
{"bpm":72}tohttp://127.0.0.1:7392/heart-rate. Pulsoid-compatible{"data":{"heart_rate":72}}payloads and?bpm=72requests also work. Enable Also feed readings to Pulsoid and use a token withdata:heart_rate:writeif you want the same readings available in Pulsoid. - Bluetooth LE devices: under Other device / local bridge, use Scan nearby to discover watches and monitors or Paired / remembered to reload devices previously granted to NekoSuneAPPS. Devices implementing the standard BLE Heart Rate Service connect directly. GMANS WATCH is also supported through its built-in proprietary protocol adapter; other proprietary watches require their own adapter. The last watch is cached in AppData and automatically reconnects while the app is on another page or hidden in the tray. A 45-second no-reading watchdog restarts stale GATT sessions, while live GMANS optical frames keep a measuring session alive even before BPM is available. Use BLE debug log for local scan/connect/frame diagnostics. An experimental screen-off handshake replay is available but disabled by default: captures show that its payload changes between sessions, so it is not a reliable substitute for opening the watch's Heart Rate screen. For GMANS firmware, enable watch-side automatic heart rate instead; this uses the official app's scheduling command and works with the watch screen closed. Automatic samples may be periodic or stored for history rather than streamed continuously.
- Beko Smooth Heartbeat 3.x / VRC Heart Rate: leave its OSC profile enabled and the
app sends
VRCOSC/Heartrate/Valueplus connection, average, beat, normalized and digit fields from any selected provider. Only enable the legacyHRoption for a 2.x avatar. - Akaryu HeartRate OSC 3.0: sends
hr_percent,hr_connected, andhr_beat; its maximum BPM is configurable and defaults to the originalhr-oscvalue of 200. - VRChat account (auto-status / Radar): log in on the VRChat tab. Handles email & authenticator 2FA. Your password is never stored — only the session cookie, locally.
- Discord (Rich Presence): an Application (Client) ID from the Discord Developer Portal. A default ID is preset.
- Discord (Voice Bot): create a bot, copy its token, use the in-app Invite link to add it to your own private server, and enter your Discord user ID. It stays invisible.
- ShazamOSC song recognition: enter your own token from the
AudD dashboard. Audio is captured only from the screen/system
audio source you explicitly share, then a short clip is sent to the selected provider.
ACRCloud is also available with a project host, access key and access secret. Automatic
mode tries configured providers in order; optional GPL
node-shazamis detected but never bundled by NekoSuneAPPS. - TikTok: enter the creator's
@usernamewhile they are live (add a free Euler Stream key if you hitSignatureError). - Twitch: Client ID from the Twitch Dev Console, then
authorize it once from OAuth Accounts. It requests
moderator:read:followers,chat:read, andchannel:read:redemptionsfor counters and Twitch Interactive. - Kick: your channel slug (after
kick.com/). - OpenAI / compatible: an API key from your provider.
- Translator: choose LibreTranslate, DeepL, or Google Translate in Settings.
LibreTranslate needs your own
/translateendpoint; DeepL and Google need API keys. Live Typing can translate text before sending it to the VRChat chatbox.
Enable OSC receive in Settings, then drive these VRChat avatar parameters (bool):
SpotiOSC /avatar/parameters/VRCOSC/Spotify/PlayPause (also /Next /Previous /Stop)
Media /avatar/parameters/VRCOSC/Media/Play (also /Skip /Next /Previous)
DiscordOSC /avatar/parameters/VRCOSC/Discord/Mic (also /Mute /Deafen)
Clock /avatar/parameters/VRCOSC/Clock/Hours (also /Minutes, Float 0–1)
Date/time /avatar/parameters/DateTimeHour (also Minute /Day /Month, Int)
OSCQR /avatar/parameters/OSCQR/StartRecording (also ReadQRCode; outputs QRCodeFound/Error)
ShazamOSC /avatar/parameters/ShazamOSC/Recognize (also LiveListening; outputs Recognized/Listening/Error/OSCTrackID/BassLevel)
When DiscordOSC is enabled, the app also publishes
VRCOSC/Metadata/Modules/YUCP.VIRA.yeusepesmodules.discordosc as a Bool.
OSCQR, SpotiOSC, and ShazamOSC publish equivalent lowercase module metadata flags.
NekoSuneAPPS/
├─ main.js # Electron main — owns all network/native modules + IPC
├─ preload.js # IPC bridge (window.electronAPI)
├─ renderer.js # UI logic, chatbox composer wiring
├─ index.html # themed tabbed UI (CSS-variable theme engine)
├─ settings.js # electron-store persistence
└─ modules/
├─ vrchat/ # VRChat-specific
│ ├─ osc/ # OSC + KAT, media keys (SpotiOSC)
│ ├─ chatbox/ # chatboxComposer — merges + rotates sources
│ ├─ status/ # presets + token resolver
│ ├─ audio/ # AudioLink spectrum
│ ├─ world/ # world + radar (log tailer)
│ ├─ api/ # VRChat API (auto status)
│ └─ vr/ # vrBattery (extension point)
├─ heartrate/ # providers, BLE/device bridges, analytics and OSC profiles
├─ weather/ # Open-Meteo
├─ integrations/ # grouped external/service integrations (see its README)
│ ├─ osc/ # QR, recognition, clocks, leashes and Laserdome
│ ├─ ton/ # all ToN modules, data, saves and tonOsc
│ ├─ discord/ # Rich Presence, RPC and DiscordOSC bot
│ ├─ media/ # Soundpad and Photo Relay
│ └─ maintenance/ # updater and Windows notifications
├─ oauth/ # shared OAuth provider implementations
├─ live/ # TikTok, Kick, TTS and consolidated Twitch runtime features
├─ media/ stats/ activity/ ai/ overlay/
Network/native code runs in the main process and streams updates to the renderer
via mainWindow.webContents.send(...); the renderer subscribes with
electronAPI.on('<channel>', cb).
VR battery is read through the native OpenVR runtime (openvr_api.dll). There is no
well-maintained pure-Node OpenVR binding, so modules/vrchat/vr/vrBattery.js currently
reports unavailable. To make it real, ship a small native helper (C#/C++ using OpenVR)
that prints device-battery JSON and spawn it from that module.
npm run build:win # Windows nsis + msi
npx electron-builder --linux # AppImage + deb
npx electron-builder --mac # dmg + zip (run on macOS)CI builds all three OSes on every push via
.github/workflows/build.yml. Pushing a vX.Y.Z tag also
publishes a GitHub Release with the installers attached. The app ships no native
node-gyp modules, so Windows/macOS/Linux all build without a C++/Python toolchain
(window-activity uses the OS's own CLI: PowerShell / osascript / xdotool).
Source-available contribution license — All Rights Reserved. © 2024–2026 NekoSuneVR. You may run official unmodified releases for personal use, and you may fork and modify the code only to prepare fixes, features, integrations, documentation updates, or removal proposals for submission back to the official repository. You may not redistribute modified builds, reuse the code in other projects, inject code into VRChat, add malware, or use the code/assets/docs/issues/pull requests/contributions to train AI. See LICENSE, CONTRIBUTING.md, TOS.md, PRIVACY.md, and DISCLAIMER.md. Version history is in CHANGELOG.md.
