Your headset, controllers and trackers show their battery live on stream, and an alert pops up when something is running low. It's a normal OBS Browser Source - nothing to install into OBS.
Tip
Not streaming? You don't need OBS at all. Click Open in Browser in the app and use it as a personal low-battery alarm.
| 💿 Oh Fudge, My Battery Chat! | The app. One exe, nothing to install. |
| 🎙️ Oh Fudge VR Macro App | Optional. Big mute buttons in a small window you can pin in VR. |
| 🧪 Demo Simulator | Optional. Fake devices and microphones, to try things without a headset. |
Note
The exes aren't code-signed, so Windows SmartScreen may say "unknown publisher". Click More info → Run anyway.
- Start it with SteamVR already open. Your devices appear on the left.
- Click Add to add a battery readout (Add Device) or an alert (Add Overlay Effect), then drag it where you want it. Double-click a row later to edit it.
- Copy the URL at the top into OBS as a Browser Source (size 1920x1080). Done!
| 🔋 Live batteries | Any SteamVR device: headset, controllers, trackers. Use your own pictures, GIFs or videos - or the bundled art pack. |
| 🚨 Low-battery alerts | Pop in when a device drops below your %, with a sound. Nudge Groups line several alerts up so they never overlap. |
| ⚡ Charging | A picture while it charges, plus a warning if it's still draining on the charger. |
| 🎬 Overlay Effects | Standalone popups for: battery low / normal, device connected / disconnected, charging, tracking lost and headset removed (experimental). |
| 💜 Twitch chat commands | Let chat trigger an alert with a command like !battery - for everyone, VIPs or mods. |
| 🎙️ Microphones (experimental) | Alerts for a wireless mic: connected, disconnected, muted, talking, silent. |
| 🔘 Mute macros (experimental) | Mute, unmute or toggle a mic with a global hotkey or a big on-screen button. |
| 🧩 Sync Groups | Devices that pop in together, as a set, once all of them are ready. |
| 🎨 Make it yours | Fonts, colors, outlines, wobble / shake / pulse animations, dark or light theme. |
| 🌍 Languages | English, Deutsch, Français, Español, 日本語 and Klingon. |
Every device and every alert can use your own picture, GIF or WebM video - and its own sound. Leave a spot empty and the built-in icon is used. The app also comes with a pack of illustrated headset, controller and tracker art you can pick from (that's the second row in the picture).
- Open Add Device (or double-click a device in the list to edit it).
- In the Media section click Choose... next to Normal picture:. It opens the bundled art pack, or browse to your own file.
- Pick a Low battery picture: too if you want the art to change when the battery runs low, and a Warning sound: for the alert.
- Click Save. The overlay in OBS updates by itself.
Alerts (Add Overlay Effect) work the same way: pick a Picture: and a sound. Lost the art pack? ℹ About > Restore Icons brings it back.
All the setup happens in three simple windows: Add Device (a live battery readout), Add Effect (an alert) and Macros (mute buttons and hotkeys). Click the picture to see it bigger.
New (Experimental)
- Click Macros (top right), then Add: pick a microphone, what the macro does (mute, unmute or toggle) and, if you like, a global hotkey such as
CTRL+SHIFT+NUM5. It works while a game has focus. - For big on-screen buttons click Open Oh Fudge VR Macro App in the same window. If it isn't in the app's folder yet, the app offers to download it - only after you click Yes, and it's only kept if its checksum matches GitHub's.
- Each macro is a button that shows LIVE, MUTED or OFFLINE. It starts locked so nothing moves by accident: right-click > Edit layout to move and resize buttons and change their colors, then Done.
- Pin the window in VR with OVR Toolkit, XSOverlay or Desktop+. It never takes focus from your game.
Macros change the Windows mute setting. A wireless mic's own hardware mute button usually can't be seen by Windows, so use a macro (or Windows' mute) if you want the Mic Muted alert to react.
Get the Demo Simulator and drop OhFudgeMyBatteryChatSimulator.exe in the same folder as OhFudgeMyBatteryChat.exe. Run both: the app shows the simulator's fake devices and microphones, each with sliders and checkboxes. Close the simulator to go back to your real ones.
Adding the OBS Browser Source
- In OBS: Sources > + > Browser Source, name it, click OK.
- Paste the URL from the top of the app (default
http://127.0.0.1:8710/overlay). - Set Width
1920and Height1080. Positions scale to any canvas, but sizes are calibrated to 1920x1080. - Leave "Shutdown source when not visible" unchecked, so alerts keep working while the scene is off screen.
- No sound? Tick this source's "Control audio via OBS".
Once added it stays in sync by itself: adding, editing or removing something refreshes the Browser Source within about a second.
Adding a Device (a live battery readout)
- Click Add > Add Device.
- Pick the device on the left (click Refresh if it's missing). Tick "Show already-added devices" to reuse one.
- Give it a label and a low-battery threshold (%). Choose Always visible or Hidden until low.
- Pictures & Sound: click Choose... to browse the bundled art pack, or pick your own image, GIF or WebM. Skip anything to use the defaults.
- Style the text, add an animation, and drag it into place on the preview - it snaps to align with your other items.
- Click Save.
Adding an Overlay Effect (a standalone alert)
- Click Add > Add Overlay Effect.
- Target: a Specific Device, All Devices (the alert shows while every one of them matches) or an Audio Device (a Windows microphone).
- Trigger: pick when it shows, for example Battery Low or Mic Muted.
- Pick a picture and sound (or use the defaults), and add a caption if you like.
- Optional: type a chat command such as
!batteryso Twitch chat can trigger it too (link your account with Connect Twitch Account first). - Choose the animation, drag it into place, and click Save.
- Everything runs on your PC. The overlay is served on
127.0.0.1only. - The app only goes online when you ask it to: the optional update check (off by default), linking Twitch (you approve on Twitch's own page - you never type a password into this app), or downloading an optional companion tool after you click Yes.
- Windows only, and SteamVR needs to be open to see real devices.
- Some devices report battery in chunks, so they may show "n/a" until they're power-cycled or actually low. That's the device's driver, not a bug here.
- The microphone, tracking-lost and headset-removed features are new. They're tested with the Demo Simulator (and one wireless mic); tracking and headset proximity aren't confirmed on real hardware yet - reports welcome!
- Hotkeys: another program using the same combination wins, some games block global hotkeys, and NumLock must be on for numpad keys.
- If something goes wrong, the app says so and saves the details to
error.login itsDatafolder - please attach it to bug reports. Your settings are backed up toconfig.json.bakevery time they're saved.
Needs Python 3.12. The .spec files aren't in the repo, so use these commands:
pip install -r requirements.txt
pyinstaller --onefile --windowed --name "OhFudgeMyBatteryChat" --collect-all openvr --collect-all pycaw --collect-all comtypes --add-data "app/fonts;fonts" --add-data "assets;device_icons" main.py
pyinstaller --onefile --windowed --name "OhFudgeVRMacroApp" --paths . tools/vr_macro_app.pyTo just run it from the source code (no build), double-click run_dev.bat; run_dev_simulator.bat starts the Demo Simulator next to it. The dev copy keeps its own Data folder inside the project and says "(dev)" in its title.
MIT - see LICENSE. The bundled Klingon font is licensed separately under the SIL Open Font License (see app/fonts/LICENSE-pIqaD-qolqoS.txt).
Not affiliated with Valve, Meta, Twitch or OBS. Those names belong to their owners.
Built with Claude (Anthropic) via conversational pair-programming.





