Commit Graph
271 Commits
Author SHA1 Message Date
ausboss b2eb11996b Merge main: FlashVSR Upscale and Prompt Variations share the zh locale file 2026-11-11 23:11:35 -06:00
ausboss cb21a14424 Add FlashVSR Upscale: a video upscale node with one model file
Makes a video larger and sharper with the FlashVSR v1.1 model, from 1x to
4x. The model, the loop and the tiling are the pack's own code in plain
PyTorch, so the node needs one model file and no other pack. A long clip
needs no more graphics memory than a short one, and a result too large for
the free memory is made in tiles.

Comes with a help page, the example workflow FlashVSR Video Upscale, and
tests for the helpers.
2026-11-11 22:49:17 -06:00
ausboss f9ca96f648 Prompt Variations node: pick one choice from each {a|b|c} set by seed
A prompt box that changes on every run. Choices in curly brackets are
picked on the server from the wired seed, so the same seed gives the same
prompt again and a randomized seed with a run count of 50 gives 50 mixes.
Brackets without a | are left alone, so JSON prompts pass through.
2026-11-11 22:17:53 -06:00
ausboss a87ffb84b7 Merge main: Text Lines and the Save Image entries share one changelog section 2026-11-11 19:56:28 -06:00
ausboss 090dcdad62 Save Image can wait for a click before it saves
Auto save off: a run shows its pictures on the node and saves nothing.
SAVE ALL keeps every picture, SAVE keeps the one the arrows picked.
Held pictures wait in the temp folder and are copied to the output
folder under the names the node would have given them.
2026-11-11 19:44:19 -06:00
ausboss 47d1c4f739 Text Lines: run what comes after once for each line of text
A new node. Type a list of prompts, one on each line, or wire in a list
another node wrote. Empty lines are skipped, a number or bullet at the
start of a line can be taken off, and a limit stops a list that ran long.
2026-11-11 19:41:41 -06:00
ausboss a92017cff4 Save Image shows every picture of a run at once
A run that saved several pictures showed one, with arrows to step
through them. They now show side by side, as the core Save Image does.
The arrows go on to each picture by itself and round again to all of
them. The other preview nodes show a batch the same way.
2026-11-11 19:41:27 -06:00
ausboss 5fc8cffc9f Edit Lock help: rain together with a clear local change 2026-11-11 16:09:23 -06:00
ausboss 4dffaf3991 Edit Lock: rain, snow and haze come through whole
The node locked from the first step, where rain or snow over the whole
picture reads as a small local edit, so the effect was held back.

It now watches the first steps, undoing only the model's zoom and shift,
and decides once the picture has formed. When no place has changed
clearly, or the lock would free a wide part of the picture that holds no
clear change, it puts nothing back and only keeps the picture in place.
Local edits lock from that step on and end on the original as before.
2026-11-11 16:00:12 -06:00
ausboss bc474f1532 Edit Lock docs: when always is the wrong pick
An edit that also changes the light on the face (a new hair color on a
close-up) looks better plain: always keeps the old light on everything it
keeps. The README's chain numbers are from a rerun on a seed where the
model makes all five edits.
2026-11-11 14:15:08 -06:00
ausboss c206d9e9da Edit Lock: an edit leaves the rest of the picture where it was
Two new nodes. Edit Lock sits between the model and the sampler, reads
what the edit changes from the model's own prediction at every step, and
puts the original back everywhere else. Edit Lock Restore swaps the
original's pixels in for those parts after the decode.

The zoom and shift a model adds to the whole picture are measured and
discounted before anything is compared, and an even tint is taken out.
An edit of the whole picture is left alone.

On MiniMax-H3-Image at 4 megapixels, 18 local edits at two seeds each
moved by up to 14.5 px plain and by 0.12 px or less locked.
2026-11-11 00:59:25 -06:00
ausboss b6a67a4c34 Mask by Touch: take away by name, big pictures, a quiet queue
Four things people ran into while picking a mask:

