Commit Graph
609 Commits
Author SHA1 Message Date
ausboss 604bd005d5 Registry: the description fits its 1000 byte limit
The 2.8.0 upload was refused with "description is too long": naming
Image Folder and Callout took the description to 1024 bytes and the
Registry takes 1000. It is 989 now, and release_preflight.py fails on a
description over the limit, so this is caught before a version lands.

The Registry's scan also warned about two statements on one line in
tests/test_image_folder.py and says that becomes an error. They are two
lines now.
2026-10-06 18:07:28 -05:00
ausboss 9c8f7ee233 Merge pull request #148 from ausboss/release/2.8.0
Release 2.8.0
2026-10-06 18:04:43 -05:00
ausboss b8bd2798f7 Release 2.8.0
Callout and Image Folder, the Nodes 2.0 size fixes, and Save Video
showing a saved gif or webp. The version pair, the changelog title, the
description and the keywords follow.
2026-10-06 18:04:10 -05:00
ausboss 863ddf47b3 Merge pull request #147 from ausboss/feat/callout-note
Callout: a note whose text fills the box, with arrows you type
2026-10-06 18:00:20 -05:00
ausboss 5e3f854a15 Merge pull request #145 from ausboss/fix/save-video-gif-webp-preview
Save Video: a saved gif or webp shows on the node
2026-10-06 18:00:12 -05:00
ausboss 64b5c25bce Merge pull request #146 from ausboss/docs/help-pages-match-nodes
Crop editors: spell Center the US way
2026-10-06 18:00:03 -05:00
ausboss 4a5b8c5af3 Callout: a note whose text fills the box, with arrows you type
A new Utility node for explaining a workflow on the canvas. The text grows
to the largest size that fits the note, so it reads without zooming in, and
each point gets a thin teal line beside it.

An arrow emoji in the text (or the arrow row under the editor) becomes a
teal arrow in the line. Click a node while editing, then press an arrow, and
the arrow is linked to that node: clicking it later brings the node into
view, the way Workflow Switches does. The link is kept in the text as #id,
so editing the words never moves it.

The node has one hidden text input and no outputs, so it never runs.
2026-10-06 17:49:53 -05:00
ausboss 1ff1a863fb Crop editors: spell Center the US way
The row next to Fill, Feather and Resize said Centre. It now says Center,
and so do the two button tooltips and the three crop help pages. Code
names and comments are unchanged, since nobody sees them.
2026-10-06 17:49:38 -05:00
ausboss 0c404b37f3 Save Video: a saved gif or webp shows on the node
With format set to gif or webp the file was saved, but the node's stage
stayed empty and said "Execution finished without video metadata".

The node has shown a gif or webp in an <img> since the two formats were
added, because a <video> cannot play either. The run's result was still
searched with a list of video file endings only, so for these two nothing
was found and the <img> was never filled. The list of picture endings now
sits beside that lookup in js/shared/video_preview.mjs, and both the
lookup and the choice of tag read it. A png is still not taken.

In the classic renderer a saved webp was also drawn a second time under
the stage. ComfyUI shows an animated webp in a widget of its own, neither
its video preview nor its picture preview, and only those two were stood
down. suppressCoreVideoPreview hides that widget as well. The node's
smallest height with a saved webp goes from 469 px back to 415 px.

Tests: the lookup finds a saved gif and webp and sends them to the <img>;
every row of the backend's VIDEO_FORMATS is read from its source and has
to be found and sent to the right tag; the animated widget is hidden on
arrival and when it is already on the node.
2026-10-06 17:35:31 -05:00
ausboss f697eaa6f6 Merge pull request #144 from ausboss/fix/nodes2-video-stage-height
Nodes 2.0: Load Video and Save Video can be made shorter than their clip
2026-10-06 17:23:41 -05:00
ausboss 1e1721ab26 Video nodes: the clip no longer sets their height in Nodes 2.0
In Nodes 2.0, Load Video and Save Video could not be dragged shorter than
their clip drawn at the node's full width. With a 9:16 clip, Load Video at
320 px wide stopped at 965 px, where the classic renderer goes to 584 px,
and Save Video at 823 px against 446 px. A node saved at its classic size
was drawn taller than saved and could cover the node under it.

