Releases: shootthesound/ComfyUI-Angelo
v1.8.0 — Fix All + Vary ×4, toolbar tidy
The automation update: detect once, fix everything — and pick the best of four instead of re-rolling blind. Plus a toolbar tidy.
New features
⚡ Fix All
Detect "face" in a group shot, hit Fix All, and Angelo works through every candidate automatically — each at Xtra-Fine quality with your Area Prompt, each a separate history entry with individual Undo. The button becomes ■ Stop (n/total) while running, candidates turn green as they land, and stopping (button / Cancel Detect / Esc) halts after the in-flight one. The ADetailer move, but visible, stoppable, and prompt-controlled.
🎲 Vary ×4
Re-roll with four dice: one click generates four variations of your most recent edit (same mask, same starting image, four seeds) and overlays a 2×2 chooser on the preview. Click your favourite — it replaces the last attempt. ✕ or Esc keeps the current result at zero cost; nothing commits until you pick. Conditioning is encoded once and shared across the four passes, so it's cheaper than four separate re-rolls — on a 4-step distilled model the whole set takes a few seconds.
They compound: Fix All for the broad pass, Vary ×4 for the one stubborn candidate it didn't nail.
Toolbar tidy
- Toggle buttons drop the ": ON/OFF" text — state is the lit colour fill, like every other creative tool. Much narrower edit row.
- The Xtra-Fine values (MP / Max / Ctx Pad / Method) now appear only while Xtra-Fine is ON.
- Mask −/+ grow controls moved into the floating detect panel (they only apply while candidates are up) — the Detect row's concept box gets the width back.
- Undo / Redo are now a compact joined ⟲ ⟳ pair.
- 🖼 Load Image / Unload moved up beside the Mode dropdown — the generation row is now pure sampler config.
- The floating detect panel got a solid black background.
Compatibility
New hidden widgets (vary_seq / vary_pick / vary_pick_seq) are declared last in the input schema — existing saved workflows load unchanged.
Full changelog: v1.7.0...v1.8.0
v1.7.0 — Restore brush, before/after compare, Prompt Slots
A photographer's-workflow update: three new editing features plus two accuracy fixes.
New features
🖌 Restore brush (#12)
Toggle Restore ON (the amber button next to Paint Mode) and paint — the region heals back to the session's original base image, instantly. No sampling runs at all: it's a feathered latent blend, so it costs milliseconds. The Lightroom "erase part of an edit" gesture: refine a spacesuit, then brush the face inside the helmet back to the original. Works with clicks, Paint Mode strokes, and Detect masks; Undo/Redo step through restores like any edit. Refine mode only.
⚖ Hold \ for before/after compare
Hold the \ key while hovering the preview to flash the original base image (with a BEFORE badge); release to return to the current state — Lightroom's compare key. Works in any mode, respects your zoom.
🔢 Area Prompt Slots (#12)
Six numbered preset buttons in the Area Prompt header, each holding its own positive + negative text. Preset "detailed face" / "ornate armour" / "lush foliage" once, then just click a number and paint. Saved with the workflow.
Fixes (#28 — thanks @KursatAs)
- Non-square click accuracy: the click radius now uses the geometric mean of the per-axis pixel→latent scales, so the refined region matches the on-screen circle on portrait/landscape images instead of mapping to an ellipse.
- Xtra-Fine VAE ratio: pixel-per-latent ratio now uses
round()instead of floor division, preventing a subtle 1-px seam drift with non-integer-ratio VAEs.
Compatibility
The two new hidden widgets are declared last in the input schema, so existing saved workflows load unchanged.
Full changelog: v1.6.4...v1.7.0
v1.6.4 — full custom-sampler control via Overrides (#8)
Brings full SamplerCustomAdvanced-style sampler control to Angelo via the existing Angelo — Overrides companion node. Power-sigma schedulers, the Flux 2 scheduler, NAG-Extended, custom guiders — anything that produces the standard GUIDER / SAMPLER / SIGMAS types from a stock ComfyUI sampler-stack chain now works end-to-end.
What's new
Custom-sampler trio on the Overrides node (closes #8)
Three new optional slots on Angelo — Overrides: guider / sampler / sigmas. Wire any GUIDER (CFGGuider, BasicGuider, NAG variants), any SAMPLER (KSamplerSelect etc.), and any SIGMAS source (BasicScheduler, KarrasScheduler, PolyexponentialScheduler, power-sigma nodes, the Flux 2 scheduler) into them.
When all three are wired, Angelo runs through guider.sample(...) instead of comfy.sample.sample(...). The toolbar's steps / cfg / sampler_name / scheduler become moot (replaced by what's wired), but the Denoise slider still applies — sigmas are tail-sliced per call, matching ComfyUI's SplitSigmasDenoise convention. So the refine slider keeps meaning what it did before.
All-or-nothing on the trio. Partial wiring (e.g. only sampler) silently falls back to the standard path. Default UX is completely unchanged — the new slots are optional on the Overrides node, which is itself optional on Angelo.
Works across every Angelo sample path: Sampler Mode, Edit Mode click-refine, Xtra-Fine, Smart Inpaint, Smart Guided Inpaint. All four internal sample sites route through a single dispatch (_do_sample).
Credits
The three helper functions at the heart of this — _guider_sample, _guider_with_conds, _truncate_sigmas_for_denoise — are taken verbatim from @KursatAs's customSampler branch (link). Full credit to him for the design and for the NAG-Extended compatibility fix: ComfyUI-NAG-Extended overrides inner_sample without moving CPU tensors to the model's load device, which collides with the k-sampler's inpaint path; his device-safe wrapper fixes that and is now part of Angelo.
The Angelo adaptation here is just the integration shape — optional via the Overrides companion node rather than required on the main node — so the existing one-node-drop UX stays intact for the 95% of users who don't need this.
Update
ComfyUI Manager → Update, or git pull in the ComfyUI-Angelo folder.
v1.6.3 — disable_live_preview flag for the Overrides node
Small follow-up to v1.6.2: adds a fifth widget to Angelo — Overrides for users on ComfyUI frontends where the global latent preview renders into Angelo's node mid-sample and squashes the editor area.
What's new
disable_live_preview on the Overrides node (closes #21)
- New BOOLEAN widget on the existing Angelo — Overrides companion node, default False.
- When ON, suppresses ComfyUI's live latent preview for that Angelo node only — other samplers in the same workflow (KSampler etc.) keep their previews as configured globally.
- Mechanism:
run()passescallback=Nonetocomfy.sample.sampleinstead oflatent_preview.prepare_callback(...). No callback → no per-step preview frames are generated, nothing to render, nothing to squash.
Lives on the Overrides node rather than the main node body to keep AngeloRefine's surface clean — Overrides is the established home for "drive Angelo's behaviour from the workflow instead of the toolbar" settings.
Who needs this
If you've ever bumped ComfyUI's Settings → Preview method to Latent2RGB or TAESD and noticed Angelo's editor canvas getting compressed during sampling, this is the fix. If you keep that setting on None (Angelo works fine for you), you can ignore this release entirely.
Update
ComfyUI Manager → Update, or git pull in the ComfyUI-Angelo folder.
v1.6.2 — Angelo Overrides companion node
Adds an optional Angelo — Overrides node so users with a central workflow source-of-truth for steps / cfg / sampler_name / scheduler can drive those values into Angelo from elsewhere in the graph instead of duplicating them on the toolbar.
What's new
Angelo — Overrides companion node (closes #25)
- Lives in the same
sampling/Angelocategory as the main node. - Four widgets —
steps,cfg,sampler_name,scheduler— each with a sentinel default (-1for INT/FLOAT,(toolbar)for the combos) meaning "don't override this one — use Angelo's toolbar value". - Outputs a single
ANGELO_OVERRIDESwire.
Angelo — click to refine gains one new optional input
overridesslot on the left edge. WireAngelo — Overrides's output into it and any non-sentinel field on the Overrides node replaces the matching toolbar widget for that run. Per-field opt-in — override onlysteps, onlysampler_name, or any mix.- Zero visual change to the main node body — just one extra slot dot on the left when unwired.
The pipe pattern was chosen over per-param forceInput slots because forceInput: True on optional inputs proved unreliable across ComfyUI versions for delivering wired primitive values. Routing through a typed custom bundle (ANGELO_OVERRIDES) sidesteps that quirk completely.
Stale comment cleanup
The right-click-image block in web/angelo.js had a leftover comment claiming clipboard paste had been removed. PR #17 re-added it in v1.5.0; updated the comment to list the three current load paths (drag-drop, Load Image, Ctrl+V).
Update
ComfyUI Manager → Update, or git pull in the ComfyUI-Angelo folder.
v1.6.1 — cursor under graph-zoom, SAM 3 hardening, templates browser
Small but meaningful: fixes the cursor-drift bug under ComfyUI's graph zoom, hardens SAM 3 install, and the example workflows now show up in ComfyUI's templates browser. No breaking changes.
What's new
Canvas wheel-zoom no longer drifts under graph zoom (closes #15)
When the ComfyUI graph itself was zoomed in/out (Ctrl-scroll on empty canvas), Angelo's wheel-zoom on the preview was anchoring the cursor in CSS-scaled coords but dividing by unscaled pane dims — so each wheel tick walked the image sideways. The wheel handler now converts cursor position through the graph's CSS transform first; the click handlers were already invariant. Thanks @KursatAs for the diagnosis (#23).
SAM 3: SHA256-verified download
The auto-downloaded sam3.pt is now hash-verified against the known-good 1038lab/sam3 checksum before being installed. A mismatched download is deleted and surfaced as a clear error rather than silently loaded. SAM 3 loads via torch.load (pickle), so this also doubles as a tamper guard at rest.
SAM 3: fallback to main-thread detect on background CUDA OOM
On WSL / containerised CUDA setups, the first allocation inside the executor thread can trip a spurious torch.OutOfMemoryError despite ample free VRAM (per-thread context bookkeeping). Detect now catches that specific exception and retries synchronously on the main thread; the typical path still goes through the executor.
Example workflows in ComfyUI's templates browser (closes #18)
Renamed workflows/ → example_workflows/. ComfyUI auto-lists this convention under Workflow → Browse Templates → ComfyUI-Angelo, so the bundled Klein 9B and Qwen-Image-Edit examples are now discoverable without a docs hunt — especially useful on ephemeral remote ComfyUI instances. README links updated.
If you previously bookmarked a workflows/... path in a custom integration, update it to example_workflows/.... The JSON files themselves are unchanged.
Credits
Thanks to @FNGarvin (PR #19) for the SAM checksum, the in-process fallback diagnosis, and the example_workflows folder suggestion; and to @KursatAs (PR #23) for the cursor-coord fix.
Update
ComfyUI Manager → Update, or git pull in the ComfyUI-Angelo folder.
v1.6.0 - Qwen-Image-Edit support
Highlights
- Qwen-Image-Edit support (and other temporal / 5D-latent models like Wan), now a first-class edit model alongside FLUX 2 Klein. Generate, Refine, Xtra-Fine, Area Prompt, Smart Inpaint, and Smart Guided Inpaint all work. Fixes #14.
Fixes
- Qwen/Wan 5D latents — the VAE boundary is centralised so 5D
[B, C, T, H, W]decode output is folded for previews, and the base latent is normalised to the dimensionality each model expects before sampling (the step stock KSampler does, which the node was bypassing). - Smart Inpaint feathering on Qwen/Wan — no longer distorts. The feather now lives in the pixel composite + latent blend (the standard Qwen-edit recipe) rather than the denoise mask; 5D sampling uses a binary mask. FLUX/Klein behaviour is unchanged.
- Preview width — the preview/controls now fill the full node width instead of snapping to a narrow column on the left when you click into the node.
Docs
- README rebalanced: FLUX 2 Klein 9B and Qwen-Image-Edit are presented as co-equal first-class edit models.
- Added a bundled Qwen-Image-Edit 2511 example workflow (
workflows/Qwen Edit 2511 example.json).
v1.5.0
v1.5.0
Two community contributions from @bananasss00:
Ctx PadUI control for Xtra-Fine (#16) - the context-padding around the painted crop is back as a visible toolbar input. Widen it to give the edit model more surrounding context. Locked to 0 in the Smart modes (as before).- Ctrl+V / Cmd+V image paste (#17) - hover the Angelo canvas and paste an image straight from the clipboard; it routes through the same resolution popup as drag-drop and Load Image. Only intercepts when the clipboard actually holds an image, so pasting nodes/text elsewhere is unaffected.
v1.4.1
v1.4.1
Fix: Smart Inpaint on large rectangles.
A Smart Inpaint rectangle larger than the upscale target (roughly >1024px on FLUX 2) hit a Refine-only latent-space shortcut that skipped the crop + reference_latents + masked-zero step. The model then worked on the whole-image latent instead of the selected region, so a large rectangle reproduced the whole scene instead of editing just the rect.
Smart Inpaint now always crops + references the selected region regardless of rectangle size (large rects crop at native resolution; no upscale, no downscale). Small rectangles and all Refine paths are unchanged.
v1.4.0
v1.4.0
New features
- Redo button to complement Undo — button-only (the Ctrl-Z / Ctrl-Y shortcuts were dropped as they clashed with ComfyUI graph-level undo/redo). (#6)
source_imageoutput — a third output emitting the original pre-edit base, ready to wire into image-compare nodes. (#3, #9)- F to fit — press
Fwith the cursor over the node to reset the view to fit. (#10) - Right-click + drag-drop — right-click the preview to open it in a new tab or copy it; drag-drop an image file onto the node to load it (same resolution/upload path as the Load Image button). (#7)
Fixes
- XtraFine no longer degrades across repeated edits — clean pixel buffers are carried between edits instead of re-decoding through the VAE each time. Thanks @bananasss00 (PR #13).
- Smart Inpaint reference/prompt fix — while Area Prompt is on the refine now uses the Area text exclusively (even when empty), never the main prompt, and the upscaled-crop reference replaces any inherited
reference_latents. Fixes an empty-Area-Prompt Smart Inpaint reproducing the whole scene into the region. - Smart Inpaint feather now defaults to 15 (soft blend), still adjustable.