- Ctrl-click on a part of a picked thing could take the whole thing
  away. With only a sweater picked, a Ctrl-click on the face offered
  the person, which holds the sweater, and the pick was gone. From a
  spot that is not picked, a piece that holds a whole pick is no longer
  offered; the picture says nothing is picked there.
- A name could only be taken away while Erase was chosen. The name
  field now has a + / - button, and a name typed with a minus in front
  ("-face") is taken away whichever tool is chosen.
- SAM 3 answers at the size of the picture it is given, so a look at a
  3840 px picture took 53 s and an 8192 px one ran a 32 GB card out of
  memory. A picture with a long side over 2048 px is now asked about on
  a smaller copy, and the answer comes back at the picture's own size:
  31 s and 33 s. Pictures up to 2048 px are asked about as before.
- Each change on the loader in front of the node sent one more look and
  left the earlier ones waiting. The node's own waiting looks are now
  taken out of the queue before a new one is sent.

The button that pauses the look now says Pause or Look on, and an out
of memory stop says so in plain words.
2026-11-10 14:49:34 -06:00
ausboss 5b4651df45 Mask by Touch: keep the picks when the picture changes
A different picture coming in no longer stops the run with every pick
dropped. The node moves the clicks and paint onto it, in the same places,
scaled from the size in their key to the new picture's size, and sends the
face the moved touches. The face takes them while it still holds the picks
they were moved from. New picture, under More, set to start over keeps the
old behaviour.
2026-11-08 23:29:49 -06:00
ausboss 68a36d99e1 Crop for Inpaint keeps the whole feather inside the crop
Review fixes for the inpaint crop and stitch helpers.

- The crop window now contains the full feathered edge, so the blend at
  the seam is complete.
- Outpaint extension bands stay fully paintable after the mask is
  shrunk or softened.
- The reported blend mask no longer extends past the area actually
  pasted.
- The Crop for Inpaint, Stitch Inpaint and Realign to Source help pages
  are corrected (Multiple default, Max zoom wording, resizing caveat).

Tests: tests/test_inpaint_crop_helpers.py covers the feather, the
bands and the partial paste window; tests/inpaint_help.test.mjs checks
the help pages against the code; the classic pin test keeps comparing
against the released output.

Crops and blend masks differ slightly from earlier releases for the
same inputs. No inputs, outputs or mapping keys change.
2026-11-08 19:23:10 -06:00
ausboss d6f7ddc5a3 Turn Fill small holes off by default on Mask by Touch (#307)
It quietly filled holes I wanted to keep, and it's folded under More so
you don't see it's on. New nodes now start with it off. Saved workflows
keep whatever they had. The Mask by Touch example is saved with it off.
2026-11-07 17:11:08 -06:00
ausboss 8bc2d183c9 Mask by Touch: show a changed picture without unplugging it (#304) 2026-11-07 16:07:39 -06:00
ausboss 421849cae0 Save Image and Save Video: call the Steps switch Preview steps (#303) 2026-11-07 11:37:47 -06:00
ausboss eb3b74242a Fix shared note tiles and H3 video edit controls (#293) 2026-11-06 18:48:28 -06:00
ausboss 50389b0cdb Improve crop controls, playback, and media selection (#288)
* Group crop controls and put video scrubbing below the preview

* Stop IN where the connected clip length still fits

* Add play and pause beside the crop scrubber and clarify resize padding

* Preview the current brush beside Size in Image Compare

* Center the crop and its padding together on each axis

* Polish crop controls and load images from Outputs

* Add crop controls preview
2026-11-05 20:07:33 -06:00
ausboss 28dd526447 Remove the LoRA Loader stack row limit (#287) 2026-11-05 20:07:24 -06:00
ausboss abf6cecd52 Style workflow guide and model download tiles (#286)
* Style workflow guide and model download tiles

* Add workflow tile preview
2026-11-05 20:04:58 -06:00
ausboss 12e7d8c33f Limit Latent Size to workflow-approved resolutions and share panel controls (#285) 2026-11-05 18:23:30 -06:00
ausboss de95db228c H3 Prompt Writer: a swap that keeps the clip's sound only gives the new person their own lines, timed from that sound (#277)
* Add Load Audio node: wave, trim, preview and max length

Load a sound file and keep only the part you want. The node shows the
whole file as a wave. Drag the IN and OUT handles (or type the times),
press play to hear just that part, and set Max length to the longest
sound the next step takes: anything past it turns red and is cut off,
so you see what comes out before you run. Max length can be wired.

Only the picked part is decoded. Outputs the audio and its seconds.
Help page, README, changelog, Chinese names, tests and the API snapshot
are included.

* Load Audio: open smaller and go down to 280 wide

* Load Audio: shorter wave, length moves off the wave next to OUT

* Add the Pika H3 Flex example workflow

* H3 Prompt Writer: a swap puts each person picture in one person's place

* H3 Prompt Writer: keep quoted words in a swap and read who goes out of a longer line

A swap dropped every typed line once it had read who goes, so words in
quotes never reached H3 and the new person's lips were guessed. Those
lines now stay as the new person's words, landing on the lip movement of
the video, and a voice with a swap no longer says nobody speaks.

"Elon is @1, he replaces the person at the counter" went whole into the
description of who goes. The words after replaces (or takes the place of,
instead of, ...) are now who goes, and a name given to @1 is left out.

* H3 Prompt Writer: swap lines go to the right speaker

Names given with a comma ("Altman is @1, the man on the left. Dario is
@2, ...") no longer run into each other, and a later "Dario says" or
"He says" goes to that person. A thing that speaks, like the card
reader, says its words from off screen so nobody's lips move. "raps"
and a few other ways of speaking count as speech, so "and raps" stays
out of who goes.

* H3 Prompt Writer: keep how a swap line is said, and its exact time

"The card reader says in a flat robot voice" now names the card reader
and keeps "in a flat robot voice" as how it says the words. A time like
3.2s at the start of a line was read as a list number and lost its 3; it
now stays 3.2, a time typed inside a swap line counts too, and the first
words of a swap say when they start.

* H3 Prompt Writer: a person off screen gets their own voice

"A woman off screen says" went to the person on screen, as their voiceover,
and in a swap it landed on the swapped-in person. Now a person or a name
the line puts off screen (off screen, off camera, behind the camera, O.S.)
speaks from off screen as their own speaker, in a swap and outside one.
An unnamed voiceover, an @ or a he or she still stays the main person's.
Off-screen voices no longer get a 'stays silent with the lips closed' line.

* H3 Prompt Writer: a swap can keep the clip's clothes

A swap always dressed the new person in the picture's clothes. Typing
"keeps her outfit", "in the clip's clothes" or "keep the clothes from the
video" now takes only the face and hair from the picture and keeps the
clothes of whoever goes. "keeps her own clothes" still means the picture's.

* H3 Prompt Writer: a thing said to be off screen speaks for itself in every mode

"A card reader off screen says" got its own voice only in a swap. In copy
its moves and the other modes it became the person on screen's voiceover.
Anything a line puts off screen now speaks for itself; "a voice" and
"narrator" stay the main person's voiceover.

* H3 Prompt Writer: a swap that keeps the clip's sound gives the new person only their own lines, timed from that sound

With the clip's own sound under a swap, H3 heard every voice and moved the
new person's mouth to lines that weren't theirs. The new Clip's own sound
switch leaves out anyone else's words, says the new person keeps the lips
closed between their lines, and puts each untimed line where speech starts
in the video's sound. A typed time still wins.

* H3 Prompt Writer: tell voices apart by pitch when timing lines from the clip's sound

Loudness gaps alone put the new person's lines on the other speaker's words
when two people trade lines quickly. Each line now takes a run of speech
that fits its syllables, starts after a quiet, and keeps one voice at one
pitch. On the lip sync clips this lands every line within 0.15 s of
Whisper's times, except one soft word under a crowd.

* H3 Prompt Writer: a short name for who goes in a swap keeps their line

"The man in the car" for "the man in the back of the police car" was read
as someone else, so with the clip's sound on his line was left out. A
speaker is who goes when every word naming them appears in who goes.

* H3 Prompt Writer: a swap with the clip's sound and no words typed speaks as the video does

With nothing in quotes, it said the new person keeps the lips closed and
says nothing, even when the clip is full of speech, and the soundscape
was the place's steady sound. Now speech in the clip means the new person
speaks as in the video, and the soundscape is the clip's own sound. With no
speech heard and no words typed, it says nothing about the lips.

* Document two-person swaps and off-screen dialogue
2026-11-05 15:58:53 -06:00
ausboss 93f64d07d7 H3 Prompt Writer: swap lines keep their words, speaker, delivery and time (#275)
* Add Load Audio node: wave, trim, preview and max length

Load a sound file and keep only the part you want. The node shows the
whole file as a wave. Drag the IN and OUT handles (or type the times),
press play to hear just that part, and set Max length to the longest
sound the next step takes: anything past it turns red and is cut off,
so you see what comes out before you run. Max length can be wired.

Only the picked part is decoded. Outputs the audio and its seconds.
Help page, README, changelog, Chinese names, tests and the API snapshot
are included.

* Load Audio: open smaller and go down to 280 wide

* Load Audio: shorter wave, length moves off the wave next to OUT

* Add the Pika H3 Flex example workflow

* H3 Prompt Writer: a swap puts each person picture in one person's place

* H3 Prompt Writer: keep quoted words in a swap and read who goes out of a longer line

A swap dropped every typed line once it had read who goes, so words in
quotes never reached H3 and the new person's lips were guessed. Those
lines now stay as the new person's words, landing on the lip movement of
the video, and a voice with a swap no longer says nobody speaks.

"Elon is @1, he replaces the person at the counter" went whole into the
description of who goes. The words after replaces (or takes the place of,
instead of, ...) are now who goes, and a name given to @1 is left out.

* H3 Prompt Writer: swap lines go to the right speaker

Names given with a comma ("Altman is @1, the man on the left. Dario is
@2, ...") no longer run into each other, and a later "Dario says" or
"He says" goes to that person. A thing that speaks, like the card
reader, says its words from off screen so nobody's lips move. "raps"
and a few other ways of speaking count as speech, so "and raps" stays
out of who goes.

* H3 Prompt Writer: keep how a swap line is said, and its exact time

"The card reader says in a flat robot voice" now names the card reader
and keeps "in a flat robot voice" as how it says the words. A time like
3.2s at the start of a line was read as a list number and lost its 3; it
now stays 3.2, a time typed inside a swap line counts too, and the first
words of a swap say when they start.

* H3 Prompt Writer: a person off screen gets their own voice

"A woman off screen says" went to the person on screen, as their voiceover,
and in a swap it landed on the swapped-in person. Now a person or a name
the line puts off screen (off screen, off camera, behind the camera, O.S.)
speaks from off screen as their own speaker, in a swap and outside one.
An unnamed voiceover, an @ or a he or she still stays the main person's.
Off-screen voices no longer get a 'stays silent with the lips closed' line.

* H3 Prompt Writer: a swap can keep the clip's clothes

A swap always dressed the new person in the picture's clothes. Typing
"keeps her outfit", "in the clip's clothes" or "keep the clothes from the
video" now takes only the face and hair from the picture and keeps the
clothes of whoever goes. "keeps her own clothes" still means the picture's.

* H3 Prompt Writer: a thing said to be off screen speaks for itself in every mode

"A card reader off screen says" got its own voice only in a swap. In copy
its moves and the other modes it became the person on screen's voiceover.
Anything a line puts off screen now speaks for itself; "a voice" and
"narrator" stay the main person's voiceover.

* Document two-person swaps and off-screen dialogue
2026-11-05 15:57:11 -06:00
ausboss b3a3d7a8ca Add frameless workflow tiles and branded Markdown guides (#284) 2026-11-05 15:55:47 -06:00
ausboss c37386c1d4 Seed: add a compact look, picked from the gear (#274) 2026-11-03 23:59:16 -06:00
ausboss 7cb0abaacf Add Load Audio node: wave, trim, preview and max length (#272) 2026-11-03 23:58:16 -06:00
ausboss ded731859c Integer and Float: a big look, like Text (#270)
Integer and Float get the same gear as Text, with a big look: one large centred number with its arrows, in a taller row. The Pika H3 Flex workflow uses it for Seconds.

The look is kept in the node's properties (ausboss_text_look: "big"), so saved values and what the node sends don't change. A row with its own height in a look now takes that height when the look changes. Docs and changelog updated.
2026-11-03 13:45:54 -06:00
ausboss 9ba82c45b4 H3 Prompt Writer: timeline, colored words, Sound and Music boxes
- Words light up as you type (@1, times, cuts, quotes, labels), with @
  autocomplete and a ? cheat sheet
- Timeline bar shows every picture a line names; drag a block to reorder,
  drag its edge to set its time, click an edge for a cut, click a block to
  jump to its line
- Sound and Music boxes (new optional inputs, appended) fill H3's
  overall_soundscape and non_diegetic_music
- Pictures and video as chips with their jobs; Length, Camera and Look stay
  plain rows so they can still be wired
- Help page and changelog updated; tests for the colors, autocomplete,
  timeline edits and the new inputs
2026-11-03 11:09:26 -06:00
ausboss 75621c341f Merge remote-tracking branch 'origin/main' into feat/h3-prompt-writer
# Conflicts:
#	CHANGELOG.md
2026-11-02 16:49:47 -06:00
ausboss ba8d2b8048 Merge pull request #268 from ausboss/docs/agent-guide
Add an agent guide and move contributor rules to CONTRIBUTING.md
2026-11-02 16:49:03 -06:00
ausboss 6b1b1cfabc Crop For Inpaint: scale crops evenly and default to multiple 32; Tone match skips see-through pixels 2026-11-02 16:02:53 -06:00
ausboss 17fb493a66 Merge remote-tracking branch 'origin/main' into feat/h3-prompt-writer 2026-11-02 14:20:06 -06:00
ausboss a61d3d4ee0 H3 Prompt Writer node with width and height outputs 2026-11-02 02:07:29 -06:00
ausboss 91b53162cc Add an agent guide to the nodes and move contributor rules to CONTRIBUTING.md 2026-11-01 20:52:18 -06:00
ausboss 21ca6e9f47 Stitch Inpaint: Paste onto puts a hand crop back on the whole picture
Image Crop + Rotate + Pad's stitcher now remembers the picture and the
crop's position. With Paste onto on original, Stitch Inpaint lays the
result on the whole picture, straight, resized or turned. The default
stays crop, so saved workflows run as before.
2026-11-01 01:24:49 -06:00
ausboss b5bce60c22 Workflow Switches: + Choice, and a guide for AI agents
Two named settings used to take about 20 clicks through a menu and
Settings. + Choice saves how a node is set under a name, and the second
one turns the card into a pill. What a choice changes is what it holds
differently from the other choices, so it needs no off side. A choice can
also hold the nodes only it needs, so a missing model in the branch nobody
picked no longer stops the run.

js/docs/agents/workflow_switches.md tells an AI agent how to write a card
into a workflow file. It sits under js/docs because that ships with the
pack. A test holds its examples to what the card really stores.
2026-10-31 21:01:07 -05:00
ausboss 39da7a3931 Workflow Switches: One at a time holds for new switches and the setting
A new switch read on beside the rows already on, and turning the setting
on left every row on. A new switch now gives way to the rows that were
there, and turning the setting on keeps one row on.

Fixes #256
2026-10-31 08:49:11 -05:00
ausboss 33ce662398 Image Folder: say what "start over" does
The README, help page and tooltip now say that the pictures go round
after the last one, and the CHANGELOG has the fix from #252.
2026-10-30 23:23:08 -05:00
ausboss ff6706a918 LaMa Inpaint opens only known model files; Frame Interpolate errors name no folders
A LaMa model file can run code when it opens, so the node checks the file's
SHA-256 first and opens only the two common builds of big-lama.pt. Frame
Interpolate's errors now name the file, and the folder goes to the console.
2026-10-30 18:09:45 -05:00
ausboss e4b9a08cec Release 2.20.4: Workflow Switches explain "empty"
The paste fix in 2.20.3 works when the paste happens, so a workflow pasted
and saved on an older version keeps its old numbers and still reads
"empty" after an update. The word's hover text now says what happened and
what to do: open the original file again, or add nodes from the switch's
menu. The help page says the same.
2026-10-30 13:17:56 -05:00
ausboss d0658ea8b2 Workflow Switches and Callout: follow the copies after a paste
Copy and paste give every pasted node and group a new id, and so do
duplicate, Alt + drag and dragging a saved workflow onto the canvas. A
Workflow Switches card remembers its parts by id, so a whole workflow
pasted into a new tab read "empty" on every row and nothing could be
switched on; pasted into another workflow it could switch unrelated nodes
that had the old numbers. A Callout's links to a node or group broke the
same way.

The frontend's paste (LGraphCanvas._deserializeItems) returns which new
node each old id became. js/shared/paste_ids.mjs hands that on after every
paste, and a pasted card or note points at the copies of what it names.
An id the paste did not copy is kept, so a card pasted on its own still
switches the original parts.
2026-10-29 11:05:44 -05:00
ausboss 13145ed881 Save Image: say a run is going, hold the last step, keep tiles off the picture
While the models load, an empty picture area says the run is going instead
of asking for a run. With steps on, the last step stays up until the saved
picture has loaded, so it no longer blinks out. Between a tiled upscale's
split and stitch (and for Ultimate SD Upscale) the step pictures are tiles:
the whole picture stays and the chip says "upscaling in tiles".
2026-10-27 08:51:40 -05:00
ausboss 1faca35331 Merge branch 'main' of https://github.com/ausboss/ComfyUI-AusBoss into fix/touch-other-picture-message
# Conflicts:
#	CHANGELOG.md
2026-10-26 19:31:42 -05:00
ausboss 8837c75553 Keep see-through parts in Crop/Stitch Inpaint and Image Compare
Stitch Inpaint takes an RGB patch over an RGBA picture and keeps the
picture's own alpha, instead of stopping on a channel mismatch. The halo
fix spreads colours only.

Image Compare keeps alpha in a preview that has see-through parts and
flags it, so the panel shows them over a checkerboard (Slide, A/B and
Erase). The Erase mix lays the top picture over the other, the saved PNG
is RGBA, and the PSD carries each layer's transparency plus a merged
alpha, its flat colours stored over white as Photoshop does. A see-through
B is resized premultiplied. Align measures over gray and warps all four
channels. Solid pictures give byte-identical files.

Refs #232
2026-10-26 18:40:49 -05:00
ausboss 69fbceb0a1 Mask by Touch: say when the picks were made on another picture
When the picture coming into the node changed after picking, the run
stopped with "nothing is picked yet" while the picks still showed on the
node. It now says the picks were made on another picture. If nothing set
to empty mask still lets the run go on.
2026-10-26 18:05:42 -05:00
ausboss 6af50147fc Step preview: the caption is the step count alone; Step Preview shows the finished picture once it is saved 2026-10-25 15:35:17 -05:00
ausboss c54ee8984f Step preview: Stop takes clicks on Save Image; the step picture fills its box; help notes from real runs 2026-10-25 15:35:06 -05:00
ausboss 3ba27901cb Step Preview node, and a steps switch on Save Image and Save Video
Watch the picture form one sampling step at a time and stop a run that is
going wrong. Step Preview needs no wires and shows whichever sampler is
working, with Stop and Stop all. Save Image and Save Video get a steps
switch, off by default, that shows the steps where the saved picture goes,
with a Stop button.

A queued workflow that shows its steps asks ComfyUI for the auto preview
method for that run, only when no method was chosen in the frontend or on
the command line.
2026-10-25 15:35:06 -05:00
ausboss 9aefc53134 LoRA Loader: say why a Civitai lookup failed
The button still reads Civitai lookup failed, and a message now gives the
reason. A browser that cannot reach civitai.com at all names the usual
causes: a firewall, a VPN, or ComfyUI started with --disable-api-nodes.
2026-10-25 13:00:09 -05:00