Nodes 2.0 lays a node out by its content, and the saved size is only a
minimum. The shared stage kept its <video> in normal flow at full width, so
a portrait clip set the stage's height. The clip now sits out of flow and
fills the stage, and so does the <img> Save Video keeps for a gif or webp.
The stage takes its size from the node alone and the clip scales to fit.
The player fills the stage, where the preview picture is centred at its
own size, so its controls stay along the stage's bottom edge.

The classic renderer is unchanged.
2026-10-06 16:48:34 -05:00
ausboss 8a6782730b Merge pull request #142 from ausboss/fix/image-folder-saved-size
Image Folder: a node keeps the size it was saved at
2026-10-06 16:21:42 -05:00
ausboss 28ff8c1c4a Merge pull request #143 from ausboss/docs/changelog-unreleased-fixes
Changelog: the Load Video, Image Resize and Workflow Note fixes, and the help pages
2026-10-06 16:21:23 -05:00
ausboss ba94a056a4 Changelog: the Load Video, Image Resize and Workflow Note fixes, and the help pages
These are on main since the last release and were not listed yet.
2026-10-06 16:19:46 -05:00
ausboss b1cbceb42d Image Folder: a node keeps the size it was saved at
A new node opens at its smallest size plus one more row of tiles
(340 x 602). That size was set a moment after the node was made, on any
node that sat at its smallest height. A workflow that loads has put the
saved size on the node by then, so a node saved at its smallest size
looked new and was grown: saved 320 x 506 came back 340 x 602, and saved
400 x 506 came back 400 x 602. A copy, a paste, an undo and Recreate node
grew the node the same way. A node saved 2 px taller kept its size.

The opening size is now set as the node joins the graph. The card is in
place by then, and a size put on the node afterwards wins: a loaded
workflow, an undo, Recreate node. A copy gets its size before it joins
the graph, so a node that is configured with a size is marked and left
alone. A node saved under its smallest size is lifted to it, and one
saved with no size opens like a new node, as before.

tests/image_folder.test.mjs fails when the opening size is set anywhere
but as the node joins the graph, or when a node that comes with a size is
no longer marked.
2026-10-06 15:57:51 -05:00
ausboss 7a0dbe1766 Merge pull request #133 from ausboss/fix/frame-out-pad-bars-subgraph-packs
Three fixes: Load Video OUT after FRAME, Image Resize pad bars, Workflow Note Detect in subgraphs
2026-10-06 15:46:06 -05:00
ausboss d533284b66 Merge pull request #140 from ausboss/fix/nodes2-panel-min-height
Nodes 2.0: a panel keeps its minimum height when a node is dragged shorter
2026-10-06 15:44:34 -05:00
ausboss 8124c92cd9 Merge main into fix/frame-out-pad-bars-subgraph-packs 2026-10-06 15:43:10 -05:00
ausboss 20ae46ad53 Merge main into fix/nodes2-panel-min-height 2026-10-06 15:40:11 -05:00
ausboss 4708e974c8 Merge pull request #134 from ausboss/docs/help-pages-match-nodes
Help pages: say what the nodes do today
2026-10-06 15:39:51 -05:00
ausboss dd34122511 Merge pull request #138 from ausboss/fix/load-image-pad-nodes2-preview
Nodes 2.0: Load Image + Pad shows its picture once
2026-10-06 15:39:47 -05:00
ausboss 2b27fee214 Merge pull request #135: Node text: say what the nodes do today 2026-10-06 15:39:43 -05:00
ausboss 27b75d2807 Merge pull request #141 from ausboss/fix/image-folder-copy-words
Image Folder: say the pictures are copied into the ComfyUI input folder
2026-10-06 14:56:33 -05:00
ausboss 107e4af407 Image Folder: say the pictures are copied into the ComfyUI input folder
Choosing a folder in the file explorer makes the browser ask its own
question ("Upload 74 files to this site?"). A page can neither word that
question nor skip it, and it does not say where the files go.

