MessageBox
A Windows popup that taps you when the graph finishes — if you're on Windows
- any_input
- result
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:
titleandtext- what the box says.textis multiline.button_type-MB_OK,MB_OKCANCEL,MB_YESNO, and a few more exotic ones likeMB_ABORTRETRYIGNORE.MB_OKis the sane default.icon_type- information, warning, error, or question icon.block-truepauses the workflow until dismissed;falseshows 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 toany_inputand 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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| title | STRING | ComfyDL | — |
| text | STRING | Hello from ComfyDL! | — |
| button_type | COMBO | MB_OK | 6 options: MB_OK, MB_OKCANCEL, MB_ABORTRETRYIGNORE, MB_YESNOCANCEL, MB_YESNO, MB_RETRYCANCEL |
| icon_type | COMBO | MB_ICONINFORMATION | 4 options: MB_ICONINFORMATION, MB_ICONWARNING, MB_ICONERROR, MB_ICONQUESTION |
| block | BOOLEAN | true | — |
| any_inputopt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| result | STRING | — |