Node.js console that controls VirtualBox VMs through the VirtualBox Main API (via a PowerShell COM bridge) - with YouTube live-chat command control.
📖 Full documentation: wiki (commands, macros, voting, snapshots, configuration)
Note
This project was developed with the assistance of AI. All scripts are fine-tuned and contain no malicious intent of any kind.
- VirtualBox 7.x installed (default
C:\\Program Files\\Oracle\\VirtualBox) - Node.js 18 or newer
- A VM created in VirtualBox (settings.json, snapshots, etc. are all regular VirtualBox features)
- Click the green Code button on this page.
- Download ZIP and extract it anywhere.
- Open a terminal in the extracted folder and run:
npm start
That's it. No npm install, no node_modules.
From the project folder you can launch the CLI by name (no npm, no PATH setup):
offdisvm Windows: offdisvm (cmd) / .\offdisvm (PowerShell)
npx offdisvm or: npm start
list VM picker (arrows + Enter) - auto-starts if powered off
key enter send a key (also: key ctrl+alt+del - key tty2 - key ? = keys & linux presets)
type hello type text (no Enter)
send notepad type text + Enter
combo win+r key combo with hold
live <videoId> connect YouTube live chat - live stop to disconnect
help | ? this help - exit | quit
At the prompt the ! prefix is optional for exec commands (key enter = !key enter); chat always needs it.
Chat can post !key, !type, !send, !combo, !import, !wait <dur> (e.g. !wait 2s), !startvm, !restartvm, !revertvm, !voteban <author> - chains of commands in one message run atomically. !startvm boots a powered-off VM. !restartvm / !revertvm / !voteban are vote-gated (2 votes) and the VM ops share a 15 s cooldown. Macros live in macros/ (see macros/readthis.txt).
More details for everything above: wiki
Every session's console output is saved automatically to logs/ (a timestamped file) when you exit (Ctrl+C) or run !live stop.
There's nothing to install. Run a syntax check of every source file:
npm run check
CI (GitHub Actions) runs it on Windows with Node 18/20/22 for every push and pull request.
Live chat polling uses the vendored modern-youtubechat project (modern-youtubechat/dist/client.js). The DOM fallback (FallbackDOMcontent/fallback-chat.mjs) is a Chrome DevTools Protocol scraper using only Node's built-ins - see the wiki for details.
Enjoying the script? Sharing the repo or linking it in your YouTube description helps others find it: https://github.com/SynacNipo/Offdis-VM