Clamp finite mask values to [0, 1] before uint8 contour conversion while
preserving input arithmetic dtype, batch handling and combined behavior.
Add CPU and native-workflow regression coverage for range boundaries,
tutorial mask behavior, widget serialization and fresh browser execution.
Document the isolated test environment and regression verification scope.
Keep original automatic-mode candidates and empty selections, retain entry punctuation, and reject cross-drive paths without breaking category discovery.
Remove the obsolete-socket fixture and its two compatibility cases while retaining fresh hook execution and native reload checks in both restoration modes.
Validation: focused catalog and hook E2E tests pass (3 tests); all 14 remaining catalog tests collect successfully.
Recreate the hook through Chrome node search and native Export, preserving every expected widget name, order and value. Cover fresh and legacy hook execution with both native restoration modes.
Validation: all 16 catalog E2E tests passed on the identical source tree; native Export also normalizes MaskRectArea height from 356 to 358.
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.
Restore a valid selection after reconnecting the last Switch input and remove
the redundant loading check after the early return.
Add Chrome regressions for workflow loading, routing, reconnection, legacy
Switch names, and image, mask, SEGS, conditioning, and regional-prompt combine
nodes. Wait for imported nodes to replace the previous graph, and check
non-default selections and fresh outputs after editing.
Keep the different-size mask batch test as a documented pre-existing failure;
its backend implementation is outside this change.
- 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.
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).