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).