Nodes/ComfyUI-Flamin-Galah/Flamin Galah Shutdown
ComfyUI Node

Flamin Galah Shutdown

Make ComfyUI turn the PC off when the queue drains

By flamin-galah·Created 30 days ago·Updated 6 days ago· 1
Flamin Galah Shutdown
  • trigger
  • trigger
◄enabledfalse►
◄actionshutdown►
◄delay_seconds60►

You queued a forty-minute video render at 11pm and went to bed. The machine finished at 11:52 and then sat there burning 300 watts until you wandered back in the morning. That's the entire reason this node exists.

Flamin Galah Shutdown sits at the end of a workflow, passes whatever you feed it straight through, and - if you flip one toggle - arms a Windows shutdown or reboot on a timer. It's a power switch with a wire attached. Four inputs, one output, no dependencies, no API calls, no models to download.

Fair warning: set it up carelessly and it will power your machine off mid-queue.

How it works

The source is about twenty-five lines. When the node executes it runs:

cmd = ["shutdown", "/s" if action == "shutdown" else "/r", "/t", str(delay_seconds)]
subprocess.run(cmd, check=False)

That's a plain Windows shutdown.exe call with an action flag and a timeout. No shell string building, no elevation, no third-party service. The enabled check happens before it, so with the toggle off the node is a pure pass-through.

Why wrap a one-liner in a node? Ordering. This thing declares itself an output node (OUTPUT_NODE = True), and output nodes are always part of the execution set - the engine starts at them and walks backwards, running upstream only when something changed (see comfyui-node-plumbing.md). Terminal nodes are guaranteed to run, so wire it after your save step and the shutdown arms after the file is on disk.

The * type on the trigger socket is ComfyUI's "any type" wildcard, which is what lets one node sit downstream of an IMAGE, a VIDEO, or a string without rewiring.

The inputs and output

trigger - required, any type. Passed through unchanged. This is your sequencing wire, and it's the thing people get wrong: connect it to the last node in the chain you care about. Core save nodes often have no output socket, so wire the trigger from whatever upstream node produces the object your save consumes. Usually close enough in order - but see the queue warning.

enabled - boolean, defaults to false. Off means no-op. This is your safety catch: leave it off in any workflow you save or share.

action - shutdown or reboot, default shutdown. reboot maps to shutdown /r, which is handy if you want the box to come back up clean and release VRAM.

delay_seconds - integer, default 60, minimum 10, maximum 86400, step 10. The floor of 10 means no instant power-off; closest you get is ten seconds of "oh no."

Output: trigger (*) - the same object you fed in. Wire it onward if you want; most people leave it dangling.

Installing it

You're installing a whole pack to get this one node - the other three are MiniMax H3 prompt writers built on Ollama or the xAI Grok API. They're inert unless you use them, and the pack declares zero Python dependencies, so the cost of carrying them is a few menu entries.

ComfyUI Manager: search Flamin Galah (the pack publishes under PublisherId flamin-galah). Or clone it:

cd ComfyUI/custom_nodes
git clone https://github.com/flamin-galah/ComfyUI-Flamin-Galah.git

Then restart ComfyUI fully - not just a browser refresh - and look under Add Node → System. The README warns the upstream repo may still carry older node titles and suggests the author's ZIP build instead; the shutdown file itself is nodes/node_shutdown.py and its internal ID hasn't changed across the renames. One pack folder only: a nested ComfyUI-Flamin-Galah/ComfyUI-Flamin-Galah/ means duplicate registrations or an import error, and the README says so outright.

Where people get burned

The queue is the trap. ComfyUI runs queued items one at a time, and this node fires on each execution. Queue five renders, walk away, and the shutdown arms sixty seconds after item one finishes - while item two is still sampling. Use a single-item queue, or set delay_seconds to cover the whole batch. Every run re-issues the command.

Windows shutdown implies /f whenever /t is above zero. Force-close comes with the deal: no polite save prompt, no waiting on a half-written file.

Cancel early, cancel often. shutdown /t puts up a desktop notice and gives you a window to bail:

shutdown -a

Keep that in muscle memory. Test with a 300-second delay on a normal evening, not at 2am with an overnight render half done.

Windows-only in practice, and it fails quietly elsewhere. There's no platform check in the code, and subprocess.run(..., check=False) ignores a non-zero exit. On Linux or macOS the call goes out, the flag syntax doesn't match, and you get… nothing. Same in a Docker container or on a remote ComfyUI box: it shuts down that machine, not the one you're sitting at.

And the saved-workflow version: a workflow with enabled set to true arms a shutdown the next time anyone runs it, including you in six weeks, having forgotten. Ship workflows with the toggle off.

CategorySystem

Inputs (4)

NameTypeDefaultDescription
trigger*—
enabledBOOLEANfalse—
actionCOMBOshutdown2 options: shutdown, reboot
delay_secondsINT6010–86400—

Outputs (1)

NameTypeDescription
trigger*—