Commit Graph
110 Commits
Author SHA1 Message Date
stuttlepress bb8fbf18c0 Remove reference_image input from WanVACEInpaint
Handle reference images via WanVaceToVideo.reference_image instead,
which properly VAE-encodes, channels-doubles, and prepends the frame
alongside the control video latent. Avoids double-prepending when
both nodes tried to handle it.
2026-06-01 13:57:43 -05:00
stuttlepress fd26858b55 bump version number 2026-05-28 18:33:32 -05:00
stuttlepress a9ad9c782b Reduce memory consumption when crop area is much larger than output resolution v1.0.25 2026-05-28 18:32:01 -05:00
stuttlepress 7a44b899fc bump version number 2026-05-28 10:55:35 -05:00
stuttlepress b60c9caa5e Fixed bug in LTX outpainting workflow that prevented original audio from passing through. v1.0.24 2026-05-28 10:53:47 -05:00
stuttlepress c7f83ad304 Version number bump 2026-05-26 14:23:01 -05:00
stuttlepress 1a04180090 Improved LTX-2 outpainting example workflow v1.0.23 2026-05-26 14:20:11 -05:00
stuttlepress 534a0bfdfe Improved LTX-2 outpainting example workflow 2026-05-26 14:12:16 -05:00
stuttlepress c35cc785b1 v1.0.22 v1.0.22 2026-05-26 12:25:12 -05:00
stuttlepress eaa1e9d06c Fix a race condition that could cause mask color selection to be reset. 2026-05-26 12:22:39 -05:00
stuttlepress c1c855fe2c Nodes 2.0 notes update 2026-05-26 12:21:46 -05:00
stuttlepress 1b598ae956 increment version number v1.0.21 2026-05-12 14:44:12 -05:00
stuttlepress 939f25ad55 .gitignore 2026-05-12 14:31:44 -05:00
stuttlepress 68aff828eb Hide internal state widgets in V2 renderer
V2 checks widget.type to decide whether to render; setting only
widget.hidden = true was insufficient. Adding widget.type = "hidden"
matches the V2-compatible pattern used across the ComfyUI ecosystem.
2026-05-12 14:30:41 -05:00
stuttlepress 7501641cd3 Fix VACEOutpaint infinite expand loop in V2 renderer
In ComfyUI's V2 (Vue) renderer, node height is derived from the DOM
widget's rendered size, so setting dom.wrap.style.height inside onResize
creates a feedback loop: each DOM change causes V2 to fire onResize again
with a larger size[1], growing the node without bound.

The fix measures the actual node-height overhead (everything above
dom.wrap) from V2's own first onResize call, where size[1] is DOM-derived
and therefore encodes the exact overhead needed for a zero-change
equilibrium. The handler returns early without touching the DOM until this
measurement is taken, so the loop never starts. A secondary recalibration
step corrects the overhead if V2's internal chrome value shifts post-init
(observed in diagnostic data). The dom.wrap.offsetHeight === h guard is
the terminal condition for both cases.

V1 behavior is unchanged: overhead is pre-seeded with the hardcoded
CTRL_H + NODE_CHROME and no measurement or recalibration runs.

Thank you to @fullthrottler for identifying the root cause and suggesting a temporary fix.
2026-05-12 14:22:19 -05:00
stuttlepress d7f62946f6 Fix outpaint widget becoming unresponsive when node starts offscreen
If a workflow is loaded with the outpaint node outside the visible
viewport, ComfyUI gives the DOM widget clientWidth=0. The double-rAF
initLayout call returned false, and the old code did an early return
that skipped wireInteractions, setupResizeObserver, and the
execution_success listener entirely. The node had no event handlers
and no way to recover.

- Double-rAF no longer returns early on layout failure; interactions
  and the ResizeObserver are always wired up
- ResizeObserver handles !st.initialized by running the full deferred
  init sequence the first time the wrap gets a valid size
- initLayout returns false early when maxW or maxH <= 0, preventing
  degenerate scale values from a partially-visible wrap
2026-05-12 13:20:20 -05:00
stuttlepress a12269b27c Merge branch 'feature/vace-inpaint' 2026-04-18 19:43:39 -05:00
stuttlepress 2513133293 increment version number 2026-04-17 17:13:24 -05:00
stuttlepress 46d5fcb0e3 Fix outpaint node connection in LTX workflow 2026-04-17 17:12:24 -05:00
stuttlepress f0466509fb increment version number v1.0.19 2026-04-16 14:31:47 -05:00
stuttlepress 6498a085a7 Add example LTX Outpaint workflow 2026-04-16 14:29:35 -05:00
stuttlepress 1ad8843044 Add custom pad color support
- Control video pad color is now customizable, allowing direct use with the LTX-2 outpainting lora and any other applications that require a specific color.
- Node renamed to Video Outpaint to reflect its utility beyond VACE.
2026-04-16 14:22:47 -05:00
stuttlepress 6bf723652a Add Experimental section and Wan VACE Inpaint docs to README 2026-04-16 02:31:10 -05:00
stuttlepress 87e0c51d23 Tag inpaint as beta 2026-04-16 02:18:13 -05:00
stuttlepress 462496a60d Add WanVACEInpaint node and register in __init__.py 2026-04-16 02:12:48 -05:00
stuttlepress 41c07f4f0c update version v1.0.18 2026-04-13 00:52:54 -05:00
stuttlepress 631c21a0ae Normalize class and name mappings for comfyui manager 2026-04-13 00:51:16 -05:00
stuttlepress 26eb0cf1b6 Increment version number v1.0.17 2026-04-12 13:48:34 -05:00
stuttlepress 2b4eaadb73 Merge branch 'main' of github.com:stuttlepress/ComfyUI-Wan-VACE-Prep 2026-04-12 13:45:52 -05:00
stuttlepress d21e0916c5 Fix outpaint node state persistence bugs
- Output resolution is now preserved across reloads and re-runs.
  Previously, settings like 720x1280 (9:16) would silently revert to
  1280x720 whenever the node refreshed its preview frames - on page
  load and after every workflow execution.

