🖼️ Aaalice Image Picker
Pick the keepers before you burn VRAM upscaling every frame
- images
- images
Generate a batch of six, eyeball them, keep the one that isn't cursed, and let the expensive stuff run only on that one. That's the whole workflow slot Aaalice Image Picker fills, and it's a slot most people don't realize they need until they've spent twenty minutes upscaling five rejects.
The name is the description: it's a IMAGE → IMAGE node that pauses the workflow and opens a modal overlay in your current ComfyUI page. You click which images make it through, hit confirm, and the graph continues with just those. It's a quality gate for the expensive stages - hires upscaling, detailing, or saving - so you're not paying GPU time to refine frames you're going to delete anyway. Curating a batch is trivial in a web UI and clunky to express in a graph, which is exactly where a dedicated node earns its keep.
How it works
Under the hood it's a small client/server dance. When the node executes, it saves your batch as a temporary preview (through ComfyUI's own preview mechanism), registers a session in a server-side store, and then blocks until you confirm, cancel, or a timeout fires. The overlay lives in the ComfyUI page that started the run - no separate window, no iframe. The countdown is judged on the server's monotonic clock, so a throttled or backgrounded browser tab can't silently extend the deadline. When you confirm, the node returns the selected images in original batch order; if you cancel, empty-confirm, or let a cancel timeout run out, it raises ComfyUI's interrupt exception rather than quietly handing an empty batch downstream. First terminal state wins if confirm/cancel/timeout race.
One implementation note worth knowing: this pack is written against the newer backend node API (io.ComfyNode + io.Schema + a ComfyExtension), not the classic NODE_CLASS_MAPPINGS style. It loads fine in current ComfyUI - a missing NODE_CLASS_MAPPINGS in a modern pack means "new API," not "broken." The node is also marked non-idempotent, so every queue run forces a real pick instead of reusing a cached result. That's a feature here: you don't want a stale confirmation being replayed.
The inputs that matter
You'll actually touch three of these:
images(requiredIMAGE) - the batch to review. Feed it the output of a KSampler or any batch-producing node.selection_mode-singleormultiple(defaultmultiple). Both still require an explicit confirm; a one-image batch even pre-checks itself but waits for your click anyway. No accidental auto-submit.timeout/timeout_action- together they're your escape hatch. Defaulttimeoutis 300 seconds andtimeout_actiondefaults tocancel, which means an unattended run dies when the timer expires. If you want a stopped workflow to keep going instead, set it tosubmit_allorsubmit_first.
There's also an optional instructions string input (it's force-input, so it needs a wire, not a widget): connect a multiline string node and your review criteria render as sanitized Markdown in the overlay. Useful for a shared workflow or for reminding yourself what "good" means at 2am. The single output, images, carries your picks in original batch order into whatever comes next - drop it into an upscale or detail pass.
Installing it
Easiest path is ComfyUI Manager: search "Aaalice Image Picker". Otherwise:
cd ComfyUI/custom_nodes
git clone https://github.com/Aaalice233/ComfyUI-Aaalice-Image-Picker.git
Restart ComfyUI after cloning. That's genuinely it - no Python dependencies and no CDN: the frontend ships vendored copies of marked and DOMPurify, so it works offline and won't phone home. It's MIT licensed. The pack is new and small (this node is its only one), so don't expect a huge community behind it yet - but the README is unusually thorough, which is a decent proxy for maintainer care.
The gotchas
The big one: the workflow will look frozen at this node, and that's the job. If you forgot the node is there, a five-minute timer with a cancel action will eventually interrupt the whole run - so decide your timeout_action before you walk away. Refreshing the page is fine (a reconnect with the same client ID restores a waiting session), but if you close every tab that started the run, the session can only end via its timeout. And don't expect this to render HTML or scripts in the instructions - the Markdown is allowlist-sanitized on purpose. If you've used "Image Chooser"-style nodes before, the shape will feel familiar; this one just adds the server-side deadline and a genuinely nice keyboard-driven zoom interface. For a pick-the-keeper gate, it's hard to argue with dependency-free.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The image batch to review. | |
| selection_mode | COMBO | multiple | Choose one image or any number of images before confirming. |
| timeout | INT | 3001–86400 | Seconds before the server applies the timeout action. |
| timeout_action | COMBO | cancel | Action applied by the server when the countdown expires. |
| instructionsopt | STRING | Optional Markdown instructions from a connected string node. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | The selected images in original batch order. |