Nodes/GPU temperature protection/GPU Temperature Protection
ComfyUI Node

GPU Temperature Protection

A GPU cooler that works by stopping, and its author says don't use it

By meap158·Created 3 years ago·Updated 2 years ago· 3
GPU Temperature Protection
  • image
    enabled
    print_enabled
    min_interval5
    sleep_time5
    max_sleep_time180
    sleep_temp79
    wake_temp52

    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. 0 means pause indefinitely.
    • min_interval (default 5): minimum seconds between temperature checks, so it isn't hammering nvidia-smi every 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.

    Categoryutils

    Inputs (8)

    NameTypeDefaultDescription
    imageIMAGE
    enabledCOMBO2 options: True, False
    print_enabledCOMBO2 options: True, False
    min_intervalINT50–9223372036854776000
    sleep_timeINT50–9223372036854776000
    max_sleep_timeINT1800–9223372036854776000
    sleep_tempINT790–125
    wake_tempINT520–125

    Outputs (0)

    No outputs