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.
The browser downloads a small copy of the LoRA's first picture from
Civitai's picture server (PG-13 or milder unless the gear menu's Civitai
picture option says any), and the server saves it beside the LoRA as
<model>.preview.jpg, never replacing a picture. The LoRA Previews add-on
is no longer needed, so its hooks and install hint are gone.
After Fetch Civitai info saves its file, LoRA Loader sends a browser
event. The separate LoRA Previews add-on answers it by saving the LoRA's
preview picture, and the card and hover show it without a reload. The
info card links to the add-on when a LoRA has Civitai info but no picture.
Turning a group off stops its LoRAs and keeps each row's own on/off for when
the group comes back on. A switch saved with a group on and off now moves only
the group, shows one lock on the group's header, and leaves the rows inside to
the person. Renaming the group keeps the switch; clicking the lock takes the
group back.
Shift-click a tick box or name ticks every file from the last one ticked.
Ctrl+Enter ticks the highlighted file and Shift+Enter ticks the run up to it.
- The picker's arrow keys no longer stick when the list opens under a
pointer that has not moved: only a real pointer move takes the
highlight.
- A group's only LoRA can be dragged out, and a group's first row
dropped above its own header lands there instead of at the bottom.
Just below a group's last row is now always outside the group.
- Right-click on the space around the rows opens a stack menu (add,
group the selection, fold or open all groups, delete all) instead of
the browser's Copy / Select all; the group menu also ends with
Delete all.
The + LoRA list gets a tick box beside each file. Ticked files (also by
Ctrl/Shift-click or Ctrl/Shift+Enter) are added together from a bar at
the bottom; ticks survive a search, and files already in the stack read
"in stack".
Rows can be grouped: Ctrl/Shift-click to select, right-click to group,
move to a group or take out. A group header has a switch for all its
rows, a fold arrow that shortens the node, a double-click rename, and a
grip to drag the whole group. Rows drag in and out by their grip. The
group name is stored on each row, so the stack still runs top to bottom
and groups travel with templates and undo; folded groups are a node
property.
A text link held over Mask by Touch snapped to its hidden `touches`
input, drawn at the top edge of its settings card, and letting go wired
the text in place of the picks. Image Folder's hidden `pictures` did the
same once Folder was wired. The frontend gives every widget an input
socket unless it is marked socketless, and a link dropped on a node
lands on its first free input of the link's type, hidden ones included.
The card's `socketless` option, which only made a combo, now also makes
a one-line text widget for a STRING (markSocketless moves to
widget_card_math.mjs so it can be tested). Mask by Touch's card lists
touches and ask, Image Folder's lists pictures. The backend inputs do
not change: saved values still load by position and the API prompt
still carries them. An older workflow brings the empty slots back on
load and the card drops them again, as it already did for Seam.
Image Crop + Rotate + Pad, Load Image + Pad and Load Video refused a
picture named the way ComfyUI names a generated file
("photo.png [output]", "[temp]") with "The selected source is outside
ComfyUI's input folder." Core Load Image takes those names.
resolve_input_path now reads the name the same way the video nodes'
Outputs list already does (resolve_server_file): the tag picks the
input, output or temp folder, and the rest is a name below it. A whole
path, "~", "." and "..", and a network path are refused from the text
alone; a link that leads out of the folder is refused once resolved.
Both functions share that code. A whole path inside the input folder,
accepted before, is now refused too, as the security rule asks.
Load Video's player and the shared upstream preview stripped the tag
and asked /view for the input folder; they now keep the folder.
Tests cover input, [input], [output] and [temp] names through the
resolver and through ComfyUI's own validation next to core Load Image,
and the refused escapes. Help pages, SECURITY.md and CHANGELOG say so.
The node gets a second output, image_b: the B batch, untouched, the
way image_a already passes through. image_a stays the first output, so
saved workflows keep their wires. The slider, its resting side, Erase
and Save are unchanged.
Help page, tooltips, README line and CHANGELOG say so; the node API
snapshot gains the one new output.
A round knob above the chosen box turns it (Shift: 5 degree steps); a Turn
field under the canvas types the angle and a double-click levels it. The
mask follows the turned box exactly, bboxes and elements keep the straight
box around it, and a turned text box adds how it is tilted to its
description. A box that is not turned saves and outputs exactly as before.
The arrow keys move a box one pixel (Shift: ten), and the grid starts off
when a picture is wired in. Handles, tags and outlines keep one size on the
screen at any zoom, and over a picture the boxes are see-through. Each box's
tag says whether it is text or an object, a chip per box picks the box to
edit, and the type buttons read as that box's own setting. A gear sets the
grid size. With a picture shown, the canvas keeps the picture's own shape
even when width and height are wired.
The mask is white inside every box and black elsewhere, at the size of the
picture on background (or the canvas without one). Draw a box over the words
on a sign, wire the mask into an inpaint chain, and only the words change.
It comes after the other three outputs, so saved workflows keep their wires.
Draw boxes on a canvas and say what goes in each one: a thing, or words to
write in the picture. Wire elements to MOSS-Image Layout Prompt and the
picture puts each thing where its box is.
It gives what ComfyUI's own Create Bounding Boxes gives (preview, bboxes,
elements; same types, same order, same values from the same boxes), so it
can take that node's place, and its canvas also draws in the classic node
look. The boxes are kept as parts of the canvas in a hidden socketless
string, so a wired size never moves them.
A switch that turns LoRA Loader rows on and off compared and wrote each
row's strength as well as whether it is on. A row turned down to 0.6 by
hand read "changed" (a pill went amber, "only partly on"), and the next
click set its model strength back to the saved one and left its CLIP
strength behind.
A LoRA row pair now carries whether the row is on, and a strength (model
or CLIP) only where the switch's saved on and off differ. pairNow compares
only what the pair carries and pairValue writes only that, so the strength
and triggers someone set stay, and the card reads on or off. A switch
saved with one strength for on and another for off still sets it, now
with the CLIP strength too. How switches are saved does not change.
Edit models often draw the picture a few pixels to the side or a little
zoomed in, so the edges of the paint in Erase show a step. A new ALIGN
button in Erase's tool row measures B against A the way Realign to
Source does and swaps in B moved back over A. Save and Copy use the
lined-up B, and a second click puts B back as it came.
The new route takes only the run's pair key, reads the two previews the
node made, and writes the lined-up B beside them in the temp folder.
A list of pictures runs these nodes once per picture, and the panels
only showed one of them (#204). Arrows (2 / 5) now appear on the node
when a run brings more than one picture: Compare steps through its
pairs, A and B together, and Erase saves the pair on screen. The shared
preview panel gets the same arrows, so Save Image, Mask Refine, Mask by
Name, LaMa Inpaint and Select Frame step through their results. A node
too narrow for the arrows widens to fit while they show.
A list of pictures runs Tiled Upscale once per picture, so Stitch gets
every picture's tiles in one list and one stitcher per picture. It only
read the first stitcher and stopped with a tile count error (#205).
Each stitcher now takes its own tiles off the list and Stitch returns a
list, one finished picture each. One picture comes out as before.
Mask by Touch looks at a new picture by running itself alone. The Run
Timer started for that look and could show its time as if it were the
workflow's run, and the runtime badges were cleared by it.
The queue wrapper now marks a run that targets nodes only and carries a
Mask by Touch request as the node's own. The timer and the badges skip
those runs, and take back one that started before the queue answered.
A LoRA Loader inside a subgraph gets a first gear item, Rows on the box.
Show brings its rows up the frontend's own way (a subgraph input linked to
the loras input), and the box then shows the loader's row card on its face,
bound to the box's copy of the rows, which is what runs. Each copy of the
box keeps its own rows. On the box the card keeps the rows, the master pill
and Re-check; templates and the gear stay inside. The card also appears
when loras is brought up from the frontend's Edit subgraph widgets list.
Inside, the loader says where its rows are set and shows and edits the
copy of the box it was entered through (or the only box); with several
boxes and no known way in it is read only. Take back removes the subgraph
input and keeps the rows of that box.
Workflow Switches needs no change to set rows on a box: the box's copy is
an ordinary widget value. A row that a switch sets shows a lock in place
of its grip, naming the switch on hover; a click on the lock removes that
row from the switch's saved sides (releaseStackRow), and the row still
drags. Pure helpers live in js/shared/lora_box.mjs and
js/shared/workflow_switches.mjs, with tests.
The Text card gets a gear in its top-right corner with one setting, Look.
normal is the usual text box and stays the default. big shows the text in
large centred letters in a compact field as wide as the card, about two
lines tall, that grows with the node; longer text scrolls.
The look is kept in the node's properties (ausboss_text_look: "big"), not
in an input, so saved widget values and prompts are unchanged and an older
pack shows the usual box. The widget card gains a per-node look: rows can
carry a height and placeholder for another look, and the card height math
takes the look into account.