- While the file explorer is open, the node shows a note: all the folder's
  pictures are copied into your ComfyUI input folder, and the browser's
  upload question is this copy.
- While it copies, the node names the folder and where its pictures go,
  and how far the copy is.
- The big-folder question, the message afterwards and the Browse and
  empty-gallery entries say "copy" too.
- Help page: what the browser's question means, and that a dropped folder
  is copied without it.
2026-10-06 14:55:23 -05:00
ausboss 2e06f01c97 Panels: keep their minimum height in Nodes 2.0
In Nodes 2.0 a node with a picture panel could be dragged shorter than the
panel's minimum. A corner drag took Mask Refine from 356 to 218 px and left
its picture a 2 px line, Save Image lost its saved picture, and Latent Size
lost its whole stage. The classic renderer stops at the panel's floor.

The classic floor is the minHeight a panel declares through fillNodeHeight.
Nodes 2.0 lays a node out by its content and does not use that number, so a
panel whose content has no height of its own had nothing to stop at.
fillNodeHeight now also writes the floor, less the DOM widget frame, to the
panel's element as a CSS min-height while the element sits inside a Nodes
2.0 node. It is written whenever the floor is read and when the panel is
first laid out, so a floor that follows state is followed: with the preview
switched off the node still shrinks to the bar.

The preview panel's stage also carries its own floor inside a Nodes 2.0
node. That panel's declared floor holds less frame than the shared number
takes off, and without the rule its nodes stopped 10 px under the height
ComfyUI lifts them to on the next load.

The classic renderer is unchanged.
2026-10-06 14:48:50 -05:00
ausboss 18b7c17454 Merge pull request #139 from ausboss/feat/image-folder-drop
Image Folder: bring a folder in from anywhere on the computer
2026-10-06 14:10:34 -05:00
ausboss f4a230ccec Image Folder: bring a folder in from anywhere on the computer
A folder dropped on the node, or chosen in the file explorer from Browse or
Add, is copied into ComfyUI's input folder by the browser through ComfyUI's
own upload, and the node moves to the copy. A folder with more than 300
pictures or more than 1 GB asks first. Bringing the same folder in again
writes over its copies.

A whole path pasted into Folder is read as the folder it names when it lies
inside ComfyUI's input or output folder. Any other path is still refused,
and the node now says what to do instead, with a button that opens the file
explorer. The server reads nothing outside those two folders.
2026-10-06 14:06:45 -05:00
ausboss e7c0047c5f Load Image + Pad: show the picture once in Nodes 2.0
In Nodes 2.0 the node showed its source picture twice: on its pad canvas,
and again underneath as ComfyUI's own copy of the node's images. The copy
took the node's spare height: a node 900 px tall gave the pad canvas
278 px, where the classic renderer gives it 512. With a picture wired in,
the copy showed the file named in Source, which the node was not using.

The node's own suppression removed the classic preview widget and blocked
node.imgs, but never set hideOutputImages, the flag Nodes 2.0 reads before
it draws a node's images under the widgets. It sets the flag now. The
classic renderer never reads it.

