Nodes/ComfyUI-SaturnNodes/πŸͺ ⏸️ Saturn Decision
ComfyUI Node

πŸͺ ⏸️ Saturn Decision

Is this draft worth the expensive half?

By KOFibltoΒ·Created 2 months agoΒ·Updated 2 days agoΒ· 1
πŸͺ ⏸️ Saturn Decision
    • cancel
    β—„disablefalseβ–Ί
    β—„send_os_notificationfalseβ–Ί
    β—„timeout-1β–Ί

    Most workflows have a cheap half and an expensive half. A first pass that takes eight seconds, then a hires pass, a detailer, or a video render that takes eight minutes. Normally you find out whether the cheap half was any good after you've paid for the expensive one. This node inserts a stop sign between them: the run pauses, you look at the intermediate result, and you click Continue, Cancel, or Stop Workflow.

    How it works

    When execution reaches this node, it registers a wait on that node's id, tells the frontend to light up the buttons, and then blocks the executing thread. Crucially, it doesn't block blindly - it polls every half-second and checks ComfyUI's interrupt flag, so hitting the normal cancel/stop button in the UI unblocks the node cleanly instead of leaving a zombie thread holding your GPU.

    • Continue β†’ the cancel output returns False.
    • Cancel β†’ cancel returns True.
    • Stop Workflow β†’ the node cancels the current queue item, interrupts model processing, and raises ComfyUI's interrupt exception so the run dies immediately.

    And here's the useful part: because cancel is a real value produced during this run, you can wire it into a switch node downstream. Continue (False) routes execution into the expensive branch. Cancel (True) routes it into a passthrough - the cheap result you already have gets saved, and the costly half never runs. That's a "should I keep going" gate, not just a stop button.

    Two smaller mechanics worth knowing: disable short-circuits the whole thing and returns False immediately, and the wait is interruptible rather than fire-and-forget, so a decision node that never gets clicked doesn't wedge the server - it wedges the run, which is a different and recoverable thing.

    Inputs and outputs

    • disable - bypass the gate entirely; the node behaves as if you'd clicked Continue.
    • send_os_notification - fires a native desktop toast when the pause happens. On Windows it's a PowerShell toast, on macOS an osascript notification, on Linux notify-send. Handy for the "walk away from the machine" workflow.
    • timeout - seconds to wait before auto-continuing. -1 (the default) means wait forever; the maximum is 3600.

    One output: cancel, a BOOLEAN.

    Install

    ComfyUI Manager β†’ search SaturnNodes, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/KOFiblto/ComfyUI-SaturnNodes
    

    Restart ComfyUI. The pack's requirements.txt is Pillow, numpy and piexif - nothing extra for this node. The Linux notification path shells out to notify-send, so if you're on a bare container or without a notification daemon, the toast silently doesn't appear (it logs the failure rather than erroring). Category is πŸͺ SaturnNodes/Utils.

    Where people get burned

    You queued a batch and now you're clicking. A decision node fires once per queued item. Queue twenty and you'll sit there clicking twenty times. Set disable on, or give timeout a sane value, before you batch anything.

    timeout of -1 means the run waits indefinitely. Nothing crashes; the GPU just sits idle while the job holds its queue slot. If you've forgotten it's there, the fix is the normal cancel button - the node's interrupt polling means that works.

    Editing the canvas while paused doesn't change the run. The prompt was serialized when you hit Queue; your live edits apply to the next run. The only thing your click changes is which branch downstream of the decision executes. So don't pause expecting to rewire the graph - pause expecting to route it.

    The desktop toast doesn't arrive on Linux. notify-send has to exist and a notification daemon has to be listening. Cosmetic only; the pause still works.

    Cancel and Stop Workflow are different. Cancel lets the workflow finish down the other branch - you get outputs. Stop Workflow kills the batch and you get nothing past that point. If you want the cheap half saved, use Cancel.

    CategoryπŸͺ SaturnNodes/Utils

    Inputs (3)

    NameTypeDefaultDescription
    disableBOOLEANfalseβ€”
    send_os_notificationBOOLEANfalseβ€”
    timeoutINT-1-1–3600β€”

    Outputs (1)

    NameTypeDescription
    cancelBOOLEANβ€”