Commit Graph
716 Commits
Author SHA1 Message Date
Linx e4394d45e7 fix: ignore seed in ImpactWildcardProcessor and ImpactWildcardEncode when no seed dependent text is present to prevent unnecessary execution 2026-11-01 09:08:56 +09:00
Dr.Lt.Data edabb4a668 Merge pull request #1258 from EnragedAntelope/fix/wildcard-indexed-paths-and-metadata
Fix on-demand wildcard recursion and Git metadata scanning
2026-11-01 08:22:22 +09:00
EnragedAntelope fc32922c44 Fix on-demand wildcard path resolution and metadata scanning
- Resolve normalized wildcard keys through indexed original paths
- Prevent recursive self-matches for missing indexed files
- Exclude Git metadata consistently from wildcard scans
- Cover path lookup, loading modes and precedence regressions
2026-10-31 15:24:10 -04:00
Dr.Lt.Data 20e8825201 bump version to 8.29 2026-11-01 04:18:28 +09:00
Dr.Lt.Data 1d12240b63 Merge pull request #1198 from rokurou2004/fix-mask-device-transfer
Fix: missing assignment for mask.to(device) in Gaussian blur (resolves CPU fallback and OOM)
2026-11-01 04:14:27 +09:00
Dr.Lt.Data 1ba4d745fc Integrate LoRA follow-up with current Main and trusted widget catalog 2026-11-01 04:03:12 +09:00
Dr.Lt.Data a80b1814b1 Merge #1219: Add generic LoRA wildcard source 2026-11-01 03:56:17 +09:00
Dr.Lt.Data fe338c5b09 Fix legacy SAM save and input handling 2026-11-01 03:22:13 +09:00
Dr.Lt.Data 011776c293 Fix legacy SAM compatibility after API import changes 2026-11-01 03:22:13 +09:00
Dr.Lt.Data 3d1b614f5d fix: retain core input validation and close LoRA regression test gaps 2026-11-01 03:19:39 +09:00
Dr.Lt.Data e862cbf0e4 Preserve legacy LoRA category aliases within configured root 2026-11-01 02:56:56 +09:00
Dr.Lt.Data 7a1b0659c4 Preserve automatic LoRA choices and prompt punctuation
Keep original automatic-mode candidates and empty selections, retain entry punctuation, and reject cross-drive paths without breaking category discovery.
2026-11-01 02:40:37 +09:00
Dr.Lt.Data 9961815cb3 Preserve saved LoRA labels and empty-category prompts 2026-11-01 02:19:49 +09:00
Dr.Lt.Data 154996e0f6 Reuse test primitives and strengthen regression assertions 2026-11-01 01:50:24 +09:00
Dr.Lt.Data 215a71bcbb Preserve original LoRA behavior and verify real inference 2026-11-01 01:26:32 +09:00
Dr.Lt.Data 66c9f61c33 Preserve wildcard workflows after adding LoRA source 2026-11-01 00:58:12 +09:00
Tulio Vianna 0a4610f198 feat(wildcard): add generic LoraWildcardSource node with dynamic category scanning, example workflow and sample styles 2026-11-01 00:42:12 +09:00
Dr.Lt.Data 5f24064df2 Fix wildcard RNG isolation during concurrent execution
Keep wildcard sampling on its per-call NumPy generator and remove Python RNG seeding and state restoration. Preserve the negative seed normalization from #1224.

Add 19 seed regressions covering fixed outputs, signed seeds, shared RNG preservation on success and failure, and concurrent consumers. All 117 standalone tests pass; the two concurrency cases fail again when the PR implementation is restored.
2026-10-31 23:48:41 +09:00
Dr.Lt.Data 7941c019b2 Merge #1224: Fix wildcard seed handling 2026-10-31 23:44:32 +09:00
Dr.Lt.Data 4f339c0759 Merge pull request #1218 from Tenzian/Main
fix: SEGSLabelFilterDetailerHookProvider - remove SEGS input requirement
2026-10-31 23:15:34 +09:00
Dr.Lt.Data 7c1fd27f3f Fix Switch routing and preserve native workflow compatibility
Fix lazy Switch inputs, Inversed Switch fan-out, and valid ANY connections.
Use target input slots for output connection guards, preserve mask batches
and one-pixel dimensions during resizing, and restore label-filter defaults.
Keep existing widget names and order and remove noisy selection logging.