tests/core_preview.test.mjs scans every frontend file that stands the
classic preview down by hand and fails when one does not stand the
Nodes 2.0 copy down as well.
2026-10-06 13:57:42 -05:00
ausboss 4cfed6293e Merge pull request #136 from ausboss/fix/nodes2-card-height
Nodes 2.0: a card keeps its own height, the picture under it takes the rest
2026-10-06 13:46:12 -05:00
ausboss 2f456ef288 Merge main into fix/nodes2-card-height 2026-10-06 13:38:54 -05:00
ausboss 4c8907a585 Seed and Workflow Switches: keep their own height in Nodes 2.0 too
Both are cards alone on their node. In Nodes 2.0 they stretched with a
node made taller, with empty space inside the card. They call
pinVuePanelHeight like the other cards now. Run Timer stays the one panel
that fills its node on purpose, and the guard names only it.
2026-10-06 13:37:48 -05:00
ausboss fc65f84f8f Merge pull request #137 from ausboss/feat/image-folder
Add Image Folder: pick a folder, tick its pictures, run the workflow on each
2026-10-06 13:30:50 -05:00
ausboss 36d6905477 Add Image Folder: pick a folder, tick its pictures, run the workflow on each
A loader for many pictures. The card chooses the folder inside ComfyUI's
input or output folder, and a thumbnail gallery under it ticks the pictures
to use. All in one run sends every picked picture through as a list; one
per run loads one picture each run and moves on when a run is queued. It
gives image, mask, filename, index and count. Pictures dropped on the node
or added with Add are uploaded into the input folder.

Folder names and picked names are attacker-controlled: a folder is only
read as a path below the input or output folder, links that lead out are
refused, and picked names are compared with what the folder holds, never
opened.
2026-10-06 13:28:51 -05:00
ausboss 7469156a30 Cards: keep their own height in Nodes 2.0, the picture takes the rest
In Nodes 2.0 a node with a card above a picture panel gave half of its
spare height to the card. The card got empty space under its last row and
the picture was drawn at about half the size it has in the classic
renderer, on a node at its smallest size too.

Nodes 2.0 lets a widget's row take spare height whenever the widget has a
computeLayoutSize, and every DOM widget inherits one. A card that pinned
only its computeSize was pinned for the classic renderer alone.
pinVuePanelHeight clears the inherited method, and the widget cards and
Save Image's card call it. The classic renderer is unchanged.
2026-10-06 13:20:52 -05:00
ausboss 1ec9359a92 Node text: say what the nodes do today
Tooltips, two labels and one console warning still described older
versions of the nodes. Wording only: no inputs, outputs or saved values
change.

- Latent Size: the gear, its menu and an error said "Resolution".
- Video Crop + Rotate + Pad -> Clip: tooltips said Snap and Limit where
  the node says Frames for and Length, and described dragging a handle
  to move the whole window. IN and OUT trim; Length sets a frame count.
- Run Timer: earlier runs are in the right-click menu, not under the
  number.
- Krea 2 Outpaint Model Patch: the rounding strip the warning names only
  comes from Divisible by on the Crop + Rotate + Pad nodes. Load Image +
  Pad never adds one.
- Save Image: its preview switch said off skips a temp file. It writes
  none, so it gets its own tooltip; the other preview nodes keep theirs.
- Workflow Note: the Banner layout shows the title, subtitle and author.
- LoRA Loader: a docstring said the pack only reads the Civitai file. It
  also writes it on Fetch Civitai info.
2026-10-06 13:15:16 -05:00
ausboss ac0bb08949 Help pages: say what the nodes do today
32 of the ? help pages checked against the code and corrected.

Wrong claims fixed: Stitch Inpaint's empty-area check (20/255), what a
new video keeps on both Video Crop + Rotate + Pad pages, Load Video's
frame picker and player height, where Run Timer lists earlier runs,
inpainting on the Krea 2 Outpaint Model Patch page, Workflow Note's
banner layout and pack detection, Image Resize's pad bars and mask,
Save Image's path preview and tags, Free Memory's steps, and Latent
Size's sockets.

Image Crop + Rotate + Pad now follows the node from top to bottom; the
saved values no row shows moved under Technical details.

