Nodes/ComfyDL/MessageBox
ComfyUI Node

MessageBox

A Windows popup that taps you when the graph finishes — if you're on Windows

By Cynthia-lxx·Created 2 months ago·Updated 3 days ago· 6
MessageBox
  • any_input
  • result
titleComfyDL
textHello from ComfyDL!
button_typeMB_OK
icon_typeMB_ICONINFORMATION
blocktrue

CdlMessageBox pops a native Windows message dialog - the same "OK / Cancel / Retry" box Windows has been showing since the 90s - right in the middle of your ComfyUI run. It's a small quality-of-life node with a specific superpower: you can make ComfyUI pause until you click a button, or fire a popup and let the workflow keep running. Long batch? Big training run? Drop one of these at the end and you get a physical "done" instead of tabbing back to check.

There are two honest caveats up front. First, it's Windows-only - it calls MessageBoxW from user32.dll via ctypes. On Linux or macOS it doesn't error out; it returns the string [MessageBox unavailable: not running on Windows]. Second, in its default blocking mode it genuinely stalls the queue until you click the button, which means a popped dialog in the middle of a long queue holds everything behind it hostage. That's the feature, but it's also the annoyance.

How it works

The node uses ctypes.windll.user32.MessageBoxW to show a native dialog configured by your inputs. In blocking mode it calls the dialog directly and the workflow waits; in non-blocking mode it spawns a daemon thread that shows the box while ComfyUI carries on. The output result string reports the return code and its name (like 1 (IDOK)) - which is only meaningful in blocking mode, since a non-blocking dialog returns before you've clicked anything.

Inputs and output

The inputs that matter:

  • title and text - what the box says. text is multiline.
  • button_type - MB_OK, MB_OKCANCEL, MB_YESNO, and a few more exotic ones like MB_ABORTRETRYIGNORE. MB_OK is the sane default.
  • icon_type - information, warning, error, or question icon.
  • block - true pauses the workflow until dismissed; false shows and moves on.
  • any_input - a wildcard * input, which exists so you can wire something into the node and force it to run after that upstream step finishes. That's the real trick for "notify me when this specific thing completes": connect the thing's output to any_input and ComfyUI's executor will wait for it even in non-blocking mode.

The single output is result, a STRING.

Installing ComfyDL

It's part of the ComfyDL pack:

cd ComfyUI/custom_nodes
git clone https://github.com/Cynthia-lxx/ComfyDL
pip install -r ComfyDL/requirements.txt

Restart ComfyUI. The only extra dependency is matplotlib; the pack needs nothing else. ComfyUI Manager users: search "ComfyDL", and if it's not in the built-in list (the pack isn't on the official registry yet), use Install via Git URL with the repo link.

Common issues

The Windows-only limitation is the big one - on Linux/macOS it's a no-op string. The other gotcha: blocking dialogs stall the queue, so if you put one mid-graph and walk away, nothing behind it runs. If you want a non-blocking "done" alert, keep block off and wire a real input into any_input so it still fires at the right moment. And don't expect the button choice to control the workflow - the returned code is just a string for you to read; this node won't branch the graph based on Yes vs No.

Categoryutilities

Inputs (6)

NameTypeDefaultDescription
titleSTRINGComfyDL
textSTRINGHello from ComfyDL!
button_typeCOMBOMB_OK6 options: MB_OK, MB_OKCANCEL, MB_ABORTRETRYIGNORE, MB_YESNOCANCEL, MB_YESNO, MB_RETRYCANCEL
icon_typeCOMBOMB_ICONINFORMATION4 options: MB_ICONINFORMATION, MB_ICONWARNING, MB_ICONERROR, MB_ICONQUESTION
blockBOOLEANtrue
any_inputopt*

Outputs (1)

NameTypeDescription
resultSTRING