Add Chrome regression coverage for routing, execution results, and tutorial
workflows. Add a UI-created catalog of 197 registered nodes and 712 ordered
widget values to detect native workflow loading regressions.

Require Full Cache mode and trusted-baseline checks before catalog additions.
Verify candidate workflows and browser cleanup before publishing fixtures.
Document the widget compatibility, test setup, and catalog-extension rules.
2026-10-31 22:12:48 +09:00
Dr.Lt.Data e8483bc2ea Merge pull request #1243 from oroboros083-jpg/fix-tensor-convert-rgb-copy
Fix 'Tensor' object has no attribute 'copy' in tensor_convert_rgb
2026-10-31 21:54:58 +09:00
EnragedAntelope 8ce3c99b4c fix(wildcards): skip and name a bad wildcard file instead of aborting the scan
- read_wildcard_dict wraps each file in try/except and logs a warning with the file path and error
- per-file body moved to _read_wildcard_file; empty YAML files are skipped in eager mode as in on-demand mode
- test: a malformed YAML is skipped and named while good txt/yaml files still load (eager and on-demand)
2026-10-30 23:50:08 -04:00
Dr.Lt.Data d59dc2f4c4 Fix configuration and wildcard loading, add Chrome UI tests
- Honor user settings when optional configuration keys are absent and
  report fallback to defaults.
- Share UTF-8/BOM decoding across wildcard loaders, retain logged
  Latin-1 fallback, and warn when expansion reaches its limit.
- Cover configuration and loader paths with isolated pytest regressions
  and enforce time limits for circular expansion.
- Exercise wildcard editing and Detailer workflows through Chrome,
  preserving original errors and traces when cleanup fails.
- Run API encoding checks against prepared test servers without
  changing configuration or managing server processes.
2026-10-30 00:11:42 +09:00
AndrewandClaude Opus 5.5 64c6c8d71d Clone, not copy, the RGB slice of a tensor in tensor_convert_rgb
tensor_convert_rgb is typed for NHWC torch tensors, but with prefer_copy it called image.copy(), which torch.Tensor does not have, so every RGBA image raised AttributeError. Use clone() for a tensor and keep copy() for a numpy array.

Fixes #1194, fixes #1178.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 10:40:42 -05:00
Joly0 346025e829 Fix wildcard processing with negative seeds and restore global random state
np.random.default_rng() raises ValueError on a negative seed, which skips
wildcard population and leaves the previous populated text in place.

process() also left the global random module seeded, which affects other
nodes that draw from the global RNG afterwards.
2026-07-27 14:24:14 +02:00
Tulio Vianna 53d44f78d4 feat(wildcard): add generic LoraWildcardSource node with dynamic category scanning, example workflow and sample styles 2026-06-20 15:23:59 -03:00
Tenzian 790ce39cb3 remove SEGS requirement 2026-06-20 16:44:12 +01:00
Dr.Lt.Data 5bed9d5545 bump version 2026-04-20 02:01:36 +09:00
Dr.Lt.Data d74c1d0112 fix: cross-version compat for DifferentialDiffusion + E2E test harness
Resolves `AttributeError: 'DifferentialDiffusion' object has no attribute
'execute'` on older ComfyUI (<0.3.63) where the V3 schema migration has
not landed yet. The prior code called `.execute(model)[0]` directly,
breaking anyone still on the legacy `.apply(model)` API.

Introduce `modules/impact/utils.apply_differential_diffusion(model)`
which uses `hasattr` to pick the correct branch at runtime:
- `.execute` -> V3 classmethod (ComfyUI >= 0.3.63)
- `.apply`   -> legacy instance method (older)
- otherwise  -> AttributeError with upgrade guidance

Replace all 7 direct call sites (animatediff_nodes, core x2,
impact_pack x2, segs_nodes, segs_upscaler) with the helper. The
existing import guard in segs_upscaler is preserved; the helper's
deferred import means ImportError still propagates for very old
ComfyUI builds without `comfy_extras.nodes_differential_diffusion`.

