Nodes/ComfyUI-Flow-Assistor/Visual Marquee (Interactive)
ComfyUI Node

Visual Marquee (Interactive)

Hand-pick the crop, and the graph politely waits

By Merserk·Created 9 months ago·Updated about a month ago· 6
Visual Marquee (Interactive)
  • image
  • cropped_image
  • mask
  • tile_data
max_resolution1024
original_sizetrue
force_multiple_of_8true

Visual Marquee is the human-in-the-loop version of the detect-crop-refine pattern that Impact Pack's FaceDetailer made famous. FaceDetailer finds the region automatically with a detector; this node puts a marquee tool in your browser and lets you drag the region yourself. The payoff is the same loop that makes those workflows so effective - the region you actually care about gets processed at proper resolution instead of getting lost in a big frame - but with you in the detector seat. Perfect for one-off edits, weird regions a YOLO won't find, or when you just want to see the image and decide.

The workflow is intentionally simple: feed it an image, hit queue, and ComfyUI pauses. A crop UI pops up over your image in the browser, you drag a selection and confirm, and the node returns your cropped region plus the metadata needed to put it back.

How it works

The node saves your image to ComfyUI's temp directory, fires a browser event (flow_assistor_marquee_show) that the pack's frontend extension picks up, and then blocks the whole queue waiting for your selection - up to ten minutes. When you submit, the crop coordinates come back over the pack's /flow_assistor/submit_crop route and the graph resumes. Under the hood it crops your region, optionally resizes it toward max_resolution with Lanczos, and packages up the tile_data (original bounding box, target size, original image shape) that this pack's Tile Compositor reads on the way back.

The inputs that matter

  • image - what you're selecting from.
  • original_size (default true) - keep the crop at native size. Leave it on for most detail/img2img passes; turn it off only if you want the node to scale the crop toward max_resolution.
  • max_resolution (default 1024, 512–4096) - only applies when original_size is off. It resizes so the crop's longest edge hits this value.
  • force_multiple_of_8 (default true) - snaps the resized crop's dimensions to a multiple of 8, which keeps latent/VQ stuff happy when you scale. Harmless to leave on.

Outputs: cropped_image, a mask (all-ones over the whole crop - useful for full-crop inpainting passes), and tile_data for the paste-back step.

Wiring it up

The pack's own example is the template: Visual Marquee → process the crop (img2img, a detail pass, whatever) → Tile Compositor, feeding it the original image and the same tile_data from the marquee. Crop out, refine, paste back in place - no coordinate math by hand.

Install, and the gotchas that actually bite

Same pack-wide install as everything here:

cd ComfyUI/custom_nodes
git clone https://github.com/Merserk/ComfyUI-Flow-Assistor.git

Restart ComfyUI (or Manager → search "Flow-Assistor"). V3-only, Python 3.10+, no pip deps, no models.

Now the three things that will trip you up:

  1. This is a browser-interactive node. Queue it from the ComfyUI web UI, not from a headless/API-only client - if there's no browser to show the marquee, the node waits out its ten-minute timeout and errors. Hitting cancel also aborts the run, so "oops, wrong region" is a restart of the queue, not a quick undo.
  2. The frontend needs a fresh load. The marquee UI ships as a JS extension that ComfyUI registers at startup. If you installed the pack and immediately hit an old open tab that doesn't show the selection UI, fully restart ComfyUI rather than just refreshing.
  3. It's not idempotent. Re-queueing prompts you to select again every time, which is what you want for interactive use but worth knowing if you're looping it. And while the marquee is open, nothing else in the queue runs - that's the design, but don't put it in the middle of a batch you wanted to run unattended.
Categoryflow-assistor/image

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
max_resolutionINT1024512–4096
original_sizeBOOLEANtrue
force_multiple_of_8BOOLEANtrue

Outputs (3)

NameTypeDescription
cropped_imageIMAGE
maskMASK
tile_dataTILE_DATA