Doom (RyanOnTheInside)
Yes, There's a Doom Node. No, It's Not Running on Your GPU.
- IMAGE
Every generation tool eventually gets the question "can it run Doom?", and ComfyUI's answer arrived the way these things usually do: as a joke someone shipped anyway. RyanOnTheInside's Doom node puts the actual shareware DOOM in a little window inside your node graph. The README says it best - "Doom in ComfyUI. For Posterity." This is not a production tool. It's a flex, a break from waiting on a 4-minute SDXL batch, and honestly one of the better party tricks the ecosystem has produced.
Here's the thing that trips people up: the game is not running on your GPU, and it isn't part of the diffusion pipeline at all. The Python side of the node is nearly empty - run_doom() just builds a black 512×768 placeholder image with "RyanOnTheInside" stamped on it and returns it. The actual game lives in a frontend widget (doom_widget.js) that ComfyUI loads into the node's DOM. That widget pulls in js-dos - DOSBox compiled to run in your browser - and boots DOOM.EXE from a shareware zip. No model files, no API key, no VRAM. Just your browser fetching a 1993 game over the internet and emulating a CPU that's weaker than a toaster.
Inputs and outputs (all two of them)
The node takes zero inputs. Not one. It's the only node you'll ever add that can't be wired into anything - which is the point.
The single IMAGE output is a placeholder frame, not a capture of gameplay. The classic trap is assuming you can feed that IMAGE into a VAE Decode or a video encoder and get your Doom run back as a generation. You can't; you'll just get the static "RyanOnTheInside" card. The game happens in the widget, on the canvas, in your browser. If you want to record a run, you're screen-capturing like it's 1998.
How to install it
Easiest path is ComfyUI Manager - search "Doom" and install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_Doom
Then restart ComfyUI. There's no requirements.txt and no install script: the only imports are numpy, OpenCV (cv2), and torch, all of which ship with ComfyUI already. If you've ever installed a node with three conflicting requirements, you'll appreciate how rare that is. The catch is that the browser half needs internet at runtime - js-dos, jQuery, Font Awesome, and the DOOM zip are all fetched from external hosts when the node spawns, not bundled locally.
What goes wrong
- Nothing renders. The widget needs to reach
thedoggybrad.github.ioand the CDNs. Ad blockers, corporate proxies, or an offline setup kill it silently - the errors go to your browser's console ("Failed to load scripts"), not ComfyUI's. If the game window is empty, that's the first place to look. - Keyboard focus fights. In-browser DOSBox is notorious for this - click into the canvas, lose focus, and your WASD stops responding until you click back. It's the single most-complained-about thing in every "run Doom in a browser" thread, and this node is no exception. The fullscreen button helps a little.
- Audio is flaky at best. Community reports on browser-DOSBox Doom consistently describe sound as unsupported or broken. Don't plan your playthrough soundtrack around it.
- Don't run it headless. The game is a DOM widget, so it only exists in the frontend. API-only or headless ComfyUI gets you the placeholder image and nothing else.
Worth knowing: this is a side joke from a serious author. RyanOnTheInside's real output is the big ComfyUI_RyanOnTheInside suite for real-time video work (he's behind ComfyStream and Daydream). The Doom pack is the "for posterity" drawer. Install it for the bit, keep it around for when someone in a workflow-share thread asks what the weird game node is, and don't expect it to do anything for your renders.
Inputs (0)
No inputs
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |