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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
* 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
* 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
* 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
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.
- 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
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.
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.
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
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.
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.
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.
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".
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
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.
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.
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.