GPU Monitor π
GPU Monitor Reads nvidia-smi So You Don't Have To β Just Don't Call It Real-Time
- report
- gpu_util
- mem_util
- temp_c
- power_w
GPU Monitor is the node you drop in when you're halfway through a long batch and you want to know if your card is actually sweating or just idling. It reads nvidia-smi, hands you utilization, VRAM, temperature and power draw as plain numbers, and builds you a formatted report. No model downloads, no API, no state - it's about as low-risk as a custom node gets.
That's the good news. The honest part: the name oversells the "monitor" part. ComfyUI runs a node once per queue execution, so this gives you a snapshot at the instant it fires, not a live dashboard. And if you look at the source, the refresh_interval input is accepted and then never read - the node doesn't poll or loop. You set it to 0.1 and it behaves identically to 10. That's fine for what it is, but if you want a real-time overlay, task manager or watch nvidia-smi in a terminal does the job better.
How it works
Under the hood it's a single subprocess call:
nvidia-smi --query-gpu=utilization.gpu,utilization.memory,temperature.gpu,power.draw --format=csv,noheader,nounits
The output gets parsed and split across the node's outputs. The only real dependency is that nvidia-smi is on your PATH - on Linux with driver packages that's usually true; on Windows it lives in C:\Program Files\NVIDIA Corporation\NVSMI and normally gets added when you install the driver. If it can't find nvidia-smi, you get a Failed to query GPU report and a pile of zeros instead of numbers.
The inputs and outputs that matter
Only two inputs, and really only one does anything:
- metric - a dropdown (
all,memory,utilization,temperature,power) that controls what thereportstring says. Pickallfor the full block, or a single metric if you just want the one line. - refresh_interval - cosmetic, as covered. Leave it at 1.
The outputs are where it gets useful. report is a STRING you can pipe into a text display node (plain ShowText or rgthree's Show Text) or a logger. But the four numeric outputs are the actual gold:
gpu_util(FLOAT) - GPU utilization %mem_util(FLOAT) - memory utilization %temp_c(INT) - temperature in Β°Cpower_w(INT) - power draw in watts
Wire those into an If/else or a condition, and you can do things like "if the GPU is at 0% utilization, assume the run is stuck." That's a genuinely reasonable use.
One thing that will trip you up
mem_util comes straight from nvidia-smi's utilization.memory, which is memory bandwidth utilization, not "how full your VRAM is." The card can be 90% full and still read 5% because nothing is hammering the bandwidth at that moment. So don't read it as "how much VRAM is left." Ironically, the memory option in the metric dropdown uses torch.cuda.memory_allocated() instead, which is real allocated VRAM - so the two paths can disagree. Good to know before you build a workflow around that number.
Installing it
Standard pack install, from the shared comfyui-rtx4090-nodes repo:
cd ComfyUI/custom_nodes
git clone https://github.com/joe002/comfyui-rtx4090-nodes.git
Then restart ComfyUI. ComfyUI Manager can also find it under "comfyui-rtx4090-nodes". Dependencies are featherweight (just torch and psutil, and honestly it only uses torch for the memory metric) - no models, no heavy installs.
Bottom line: it's a tidy little utility from a brand-new pack, and it works as advertised as long as you read "snapshot" for "monitor." The numeric outputs are the reason to install it; the report string is just a bonus.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| refresh_interval | FLOAT | 1.000.1β10 | β |
| metric | COMBO | 5 options: all, memory, utilization, temperature, power |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| report | STRING | β |
| gpu_util | FLOAT | β |
| mem_util | FLOAT | β |
| temp_c | INT | β |
| power_w | INT | β |