GPU Temperature Protection
A GPU cooler that works by stopping, and its author says don't use it
- image
GPU Temperature Protection does exactly one thing: when your GPU core gets too hot, it pauses generation until the card cools back down. It's a "cooling fan" you install in the node graph instead of your PC case. And here's the thing - the README literally opens its notes section with "I don't recommend anyone using this extension." That honesty is the whole review. Read that as a hint about where this node fits: it's not a fix, it's a band-aid for a card you can't otherwise cool.
What it actually is
It's a single node in the utils category, an output node that takes an IMAGE in and does nothing with it. You hang it off the end of your workflow - the README shows it wired after VAE Decode - and it runs whenever that upstream node finishes. Each time it runs it pokes nvidia-smi for the GPU core temperature, and if the card is above your sleep_temp, it blocks the ComfyUI worker thread in a time.sleep() loop until the temp drops below your wake_temp or a maximum pause budget runs out. No dependencies, no models, no API: the whole thing is the Python standard library plus nvidia-smi, which ships with every NVIDIA driver. That makes it one of the least annoying custom nodes you'll ever install - no requirements.txt dependency hell like the rest of the ecosystem.
The inputs that matter
You wire your image in (any IMAGE output works, not just VAE Decode - the value is ignored), then set four numbers:
- sleep_temp (default 79): if the GPU exceeds this in °C, generation pauses.
- wake_temp (default 52): it keeps pausing until temp drops below this. Set it above sleep_temp and the pause never triggers.
- max_sleep_time (default 180): a safety valve in seconds. After this long it gives up and resumes anyway, so a stuck card doesn't hang your queue forever.
0means pause indefinitely. - min_interval (default 5): minimum seconds between temperature checks, so it isn't hammering
nvidia-smievery step and dragging down performance.
Two toggles: enabled (on/off without deleting the node) and print_enabled (dump the temp readings to the terminal while it's sleeping). The image input and enabled are required, everything else is a number field with a sane default.
The gotcha the README won't tell you
The README says sleep_time is "seconds to sleep before checking temperature again." Look at the actual source and sleep_time is never used - the loop sleeps for self.sleep_temp seconds instead. So a sleep_temp of 85 means 85-second sleeps per check. It works, but the "Sleep Time" slider does nothing in the shipped code. Adjust expectations before you wonder why pauses are so long. Also note that even with print_enabled off, the node prints a GPU Temperature: line every single run - the terminal gets chatty.
Install
Two ways, both painless:
# ComfyUI Manager: search "GPU temperature protection" and click install
cd ComfyUI/custom_nodes
git clone https://github.com/meap158/ComfyUI-GPU-temperature-protection.git
Then restart ComfyUI. It's NVIDIA-only - nvidia-smi is the entire sensing layer, so AMD cards read 0 and do nothing.
When to reach for it (and when not to)
A hot card during generation is the symptom, not the disease. The r/StableDiffusion thread about this exact repo got the standard answer: 80-84°C is normal for a 3090 under load, throttling kicks in around 95°C, and you're better off undervolting or setting a power limit in MSI Afterburner - you keep the performance and the card runs cooler, instead of stopping entirely. This node makes sense when you can't do that: a laptop you can't undervolt, or a secondhand card you're babysitting until you can fix the airflow. It also blocks the whole queue while it sleeps, so you can't use it to "pause between gens and do something else." For a temporary protector it's fine and dead simple. For a permanent solution, listen to the author.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| enabled | COMBO | 2 options: True, False | |
| print_enabled | COMBO | 2 options: True, False | |
| min_interval | INT | 50–9223372036854776000 | — |
| sleep_time | INT | 50–9223372036854776000 | — |
| max_sleep_time | INT | 1800–9223372036854776000 | — |
| sleep_temp | INT | 790–125 | — |
| wake_temp | INT | 520–125 | — |
Outputs (0)
No outputs