Controls are named the way the node shows them, with the input name
beside. Pages that opened with jargon now open with what the node does
and when to use it. LoRA Loader gained the Civitai lookup, suggested
strength and the gear options it did not name.
2026-10-06 12:59:04 -05:00
ausboss 8f1f22be98 Workflow Note: Detect from this workflow also reads subgraphs
It read the main canvas only, so a pack used only inside a subgraph was not listed.
2026-10-06 12:57:32 -05:00
ausboss 8cc220df6c Image Resize: pad adds no bar when width or height is 0
A width+height box with a 0 in it takes its shape from the source, so only rounding and Multiple separate the two. Pad answered that with a bar 1 or 2 px wide: a 1000x700 picture with Multiple 16 came out 1008x704 with a 2 px bar. The picture now fills the box. The output size is unchanged, and a box with both sides set pads as before.
2026-10-06 12:57:32 -05:00
ausboss 5e90c059ef Load Video: leaving FRAME with the frame at or after OUT moves OUT to the end
Picking a frame writes IN. With the frame at or after OUT the node held a start after its end, and the next run stopped with "Load Video needs start_seconds smaller than end_seconds" until a handle was moved.
2026-10-06 12:57:32 -05:00
ausboss f94feaf2dc Merge pull request #132 from ausboss/release/2.7.0
Release 2.7.0: Mask by Name and Workflow Switches
2026-10-06 11:35:04 -05:00
ausboss 8946850038 Release 2.7.0
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.
2026-10-06 11:34:02 -05:00
ausboss 8d9b25733c Merge pull request #131 from ausboss/feat/mask-by-name
Add Mask by Name: type what to find in a picture and get its mask
2026-10-06 11:20:10 -05:00
ausboss 47f124bd49 Mask by Name: it needs ComfyUI 0.20, not 0.38
ComfyUI has had the SAM 3 node this uses, with the same inputs, since
SAM 3 support landed. The help page also says which ComfyUI Free VRAM
needs.
2026-10-06 11:18:32 -05:00
ausboss 64df182242 Cards: show each row's tooltip on hover
The card read a row's hover text from the widget, where the frontend does
not keep it, so no row of any card said anything on hover. It now falls
back to the node's definition, which holds the tooltips the backend
declares.
2026-10-06 11:16:19 -05:00
ausboss 50ca945339 Mask by Name: say when to turn Free VRAM on
The tooltip, the help page and the README now tell people who build
workflows to turn Free VRAM on when a big model loads after this node.
2026-10-06 11:10:17 -05:00
ausboss 73f273c3dc Cards: opening More keeps the height the person gave the node
A card whose height changed set its node to its smallest size, so a node
made taller for its picture lost that height whenever More opened or
closed. The node now grows or shrinks by what the card did when the person
changed it by hand, stays as it is when the card changed by itself, and a
loading workflow takes its saved height. A node that sat at its floor
still hugs the new floor.
2026-10-06 10:54:38 -05:00
ausboss 9e7536cbfd Mask by Name: Fill holes and Free VRAM under More
Fill holes fills gaps that lie fully inside the mask, with the same fill
Mask Refine uses. Free VRAM takes SAM 3 and its text reader out of the
graphics card's memory right after the search, with ComfyUI's own unload
of one model, also when the search found nothing. Both are off by
default.
2026-10-06 10:28:20 -05:00
ausboss 895493c49c Mask by Name: the card, the FIND button and the picture on the node
Registers the node, gives it a widget card and the shared preview panel
with a FIND tool that runs the node alone, a readout of how many things
matched and how sure SAM 3 was, and the stop message on the node's own
face. A stopped run shows the plain picture, not the last find. Each name
asks SAM 3 for up to 16 matches, and Sureness starts at 0.7.
2026-10-06 09:59:28 -05:00
ausboss 0c8c74dc3d Add the logic and backend of Mask by Name 2026-10-06 09:41:41 -05:00
ausboss bad6539bdd Merge pull request #129 from ausboss/feat/workflow-switches
Add Workflow Switches, a card that turns parts of a workflow off and on
2026-10-06 09:37:54 -05:00