- Aspect ratio lock button state is now saved with the workflow. If
  you unlocked the AR (showing the open padlock), that choice is
  remembered when you reload. Previously it always came back as locked.

- Aspect ratio chip highlight no longer desyncs when the node scrolls
  off-screen. Scrolling the node out of view and back could cause the
  wrong aspect ratio chip to appear highlighted (e.g. showing 16:9
  active when the crop was actually 9:16). This is now fixed.
2026-04-12 13:45:43 -05:00
stuttlepress 0d76707b80 Move mask and crop geometry outside the frame loop 2026-04-11 17:36:52 -05:00
stuttlepress 0970472971 Update README.md 2026-04-07 00:22:50 -05:00
stuttlepress 77d216a259 js cleanup 2026-04-06 21:25:10 -05:00
stuttlepress 54fd4ff4da Increment version number v1.0.16 2026-04-06 17:04:43 -05:00
stuttlepress 4400127b38 Update README.md 2026-04-06 16:54:10 -05:00
stuttlepress 969972a08a Update README.md 2026-04-06 16:50:47 -05:00
stuttlepress 0a14d4c7dc Update README.md 2026-04-06 16:48:14 -05:00
stuttlepress a9eda8d9d4 README and example workflow updates 2026-04-06 16:43:14 -05:00
stuttlepress 0971207bfe refactor node naming 2026-04-06 16:42:39 -05:00
stuttlepress d3c31cd506 Update README for outpaint node 2026-04-06 13:29:27 -05:00
stuttlepress 31f7cec250 code cleanup 2026-04-06 13:03:04 -05:00
stuttlepress 846d6bbc8e Integrate outpaint node 2026-04-06 12:52:19 -05:00
stuttlepress f388477251 Import vace_outpaint node 2026-04-06 12:31:03 -05:00
stuttlepress a5b1b13f8e Add 'tmp-import/' from commit '1028b5559f1b10c32489f480aa08e7f1868152fd'
git-subtree-dir: tmp-import
git-subtree-mainline: 1d3b77c220
git-subtree-split: 1028b5559f
2026-04-06 12:30:12 -05:00
stuttlepress 1028b5559f Canvas / layout
Canvas wrap changed from fixed height to min-height so the node can grow vertically
CANVAS_H comment updated to "minimum" height; initLayout and fitCropInView now use dom.wrap.clientHeight instead of the constant
ResizeObserver bails out early if clientHeight <= 0 (collapsed/hidden node)
node.onResize hook added: enforces a minimum width of 520px (with left-edge compensation), and grows dom.wrap.style.height to fill extra vertical space
NODE_CHROME constant (72px) and MIN_W (520px) added; CTRL_H bumped 170→185
Output resolution logic

Removed the "auto" button from the output size row; label changed from "out:" to "output resolution:"
Added syncOutToAR(st) helper — keeps outW/outH AR-consistent with cropAR
Added defaultOut(st) helper — computes output size from source pixel area shaped to current cropAR
Output fields now always have a value (defaulted via defaultOut); clearing a field resets to default rather than going to "auto/0"
Output W/H inputs: invalid input now resets to default instead of zeroing out
Chip (preset AR) clicks now preserve pixel area and call syncOutToAR
AR lock / crop interaction fixes

Two places had inverted logic (if (st.arLocked) → if (!st.arLocked)) for updating cropAR during snap/center moves
Drag-resize and edge-drag now call syncOutToAR(st) after crop changes
render() now uses cropAR for active chip highlight (instead of raw crop box ratio), with tolerance loosened 0.001→0.005
hasOutScale label only shows → arrow when output differs from crop size
Initialization / restore

After restoring crop state, ensures outW/outH are set and AR-consistent
wireInteractions called before render (order swap)
crop_state widget gets cs.hidden = true
Backward-compat comment added for removed matchSrcFlag (parts[6])
2026-04-06 12:22:42 -05:00
stuttlepress b0122fb891 Initial VACE Outpaint Prep commit 2026-04-05 13:08:37 -05:00
stuttlepress 2cd4f5536c VFS: add Wan-friendly resolution toggle 2026-04-05 13:06:40 -05:00
stuttlepress 2b67355a63 VFS: Add wan-friendly resolution toggle 2026-04-05 13:06:07 -05:00
stuttlepress 4f9e84f85e Fix output_all_frames persistence across reloads 2026-04-04 18:31:22 -05:00
stuttlepress 553ac77ed5 Remove TODO.md from tracking 2026-03-31 12:32:41 -05:00