- Krea 2 Inpaint Masked: the saved-by-name copies of two notes now
match the positional text.
- Krea 2 Rotate + Outpaint: the note describes the tone match the
graph runs.
- Qwen Image 2.1 Inpaint: the note says the seed is fixed.
- Qwen Image 2.1 Upscale + Restore: the Megapixels note mentions the
roughly 2 MP minimum redraw.
- Qwen Image 2.1 Inpaint example: the note and Callout name Paint (Draw before 2.12.0), need 2.12.0, and link the workflow's video
- Mask by Touch example: needs 2.12.0 for Paint and Erase
- README: section summary covers the newer nodes and no longer counts the examples; compatibility line names the nightly check; Inpaint links its video
- pyproject: Mask by Touch in the description and keywords
The node's tool row is one switch, Pick | Paint | Erase (W, B, E). Paint
adds to the mask and Erase rubs it out, exactly as drawn. Ctrl, or the
right mouse button, does the opposite while held. The brush has a size
and a soft edge, set with [ and ], Shift with them, or Alt and the right
mouse button dragged, and it shows under the pointer as it will paint.
Chips are areas: brush marks carry the number of the chip they joined
(the selected chip, else the one they touch, else the paint chip), and
erasing makes no chip. A take-away that takes nothing is not kept; the
node now says per touch whether a take-away took anything ("did"). A
thing taken away keeps its own chip. Ctrl-click un-picks a pick, a click
puts a taken-away thing back. Chips wrap onto more rows.
Soft brush marks ("s" on a paint touch) make the selection soft on both
sides: apply_item and the face's joinMasks mix by strength, the edge steps
run on soft values as the server's do, and the selection picture is grey
where a soft brush painted. The node also sends each picked thing's own
area, so the face can tell which chip a mark touches.
The look at a picture can be paused and resumed from a button under the
picture, and starts on hover also behind Reroute nodes and the pack's own
loaders.
The brush is shared: js/shared/brush.mjs and nodes/_brush_helpers.py.
Image Compare A/B's Erase mode now flips with Ctrl instead of Alt, and
takes E and B as well.
Each example's Workflow Note gets a YouTube chip first in its links and one
linked line at the top of its how-to. The note is taller by what the new
lines need; nothing else in the examples changes. The README names the
channel next to Civitai and X.
Click a thing in your picture on Mask by Touch, say what to change, and
Qwen repaints only that part. It is the workflow of its page, with the
Seed on fixed as every example here has it.
The workflow carries a note above its Workflow Note that links to the
video channel. The example check wanted every node but the Workflow Note
inside a numbered group, so that note counted as a stray node. A Callout
in the Workflow Note's own column now belongs to the note. A Callout
anywhere else outside the groups, and any other node in that column, is
still refused.
A new node in the Mask group. The picture is on the node: moving over it
lights up what a click would take and names it, a click picks it, and two
arrows swap the pick for the next thing at that spot. Subject and
Background take the picture's main subject, or everything else, in one
click. Pick | Draw switches to a brush for an area painted by hand, + and -
add or take away, Undo takes a pick back, and every pick has a chip under
the picture. Fine edges follows hair and fur strand by strand, takes out
background seen between the strands, and gives a cut-out the thing's own
colour. The eye beside Undo and Clear shows the result as a cut-out or as
the mask. Outputs: the mask, the cut-out and the names of what was picked.
The search is ComfyUI's own SAM 3. Subject, Background and Fine edges use
ComfyUI's own background-removal model (ComfyUI 0.21 or newer). The pack
downloads nothing.
With it: a widget card can name its choices with a function and keeps
showing a value its list does not offer, the help page, an example
workflow with its thumbnail, the README section and the CHANGELOG entry.
The sampler started from the gray-filled crop, so a denoise under about
0.85 left a flat gray patch. It now starts from the plain crop; the
gray-filled copy stays the reference. A Float - Denoise box is wired to
the sampler. At denoise 1 the prompt differs only in that wire.
The example's controls now run in the order people use them: Megapixels,
one note about it and the Fast switch, the switch with its steps, then the
request and the seed. The picture's note says to load a picture first.
Same nodes, values and wires.
Two Image nodes that take a picture past the size a model can redraw in
one go. Tiled Upscale sets the finished size in megapixels and cuts the
picture into tiles; Tiled Upscale Stitch blends the joins, keeps each
tile's colors on the picture's own and fits the result to the size asked
for. Any model can sit between the two.
Adds the tile planner with its tests, the two widget cards, help pages,
README sections, a changelog entry, the API snapshot and a new example,
Qwen Image 2.1 Upscale + Restore. The README's example count now matches
the folder.
Mask by Name and Workflow Switches, with an example workflow that shows
both. The version pair, the changelog title, the description and the
keywords follow.
Each example keeps its inner steps in two boxes, and nothing on the canvas
said what was in them. A note now sits at the top of "Behind the scenes",
right above the boxes. It says what they do in one sentence, then
"Double-click one to see inside." The text is a heading, so it reads at
the zoom the examples open at.
The boxes and the Models group under them move down 158 px to make room.
In Krea 2 Inpaint Masked and Qwen Image 2.1 Edit + Realign the picture
nodes beside them are that much taller, so every group still ends level,
and the saved view is re-centred (Qwen opens at zoom 0.7, was 0.72) to keep
the whole top level in sight. In the watermark example the group grows
upward instead, where there was free canvas, so its boxes and wires stay
put. The Workflow Note card loses its "The two boxes in the middle do the
work" line and is that much shorter.
What each workflow sends to the server is unchanged apart from the
Workflow Note text. Checked in the classic view and in Nodes 2.0: no
overlaps, nothing outside its group, every note fits its text.
Krea 2 Inpaint Masked keeps a person you leave unpainted (Mask Refine's
Max hole size at 2). Klein 9B Outpaint blends its seam in, with Tone match.
Qwen Image 2.1 Edit + Realign fills see-through parts with gray and its
prompt writer keeps what the request doesn't name. The Krea 2 Outpaint and
Rotate + Outpaint notes add a tip for pulling far on one side, and the
examples that need this release say so. LTX 2.3 Video Outpaint makes room
for the taller clip node. Every file was re-saved by the frontend and
checked in the classic view and in Nodes 2.0.
The changelog no longer says Krea 2 Outpaint keeps its 3:4 ratio lit.
Krea 2 Outpaint and Krea 2 Rotate + Outpaint describe the canvas before
painting it. They now read the pad node's prompt_image, where see-through
parts of a picture show as white, so a cutout is described on a real
backdrop instead of the gray fill. For a picture with no see-through
parts prompt_image is the canvas itself, so nothing else changes.
Both Krea 2 Outpaint and Krea 2 Rotate + Outpaint now pass the pad mask to
Krea 2 Encode, so AnyPaint sees the new area in the picture's own colour
and paints it instead of copying the gray padding. They also feather the
join 32 px instead of 12, the width of the band AnyPaint was made to
redraw: a thin strip of new area had come back as a flat band with a hard
line at 100%, and with 32 it continues the picture.
At strength 1 the outpaint IC-LoRA left the new area black on some clips,
most often when the prompt described a close, framed shot. The LoRA now
runs at 1.5, and the prompt instructions ask for a wide shot of the whole
place with what fills every side, so they work for side and top/bottom
padding alike.
Groups that shared a bottom edge before the Nodes 2.0 sizing share one again: the shorter ones grow to the tallest. In the Krea 2 Outpaint and Krea 2 Rotate + Outpaint boxes, the two prompt groups that were 2 px apart now share a bottom too. Only group heights change; values, links, titles and the API prompt are unchanged.
Nodes 2.0 draws some nodes taller than classic, so every group now holds its nodes with 20 px in whichever renderer draws them bigger, and what sits below a grown group moves down with it. Show Text moves below Generate Text in Qwen Image 2.1 Edit + Realign, and the Watermark Remover's Reroutes get room above the nodes they feed, so nothing overlaps in either renderer. Each Workflow Note gets 12 px of spare height in classic. Values, links, titles and the API prompt are unchanged.
The example finds the mark with ComfyUI's built-in SAM 3.1 instead of
ComfyUI-RMBG, so it needs no other node pack and no extra download on the
first run. One set of settings feeds both the one-frame check and the whole
clip, and the layout matches the other examples. The README table and the
CHANGELOG describe the refreshed examples.
The same outpaint on 13 top-level nodes instead of 23, with the prompt
writing and the painting in two boxes. Both LoRAs load in one LoRA Loader,
the prompt instructions sit in their own Text node, and the video node saves
no padding with its 16:9 ratio chip lit, so a new clip is padded to fit.
Same models and output.
The example now pads with Image Crop + Rotate + Pad's ratio buttons, so the
padding is worked out for whatever picture is loaded instead of the
sample's pixels. The auto description describes only the setting: when it
described the person in a tight portrait, Klein painted a second face under
the join. Smaller layout with two boxes; needs AusBoss nodes 2.4.0. The
thumbnail shows the new result.
The same edit on 14 top-level nodes instead of 24: the prompt writer and the
edit sit in two boxes. Node titles use the real node names, the model
loaders are color-coded and the note is down to three steps. The graph and
its output are unchanged.
Both examples open with an empty image loader but still saved the sample's
turn and padding. Picking the first file in the input folder kept them, so
that picture got the sample's 12 degree turn or its 1045 px bands. They now
save no turn, no crop and no padding; Krea 2 Outpaint keeps its 3:4 ratio
chip lit, so a new picture is padded to 3:4.
The example saved Stay in picture off, so a big painted area was cropped past
the picture edge and painted at a smaller scale. It now saves it on, saves the
Stitch Inpaint seam as classic, and says it needs AusBoss nodes 2.4.0. The
thumbnail shows the new result.
Every image and video loader in the seven examples is saved with no file
picked, in both saved widget copies. Remove the three sample pictures the
new examples added, put the Registry archive budget back to 12 MB, and
update the README examples section and the CHANGELOG.
Replace it with the version that pads with Image Crop + Rotate + Pad,
with its sample picture and a new thumbnail. Point the README's Load
Image + Pad section at Klein 9B Outpaint, and update the example table,
the outpaint caption, the Krea 2 Outpaint Model Patch help page and the
CHANGELOG. Raise the Registry archive budget to 18 MB.
Keep Krea 2 Outpaint, Klein 9B Outpaint, LTX 2.3 Video Outpaint,
Qwen Image 2.1 Edit + Realign and Simple Video Watermark Remover, and add
Krea 2 Inpaint Masked and Krea 2 Rotate + Outpaint with their sample
pictures. Remove the other sixteen examples and the sample picture only
they used.
Update the README example table and links, the Realign to Source help
page, a test comment, the CHANGELOG and the pyproject description, and
raise the Registry archive budget to 13 MB.
Resolution Master is renamed Latent Size: the old name belongs to another
node pack. The node id AUSBOSS_NODES_Resolution is unchanged, so saved
workflows and API graphs load and run as before. Workflows only store a
title that differs from the default, so they pick up the new name; a saved
title that starts with "Resolution Master 🆎" gets the new name in its
place on load. The example, its thumbnail and the README image follow.
- Latent Size can be resized: wider stretches the chips, fields and size
picks, and taller gives the stage the room. It opens at 340 x 531 as
before and goes down to 320, where the size row tightens so W, H and MP
stay whole.
- LoRA Loader: gear -> Long names, end (the default, as before) or middle,
which keeps the checkpoint number at the end of a name in view. The
picker opens wide enough for long names and shortens the folder first.
- The frontend adds 104 px to a DOM panel's minWidth before using it as
the node's floor (LGraphNode.computeSize), so a node that opened
narrower jumped wider the moment its corner was touched: the LoRA Loader
could not go under 424. fillNodeHeight gains exactMinWidth, which
measures that padding and takes it back off, and holdVueNodeMinWidth
lends the floor to Nodes 2.0, whose corner drag reads the node's inline
min-width instead. Both nodes use them; the other panels keep their old
floors for now.
- README: the workflow-tools image shows Latent Size alone; the Seed card
is gone.
The example's Workflow Note and the Krea 2 Outpaint Model Patch help page
said you could paint over part of the picture with the mask editor and pad
at the same time. Load Image + Pad drops the picture's alpha, its mask
covers only the new padding, and it hides the core preview the mask editor
opens from, so that never worked. Both now say the workflow only extends
the picture outward.
The help page also said a Crop For Inpaint stitcher places the reference
over the full frame. On source rectangle it falls back to where the crop
sat in the full picture, so the page now says to use whole canvas with one.
- Qwen Image 2.1 Edit + Realign: type a short edit and Qwen3-VL 8B, the
text encoder the edit already loads, writes the full instruction. The
consistency LoRA sits in a LoRA Loader row, switched off.
- LTX 2.3 Video Outpaint: the distilled LoRA and the outpaint IC-LoRA load
in one LoRA Loader instead of two core loaders. The workflow checks now
refuse core LoRA loaders in examples.
- Realign to Source: description, tooltips and help page rewritten in
plain words, with the technical detail at the end of the help page.
- Settings menus: in a short window the rows no longer squeeze together
and overlap; the menu scrolls instead.
- AGENTS.md: text people read starts with the plainest version.
An edit made at the picture's own size loses whatever the model pushed
past the canvas edge, so realigning it left an empty strip on 13 of 16
held-out edits. Realign to Source now takes an optional stitcher: given
Load Image + Pad's stitcher for the padded canvas the edit was made on,
it measures inside the picture's area only and returns just that area,
so what the model drew into the margin fills the edges.
- A drift within half a pixel of a whole-pixel shift is cut straight
out of the edit with no resampling; an edit that already lines up
comes back untouched.
- The coarse pass also tries the edit at 0.86x-1.28x, so a large zoom
is found; models often reframe a padded canvas by zooming in to fill
it, and that zoom does not count toward Max zoom.
- The report says whether the frame was cut out or warped and names the
margin each side needed when an edit ran out of picture.
Load Image + Pad gains a mirror fill, which models read as more of the
scene: over 16 edits it provoked a reframe on 2, against 7 for edge
pixels and 5 for flat gray. The Qwen Image 2.1 Edit + Realign example
now edits on a 64 px mirror margin with the stitcher wired.
The Workflow Note's consistency LoRA paragraph now links the LoRA's
Hugging Face and Civitai pages where it is first mentioned, not only in
the links list at the bottom.
A LoRA Loader between the diffusion model and the reference cache loads
qwen-image-2.1-consistency.safetensors (step 1500) with the step 2000
file as an alternative row, and stops the run if the file is missing.
Qwen Image 2.1 restyles otherwise often come back about 4-5% taller and
shifted: over 36 held-out restyles the worst corner moved 24.3 px
(median) without the LoRA and 1.6 px with it.
The Workflow Note lists both files with their download links, the
README requirement row names the LoRA, and the example picture is a new
render of the updated graph.
Qwen Image 2.1 draws broad edits (watercolor, anime, oil) a few percent
taller than the source, up to about 12%, differently for every seed, and
snapping sizes does not change it. Realign to Source measures that zoom
and shift against the source and warps the edit back onto the source's
frame, at the source's size. empty_mask marks the strip the model pushed
out of view; report gives the measured zoom, shift and worst corner, or
why a frame was left as it is. The display name carries EXPERIMENTAL.
Promoted from the lab node. The measurement is unchanged (the same
matrices on 166 real Qwen 2.1 renders). The warp now samples the edit
with its edge pixels extended for every fill, so the gray and source
fills no longer draw a dark line beside the strip.
New example: Qwen Image 2.1 Edit + Realign, the Qwen 2.1 Edit graph with
the realign step after decode, its report, and before and after compares.
Resolved:
- node_image_crop_rotate_pad.py: optional inputs are the four resize
inputs, then stitch_blend, then stitch_grow; node_api.json regenerated
with test_node_api.py --update (no breaking change against main).
- test_transform_outputs.py: the optional-inputs test expects the stitch
inputs after the resize ones.
- transform_editor.mjs: the Inpaint & Stitch section and its status line
serve the image node too (feather branch) beside the size-chain status
(this branch); the Cancel code is #73's, line for line.
- LTX example note and the Clip help page carry both branches' wording.
- CHANGELOG keeps every bullet.
- Rotating keeps the crop's size over the same part of the picture from
the knob, slider, number box and Reset rotation (cropForRotation).
- A readout under the picture names every step that sets the output size
(crop -> pad -> align -> resize) and warns when the resize Step
stretches the picture or Align pads fill ahead of a resize; ticking
Resize shows Megapixels and Step on the face.
- Locked-aspect crops use integer maths (_ratio_box / ratioBox), so the
size shown equals the run.
- Image Crop + Rotate + Pad's four resize inputs are optional, so API
prompts saved before them validate again.
- Video Crop + Rotate + Pad -> Clip: one Length switch replaces the Fixed
frames and Limit boxes; OUT sits on the last output frame; a connected
fixed_frames / frame_load_cap takes over the length.
- The stitcher pastes the unfaded canvas when feather > 0
(transform_pil_layers / keep_unfaded). Superseded by mask-only feather
and dropped in the next commit.
Carries a copy of the editor Cancel / discard-prompt change from
feat/editor-cancel-discard (#73), which this work was built on.
The image and video transform nodes faded the picture into the fill
colour across the feather ramp. Outpaint models read that ramp as
content (the Qwen 2.1 outpaint LoRA painted a darker band along a tilted
edge, LTX's IC-LoRA left feathered bars unpainted), and the stitcher
kept the faded pixels, so Stitch's colour match measured its drift
against them and pulled the fill toward grey (d(ab) 18.5 at feather 24 on
a straight pad, 2.6 now). Feather now shapes only the mask and the stitch
blend built from it; the picture keeps a hard edge against the fill, so a
feathered canvas is the feather-0 canvas pixel for pixel.
Image Crop + Rotate + Pad gains the clip node's optional stitch_blend
(32) and stitch_grow (0) inputs, and its editor shows the same Inpaint &
Stitch section with Show blend. The editor's live fade overlay goes with
the fade.
Krea 2's text encoder is Qwen3-VL-4B-Instruct, which has no thinking
mode. With thinking off, ComfyUI appends an empty think block and the
model often ends its turn at once, so Krea 2 Prompt from Image could
return no text. The five examples that caption with Qwen3-VL now keep it
on; the Krea notes explain it instead of blaming greedy sampling.
With the budget at 0 a large photo kept its full size, and on a 4 MP
canvas Krea 2 painted the new sky a shade darker, creased at the corners
and cut invented limbs at the old edge. A 16-run matrix on two sky
photos (VLM on/off, feather 64/96, full size vs 1.6 MP) and a budget
sweep put the cause on canvas size alone: 1.6 and 2 MP were clean, 2.5 MP
began to band and 1 MP went blotchy. The example now uses the 1.6 MP
budget the Klein outpaint already had; the note and thumbnail follow.
Load Video, Select Every Nth, Image Resize and Align Image turn the pier
clip into nine 768 x 1344 frames, and Save Image writes each with a
caption sidecar and size-and-counter names. No models.
The rowboat PNG's painted mask goes through Mask Refine, Crop For Inpaint,
LaMa Inpaint and Stitch Inpaint, with Compare against the source: the
first LaMa example that needs no other pack, only big-lama.pt.