Toast
A popup in ComfyUI when you'd miss the beep
- any
Audio notifications have a hole: they only work if you're near the machine and the tab isn't muted, and on a headless or remote setup there's no tab at all. The Toast node from ComfyUI-AsyncPause plugs that gap with the opposite approach - a visible popup that appears in the ComfyUI browser window itself when the node runs. It doesn't need speakers, doesn't need your attention on the right tab, it just materializes on screen: a message with a color that tells you at a glance whether this was a success or a warning.
This is the output node variant, so it's a terminal - one input in, nothing out, hung at the end of the branch whose completion you want flagged. Its passthrough sibling does the same popup while letting data flow through, for mid-pipeline checkpoints. This one says "done," and it does it with styling.
The inputs that matter
This node has real inputs, not just a trigger wire, and they're all worth knowing:
any(required) - the trigger. Feed it whatever you're waiting on; it's not used beyond firing the node.detail(multiline text) - the message body shown in the toast. The node's tooltip calls it "detail message to display in toast," and it's the thing people actually read, so make it meaningful: "Upscale complete - 4 tiles" beats "done."severity(dropdown:success,info,warn,error,secondary,contrast; defaultinfo) - controls the toast's look.successfor clean finishes,warn/errorwhen you want a jump-out-at-you color,contrastif you want maximum visibility on a light theme.life(integer, default 3000) - how long the toast stays open, in milliseconds, before auto-closing. 3000 is three seconds, which is about right for a glance; bump it to 5000–8000 if you're away from the screen and want it to still be there.
A small quirk: the toast's title (summary) is hardcoded to "Toast node executed" in the pack's JS - you can't edit it. You get to customize the detail text, the severity color, and the duration, and that's it. Fine in practice; just don't go hunting for a summary field that doesn't exist.
How it works
Same skeleton as the audio nodes: backend execute() returns a dummy UI trigger, and frontend JS calls ComfyUI's built-in toast API (app.extensionManager.toast.add) with your widget values. Zero Python dependencies, nothing plays, nothing downloads.
Install
# ComfyUI Manager → Custom Nodes → search "Async Pause" → Install → restart
# or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/vilanele/ComfyUI-AsyncPause
# restart ComfyUI
Where it fits
The README's suggested pattern is the good one: pair toast notifications with the pack's Pause node, often wrapped in a subgraph, so you get notified when a checkpoint is reached and when you've continued. Audio tells you while your back is turned; the toast is there when you look up. Use both - a chime pulls you to the screen, and the toast tells you what happened while you were away. If the toast doesn't appear, the usual culprit is the same rerun cache that affects every node in this pack: unchanged inputs mean the node may not re-execute, so nothing fires. Change something upstream to force it, or use it as a terminal node at the end of a branch whose outputs change naturally.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| any | * | — | |
| detail | STRING | Detail message to display in toast | |
| severity | COMBO | info | Message severity level |
| life | INT | 30000–1000000000 | Duration in milliseconds before auto-closing |
Outputs (0)
No outputs