Fixes GitHub issue #1177.

Also add an E2E test harness:
- docs/E2E_TEST_STRATEGY.md — isolated-launch workflow with
  --disable-all-custom-nodes + --whitelist-custom-nodes, Playwright
  smoke test, workflow execution via /prompt + /history + /view,
  verification criteria, operational notes.
- tests/e2e_dd_compat.py — reference test that runs SEGSDetailer
  with noise_mask_feather=20 on a real input image, asserting
  status==success and non-zero pixel delta between input and paste
  previews (proves the detailer loop and compat shim actually ran).
2026-04-20 02:01:32 +09:00
Kazuki Iida 5b70efc142 Fix: Add missing assignment for mask.to(device) in Gaussian blur 2026-03-19 14:25:17 +09:00
Dr.Lt.Data 6a517ebe06 bump version 2026-01-02 21:05:11 +09:00
Dr.Lt.Data 51b7dcdffa refactor(js): extract shared utilities from MaskRectArea modules
- Move readLinkedNumber, getDrawColor, computeCanvasSize to common.js
- Import shared functions in mask-rect-area.js and mask-rect-area-advanced.js
- Remove duplicate implementations from both MaskRectArea modules
- Clean up unused debug parameter in syncLinkedInputsToProperties
2025-12-30 18:30:53 +09:00
Andrés Zsögön 4c864fafb0 Enable INT node inputs and fix live preview sync for MaskRectArea nodes (#1168)
## Overview

This PR improves both MaskRectArea and MaskRectAreaAdvanced nodes by allowing them to accept values from connected INT nodes, while preserving backward compatibility with existing workflows.

It also fixes several UI and preview issues that prevented the canvas from updating correctly when values were driven by links.

Fixes #1126

## Key changes

### 1. Typed INT inputs support (backend)

- Both MaskRectArea and MaskRectAreaAdvanced now declare proper INT inputs in INPUT_TYPES.
- This allows parameters such as x, y, width, height, and blur_radius to be driven directly by other nodes.
- Existing workflows that relied on node properties remain supported via fallback logic using extra_pnginfo.

### 2. Live preview correctly updates when inputs are linked (frontend)

- The canvas preview now updates immediately when values come from linked INT nodes.
- This is achieved by synchronizing linked input values into node.properties during canvas rendering, avoiding reliance on widget callbacks or execution timing.
- This directly resolves the behavior reported in issue #1126.

### 3. Node height and layout fix (frontend)

- The node height calculation was corrected to use the actual widget layout (last_y) instead of input/output counts.
- Nodes can now both grow and shrink correctly when resized or when widget content changes.
- This removes excessive empty space below the widgets and canvas.

### 4. Widget duplication prevention

- Frontend logic now detects when widgets are already created by Python and avoids recreating them in JavaScript.
- This prevents duplicated widgets and keeps the node UI consistent.

### 5. Comment cleanup

- Remaining comments in Spanish were translated to English for consistency and maintainability.

## Backward compatibility

- Existing workflows continue to work without modification.
- Default behavior and mask output remain unchanged unless inputs are explicitly linked.

## Motivation

These changes make the nodes composable with the rest of the graph (especially math and control nodes), improve the reliability of the preview, and fix UI inconsistencies without introducing breaking changes.
2025-12-30 18:26:50 +09:00
Dr.Lt.Data ba09fbc4c0 bump version 2025-11-19 00:28:03 +09:00
poipoi300 2717053166 Add support for 5D tensors in iterative upscale(Qwen / WAN VAE) (#1094)
* Update dims getting logic in IterativeLatentUpscale to assume that
height and width are at the end of the latent's dimensions.

* Update dims getting logic in IterativeLatentUpscale to assume that
height and width are at the end of the latent's dimensions.

* re-order args
2025-11-19 00:26:45 +09:00
Carrington Junior 4564406212 Update util_nodes.py (#1143)
Fix Reactor Masking Helper tensor concatenation issues

- Ensure all tensors are on the same device before concatenation.
- Add batch dimension to single images to support batched concatenation.
- Enforce height and width matching via upscaling to prevent dim mismatch.
- Handle channel mismatches by truncating to the minimum channel count.
- Remove unsafe tensor repetition to avoid excessive RAM usage.
- Prevent RuntimeErrors when concatenating images of varying sizes or devices.
2025-11-19 00:17:10 +09:00
Douglas Griffith 20275d1af9 onprompt patch (#1139) 2025-11-18 23:51:45 +09:00
Dr.Lt.DataandClaude 9da76f839c fixed: Wildcard system bugs - pattern matching and config paths
- Fixed __*/pattern__ not matching wildcards at any directory depth
- Fixed config.py to handle quoted paths in impact-pack.ini
- Fixed empty line filtering in wildcards.py
- Added comprehensive test suite (86 tests) and documentation

Closes https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues/1133

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 23:42:53 +09:00
Dr.Lt.DataandClaude fd1b40bee5 feat: Progressive on-demand wildcard loading system
Implement memory-efficient progressive loading for large wildcard collections (10GB+).

Closes #1137

## Key Changes

- **LazyWildcardLoader**: On-demand loading proxy with thread-safe caching
- **Auto mode detection**: Full cache (<50MB) or on-demand (≥50MB), configurable via `wildcard_cache_limit_mb`
- **Performance**: Startup 20-60min → <1min, Memory 5-10GB → <100MB, Size calc <1sec
- **API**: `/impact/wildcards/list/loaded` - Progressive tracking endpoint
- **UI**: Real-time status (🔵 On-Demand / 🟢 Full Cache) with loaded count
- **Compatibility**: Backward compatible, all existing features work unchanged

## Implementation

- YAML pre-loaded (keys in content), TXT on-demand (path = key)
- Early termination size calculation, transitive wildcard support maintained
- 15 test files with comprehensive documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:57:24 +09:00
Dr.Lt.Data 2804f7944f bump version 2025-10-10 01:44:20 +09:00
Dr.Lt.Data a3eb8d775f fixed: v3 node compatibility patch - ImageUpscaleWithModel
https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues/1116

fixed: v3 node compatilbity patch - LTXVScheduler
https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues/1110

fixed: v3 node compatibility patch - GITSScheduler
https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues/1106

fixed: v3 node compatibility patch - OptimalStepsScheduler
https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues/1109
2025-10-10 01:43:28 +09:00
Dr.Lt.Data b7cb2d0cb8 bump version 2025-10-09 11:30:24 +09:00
hcygnawandDr.Lt.Data 6173c0cb16 Optimize MaskListToMaskBatch (#1084)
* Optimize MaskListToMaskBatch

The complexity of the original implementation is O(n^2). Optimize it to O(n).

* Update util_nodes.py

robust mask upscale

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-09 11:27:52 +09:00
Alexopus 190ca9a6fe NthItemOfAnyList: allow negative index (#1085) 2025-10-09 11:00:26 +09:00
Danamir dc304e2dff Use a generic input value finder for wildcard populate seed input (#1092) 2025-10-08 12:05:07 +09:00
Dr.Lt.Data 2a23b07b2a bump version 2025-10-08 12:00:36 +09:00
ec31d21760 Optimized SEGSPaste memory usage (#1105)
* Optimized SEGSPaste to reduce memory usage

* Optimized SEGSPaste to reduce memory usage

* Changed behavior of SAM2VideoDetectorSEGS when BBOX doesn't return any segs

* changed behavior of SegsVideoDetector again. It will now try to detect bboxes on the reversed video if no bboxes are found. It will only give up once even the reversed run doesn't yield any bboxes

* changed Videodetector behavior to predict reverse when not finding any bboxes

* Update segs_nodes.py

---------

Co-authored-by: Kaski <23-23enterprise@gmx.de>
Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-10-08 11:53:16 +09:00
JonasandJonas Krauss 50736b276b change Differential Diffusion method from apply to execute (#1118)
Co-authored-by: Jonas Krauss <jonas.krauss@stockpulse.de>
2025-10-08 11:34:53 +09:00
Dr.Lt.Data 4186fbd4f4 bump version 2025-10-01 00:59:28 +09:00