Repository navigation
Releases: chanon/comfyui-obvpm
Releases · chanon/comfyui-obvpm
Release list
0.2.18
Changes
- Added: a Value Presets node answers another pack's tool with its presets and the values one would run with, without changing the node (
obvpmPresetLabels(),obvpmPresetRunValues(label); nothing while its preset is wired). The Timeline uses it to run takes with a preset picked in its own settings.
Released 2026-10-21.
Full Changelog: v0.2.17...v0.2.18
0.2.17
Changes
- Unbundle: changing one field of a bundle re-runs only what uses that field. ComfyUI decides what to re-run from everything upstream of a node, so with a real Unbundle in between, swapping the VAE packed into a model/clip/vae bundle re-ran everything after every output of that Unbundle -- text encoding and sampling included. When an Unbundle's bundle comes from a Bundle, the Unbundle is now converted to a virtual node: it is left out of the prompt and each output is wired straight to that field's source, the way KJNodes' Set/Get work. It stays a real node -- unpacking server-side exactly as before -- whenever that cannot be done safely: a switch or Value Presets on the bundle wire, a muted or bypassed Bundle or field source (or a subgraph around one), a subgraph used more than once, or a wire the server would refuse once the Unbundle is gone (text into a dropdown, INT into FLOAT). Bundles inside bundles, Bundle to List and Peek Bundle keep working. Contributed by bananasss00 (#23).
- Fixed: an Unbundle's
getlist left out a KJNodes Set fed from another Unbundle. Unbundle outputs have no fixed type, so a Set wired to one (sayimages_bundlefrom Load Images & Compose'sextras) has the type*, and the list only offered Sets typed as a bundle -- it came up empty. A*Set is now offered when its wire leads back to a bundle whose fields can be named; one carrying an image or another single value still is not. - Fixed: an Unbundle of a bundle taken out of another bundle showed no outputs when that inner bundle came from a Value Presets node, or from a switch (all of whose choices hold the same fields), rather than straight from a Bundle. It is now named the same way as when it is wired to the Unbundle directly, and a KJNodes Set holding it is offered to a
get. - Fixed: the page could freeze after clicking the arrows of a dropdown with nothing to choose -- an Unbundle's
getwith no Set to offer, a switch'sselected, a Value Presets dropdown. ComfyUI then set the value to nothing, which the canvas could not draw, so it stopped redrawing altogether. Those arrows now leave the value as it was.
Released 2026-10-18.
Full Changelog: v0.2.16...v0.2.17
0.2.16
Changes
- Value Presets and Override Bundle Values: no "Missing Models" warning for a model the run does not use. ComfyUI (frontend 1.55) checks every model dropdown on the canvas when a workflow opens, hidden ones included, so the timeline workflow's hidden turbo LoRA (turbo off) and the H3 Model override's hidden model (override off) were flagged whenever those files were not on the machine -- a red node, the Missing Models message and a warning on Run, with a field the node does not even show. A hidden field (its
whenis off, or the node switches it off) and the value under an override that is off are now passed by that check. When such a field is shown or hidden later -- turbo switched on, a preset that switches it off again, an override switched -- ComfyUI's check runs again, so a model that is missing and now used gets ComfyUI's own warning at once, and the warning goes when the field is hidden again. Only then: not on load (ComfyUI checks a loaded workflow itself), and once per change. Older frontends have no such check, and nothing changes there. - Fixed (timeline #47): a Bundle or Value Presets node set to a constant could lose its name, so every Get of it -- a KJNodes Get or an Unbundle with
get-- read nothing and the run stopped (in the timeline workflow: "expected a bundle but got NoneType" from Override Bundle Values). It happened to a workflow opened while an older comfyui-obvpm was installed, one without thesetfield: widget values are saved by position, so that copy was saved (or kept in the browser's open tab) without the name, and after updating it came back empty. Such a node now puts its last name back when the workflow opens (the browser console says which), as long as it was not saved again after the update -- that save cleared the remembered name too. Opening the workflow file again also works. - Override Bundle Values, Unbundle, Bundle to List and Peek: when nothing comes in on
bundle, the error now says so and points at the Get and theset_constantname it reads, instead of "expected a bundle but got NoneType". - Auto Bundle: switching to a workflow's tab is faster. Every re-check took the node's empty spare input out and put the same one back, and restated every link record whether it had moved or not; the spare now stays when it is already in place, and a link record is written only when it changes. Switching back to a 200-node workflow's tab: this pack's part about 365 ms to 180 ms.
- Bundle, Unbundle and the auto switches: workflows open faster still. While a node is being built, ComfyUI asks its size after every socket it adds, and each answer measured every socket's label; now only the new one's. Trimming spare sockets read the whole socket list again after each removal, and the auto Bundle restated every link after each one; both now happen once. The style sheet that narrows these nodes in Nodes 2.0 was rewritten once per node as a workflow loaded; now once. The theme's colours are read once and kept until the theme changes, not on every button paint. A 200-node workflow: about 0.25 s less in either renderer.
- Bundle, Unbundle and the auto switches: workflows open much faster. Every wire in a workflow told these nodes to re-check the whole graph while it loaded -- hundreds of full re-checks for one workflow, each re-wiring sockets and redrawing. They now re-check once, after the load (or the edit) is done, with the same result. Measured on a 200-node workflow: 7.2 s to 3.0 s to open (classic), 11.5-15 s to 5.3 s (Nodes 2.0). Socket label widths are also kept instead of measured again on every resize.
Released 2026-10-15.
Full Changelog: v0.2.15...v0.2.16
0.2.15
Changes
- Load Image & Crop and Load Images & Compose: symlinks and Windows junctions inside the input folder are followed -- a library linked in from another drive lists and loads like any other folder, as with core's Load Image. Before, an image reached through a link that pointed outside the input folder was refused ("outside its annotated directory") and such folders were left out of the lists. Paths are now checked as written:
.., absolute, drive, UNC and stream paths still cannot leave the input (or output/temp) folder. The input listing walks each real folder once, so a link pointing back up the tree neither loops nor lists the same images twice, and a link never takes a real folder's place in the list. - Load Images & Compose: a second output,
extras, a bundle:selected_image(the layer selected in the strip, cropped -- or the composed image while Result is selected) andimages_bundle(the layers as a bundle of their own,image_0,image_1, ..., each cropped at its own size; Bundle to List turns them into a list). An Unbundle onextrasnames its fields, and an Unbundle onimages_bundlenames those (Unbundle now follows a bundle that another pack's node nested inside its own:node.obvpmBundleNames(slot, path)). Existing wires onimageare unchanged. - New node, Bundle to List (obvpm/bundle): a bundle's values, in field order, as a ComfyUI list -- its one output is declared a list, so the node wired to it runs once per value. Made for Load Images & Compose: Unbundle
extras, wireimages_bundlein, get the layers as a list at their own sizes. An empty bundle stops the run naming the cause (an empty list would make the next node fail with a missing-argument error). A list cannot come out of an Unbundle: list-ness is declared per output socket, and Unbundle's outputs are generic. - Load Images & Compose: layers can be muted -- the eye badge at the top left of a strip entry, or the mute pill under the image, next to delete. A muted layer stays in the list, faded, and is left out of the composed image and of
images_bundle; it can still be selected and taken alone asselected_image. - Load Images & Compose: new
paddingwidget -- pixels of background (in thebackgroundcolour) all round the composed image and all round each separate image. It is added outsidemax_megapixels, and the composed image's sides stay a multiple of 16. The gap between layers moved off the node's face into a pill under the Result view (a menu of sizes, or any value from 0 to 256); a workflow's saved gap is kept. - Load Images & Compose: presets -- a
presetdropdown with save as, save and delete, in the Value Presets button style. A preset is the whole set: the layers with their crops, aspects and mutes, andmax_megapixels,background,paddingand gap. As in Value Presets, once anything differs from the chosen preset the dropdown readspreset ✎ modified(the tooltip names what changed, and changed settings are starred), and save and revert (put the preset back) show only then. Each is its own file in your user folder (user/default/obvpm/compose_presets/<name>.json, the file name is the preset's name), shared by every Load Images & Compose node in every workflow; the images are referenced by their input-folder names, not copied. - Value Presets: export and import one preset per file. Export… picks one preset (the node's own to start with) and copies or downloads it as the same file it is in the user presets folder (
<name>.json), so a downloaded preset can also be dropped in there; to move all your user presets, copy the folder. Import… opens several preset files at once, and still reads the multi-preset files older versions exported (tick the presets to take). - Value Presets: dropdown filters -- a new config page, Filters, lists the node's dropdown fields (choice lists and borrowed lists like
@UNETLoader.unet_name), each with an include and an exclude box, one pattern per line, to cut a long list down to the entries you use. A field lists the entries that match any include line (all when there is none) and no exclude line, so the order of the lines never matters and an exclude always wins; a pattern matches anywhere in the entry, ignoring case, with*for anything and\//alike. The page counts what each field keeps as you type (list shows them). The filters are saved with the user presets, underfiltersin the Preset Type Id's settings file (user/default/obvpm/presets/<preset-type-id>.json, beside the folder of its presets), so they need a Preset Type Id and apply to every node with that id, in every workflow, and to Override Bundle Values for the fields of a bundle from those nodes. Display only: presets and runs still take any entry, the value a field holds is always listed, and a filter that would leave nothing is not applied; a filtered field's tooltip says how much of its list it shows. - Value Presets: user presets are one file per preset,
user/default/obvpm/presets/<preset-type-id>/<name>.json(the file name is a safe spelling of the preset's name; the name itself is inside the file, so any preset name still works). A save writes only the presets that changed and a delete removes only its own file, so two browser tabs saving different presets no longer write over each other, a damaged file costs one preset, and presets can be copied, shared or tidied away as files.<preset-type-id>.jsonstays, as the id's settings file (the dropdown filters). The presets an older version saved in it are moved into their own files the first time they are read, and taken out of it only once every one is written; an older obvpm reading the folder layout lists no user presets (nothing is lost; update to see them). A user presets file that cannot be read is no longer written over by a save (the save says why instead). - Bundle and Unbundle: up to 128 fields (was 16), twice Value Presets' 64, so a bundle from any Value Presets node fits one Unbundle. Only the sockets in use are shown, as before. A workflow that uses more than 16 needs this version: an older one drops the pins past 16.
- Fixed (#18): the Unbundle settings listed only the first 16 fields of a bundle with more, so hiding fields could never bring the later ones into view. It now lists every field (the list scrolls), counts how many are shown, and refuses Apply with more shown than an Unbundle has outputs.
- Value Presets: a preset name wired into
presetselects it (#20). Before, a wired name was only a label and the hand-set values ran. Now the preset's saved values run (a field it lacks at its default), looked up among the workflow presets and, by plain name or★ name, the user presets -- which the page puts in the prompt while the input is wired (and only then: prompts are embedded in output files), so the server never reads the user folder.customruns the node's own values; an unknown name stops the run, listing the presets. A name known before the run (text and primitive nodes, obvpm switches with a known choice, Get/Set) is applied to the node at once and followed as it changes, so the fields show what will run -- edits by hand go back to it; a name made during the run is shown after it (the node reports the preset that ran). The chooser readspreset ⇠ inputwhile wired. A new hidden input,user_presets, is declared last. - Drag rows to reorder them (#19), in the Bundle and Unbundle settings, the Value Presets schema table and Message & Links: each row has a grip (the ▲▼ buttons stay); a line shows where it lands, and a long list scrolls while the pointer is near its edge (Escape cancels). Alt+↑/↓ moves the row you are typing in, and plain ↑/↓ in a one-line box goes to the box in the same column of the row above or below, as in a table (keeping its column through rows that lack that box). In the Value Presets schema, Shift-drag or Alt+Shift+↑/↓ moves a field's whole group past the next one, a field dropped inside another group joins it, and + add field puts the new field under the row you last worked in (in its group) instead of at the end.
- Fixed: reordering a Bundle's fields in its settings moved the names but not the wires on current ComfyUI frontends, so a field took another field's value (the frontend no longer lets a slot be moved by hand: its link lives outside it). The wires are now reconnected in the new order.
- Fixed: reordering an Unbundle's outputs in its settings disconnected the wires of the outputs it moved past, on current ComfyUI frontends. Each moved output's wires are now made again from its new pin, and survive a save and reload.
- Fixed (#21): editing a schema in the table editor could break it when a borrowed list (
@UNETLoader.unet_nameand the like) lacked the schema's default on this machine -- the note saying so ("The schema's default, '…', is not in this list here …") was kept as part of the field's tooltip, so the editor wrote it back into the schema as a line of its own, and the schema stopped parsing ("has no ':'"); changing such a field's type tochoicefailed that way. The note is still shown on hover but is no longer part of the tooltip text the editor edits, and a tooltip is always written as one line. - Fixed (#22): workflows with Load Images & Compose or Load Image & Crop loaded slowly when the input folder holds many images (seconds with thousands), and so did the compose layer picker and dropping an image on the node. Listing the input folder resolved every file on its own (a path resolve and a file check each); it now reads each folder once and judges plain files from that listing, with one more call only for a link -- the same list, about 80x faster (10,000 images: ~20 ms, was 1.75 s) -- and the calls ComfyUI makes in a burst (several per run for Load Image & Crop) share one listing for 2 seconds, or until something is added to the ...
0.2.9
Changes
- Value Presets: fixed the node staying blank ("still waiting for the schema from the server") in workflows where something keeps the canvas redrawing, such as a pack with animated links or live monitors (issue #12). Each redraw asked for the fields again while the answer was on its way, and the answer was then thrown away as out of date, over and over.
- Value Presets: fixed a false red "its graph holds ANOTHER node under id …" line over preset nodes after a workflow was loaded again (or undone, or its tab switched) while the nodes were still starting up. It came from the node the load replaced, not the one on screen, and showed whenever the node was not selected.
Released 2026-09-26.
Full Changelog: v0.2.8...v0.2.9
0.2.8
Changes
- Compatibility Check: new Message & Links in the details, for workflow authors: a short text and a list of links the node shows when the install can run the workflow (for example a tutorial video, a Discord, a support page). Links open only on trusted sites (GitHub, GitLab, Hugging Face, Civitai, YouTube, Discord, Patreon and a few more), with the real site shown next to each. See Message & Links.
Released 2026-09-26.
Full Changelog: v0.2.7...v0.2.8
0.2.7
Changes
- Bundle / Unbundle: new Set as a constant / Get from a constant option in the ⚙ settings. Turned on, the node sets or gets a bundle by a constant name instead of a wire, like KJNodes Set/Get, and works together with them: a KJNodes Get can read a Bundle's set, and an Unbundle's get can read a KJNodes Set that carries a bundle. Collapsed, the node then shows "Set name" / "Get name". Off by default, so existing workflows are unchanged. See Set / get by name.
- Unbundle: the ⚙ settings dialog now shows, for each field, whether the bundle on the wire (or the constant) has it: green yes, red no (that output gives None), grey when it can't be traced, with the reason.
- Bundle / Unbundle: the collapse (−) and settings (⚙) buttons are now drawn as icons instead of text characters, so they are the same size on every system (on some installs the ⚙ came out tiny). The Compatibility Check's settings button got the same icon.
- Bundle / Unbundle: fixed the node pack badge showing above the nodes again on ComfyUI frontend 1.53 in the classic (non Nodes 2.0) view.
- Value Presets: if the node can't build its fields, it now says why on the node instead of staying blank, and retries a failed build. Right-click the node → Copy Value Presets diagnostics copies a report for bug reports (what happened to the node, and errors other packs logged while the workflow loaded).
Released 2026-09-25.
Full Changelog: v0.2.6...v0.2.7
0.2.6
Changes
- New node Compatibility Check: It allows workflow creators to configure the minimum ComfyUI version required, and also what custom node packs are required for the workflow to work. Then when a user opens the workflow, they can see from the node if they are missing any node packs or if they are on a too old version of anything. Created to reduce support load from my timeline workflow. Also has a "copy report" button that lists the complete installation details for bug reports.
Released 2026-09-25.
Full Changelog: v0.2.5...v0.2.6
0.2.5
Changes
- Value Presets and Switches: Fixed on ComfyUI frontend 1.53 (ComfyUI 0.37) the preset chooser and a switch's
selecteddropdown were renamedpreset#1/selected#1when the node was created, after which choosing a preset changed nothing and the prompt sent the wrong input name (issue #12). - Bundle: Fixed issue where if ComfyUI is set to a non-English language input pin names could use the translated output pin names of the upstream nodes causing breaks in the downstream Unbundle(s). Workflows need no changes, they will automatically work in the new version.
- Fixed "Loading aborted due to error reloading workflow data — TypeError: Converting circular structure to JSON" when loading a workflow (for example by dropping a video or image saved from it) on ComfyUI frontend 1.52 (ComfyUI 0.36) with Nodes 2.0 enabled and a Bundle, Unbundle, Value Presets or switch node inside a subgraph (issue #13, comfyui-obvpm-timeline issue #6). The fresh slot objects handed to the Nodes 2.0 renderer are now real slots again instead of plain copies.
Released 2026-09-24.
Full Changelog: v0.2.4...v0.2.5
0.2.4
Changes
- Value Presets: The schema editor now has an edit as text button, which opens the schema as text to edit, paste into or copy from; Use this schema checks it and replaces the rows.
- Value Presets: fixed issue where couldn't save preset in ComfyUI Desktop (Electron)
- Value Presets: can now also rename presets
- Value Presets: the schema editor's hint column is now called tooltip, with a ✎ button that opens it in a bigger text box for editing
- Value Presets: fixed escape button closing the whole schema dialog instead of the popups
- Peek Bundle: fixed issue where it was not updating in Nodes 2.0
- Load Images & Compose + Load Image & Crop, Peek Bundle: fixed sizing issues in Nodes 2.0
- Bundle/Unbundle: fixed collapsed bundle/unbundle nodes showing nothing at all in Nodes 2.0 and having wrong wire position
Released 2026-09-23.
Full Changelog: v0.2.3...v0.2.4