GPU Status Info
The health-check node hiding inside a GPU monitor overlay
- status_json
You know the drill: the queue is grinding, the fan is howling, and you're alt-tabbing to a terminal to run nvidia-smi and figure out whether you're VRAM-starved or just waiting on the CPU. ComfyUI-GPUStatusPanel exists to kill that alt-tab. Install it and a small draggable GPU monitor floats in the top-right corner of the UI, refreshing every second with color-coded bars for GPU load, VRAM, temperature, and power draw.
The GPUStatusNode ("GPU Status Info") is the pack's quieter half. In the source, the author literally calls it a test node - a quick way to confirm the node system picked the pack up. It's a display/output node that dumps the exact same JSON the floating panel is reading, straight into your graph. You don't need it for the panel to work, but it's handy when you want GPU state logged as part of a workflow rather than eyeballed.
How it actually works
The pack registers an HTTP endpoint, GET /gpu_status, and a chunk of JavaScript polls it every second to feed the overlay. The node just calls the same backend function and pretty-prints the result. That function walks a chain of backends, in order:
- NVML (via
nvidia-ml-py) on NVIDIA GPUs - full data: utilization, VRAM, temperature, power. - torch.cuda - VRAM only. Useful fallback when NVML isn't available.
- MPS on Apple Silicon - system memory as a VRAM proxy, since MPS doesn't expose dedicated VRAM stats.
- psutil - CPU utilization plus system memory, for the "no GPU monitoring at all" case.
There's a one-second server-side cache behind all of it, so hammering the endpoint (or re-running the node in a batch) doesn't spam NVML. The status_json output is a STRING, indented JSON - you'll see backend, an ok flag, and a gpus array with one entry per device.
The inputs and outputs that matter
This node has a single input and a single output, so this is the whole short list:
refresh(BOOLEAN, defaultTrue) - here's a gotcha worth knowing: the code declares it and then never reads it. Flipping it toFalsechanges nothing; the data is always fetched fresh up to that one-second cache. It's a cosmetic toggle.status_json(STRING) - the JSON payload described above. Since the node is marked as an output node, it runs on every queue and shows its result inline. You can also wire it into anything that eats a STRING - a Save Text node, for instance - to log per-run GPU state alongside your outputs.
Installing it
The easy route is ComfyUI Manager: search for ComfyUI-GPUStatusPanel and install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/zwglass/ComfyUI-GPUStatusPanel.git
cd ComfyUI-GPUStatusPanel
pip install -r requirements.txt
Then restart ComfyUI. Dependencies are light: nvidia-ml-py (for NVML), psutil, and aiohttp - and aiohttp already ships with ComfyUI, so really only the first two are new. No models, no API keys, nothing downloaded.
Common issues & troubleshooting
- The panel doesn't appear. Close it and the visibility flag is stored in localStorage, so it stays hidden across reloads. Refresh the page to bring it back, and hard-refresh (Ctrl+Shift+R) if you installed it while ComfyUI was running.
- Utilization/temperature show N/A on NVIDIA. That means NVML didn't initialize and it fell back to torch.cuda, which only reports memory. Make sure
nvidia-ml-pyactually installed, and that the driver is alive. - On Apple Silicon, "VRAM" looks like system RAM. That's not a bug - MPS doesn't expose dedicated VRAM, so the pack shows system memory as a reference. Read it as "how much of the shared memory pool ComfyUI is using," not a GPU-specific number.
Honest verdict: the overlay is the reason to install this pack, and it earns its keep on long generations. The node itself is a diagnostic toy - a way to log GPU state into the graph or just confirm the pack loaded. Keep it around for that, and you'll stop alt-tabbing so much.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| refreshopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| status_json | STRING | — |