S1 of the 2026-09-08 layout plan: DyPE/SEGA/SPA/HAP node classes now live
in nodes/{dype,sega,spa,hap}.py with engine imports via dual-form try/except
(loader-relative ..src / flat src). Entry __init__.py keeps extension
registration only. nodes/__init__.py re-exports the full 8-class surface
(transitional src/*_node re-exports until S2/S3 land). All patch nodes
category -> WMNodes/image. New tests/test_structure.py guards the layout.
The DyPE extrapolation methods (ntk/yarn/vision_yarn/pi) never
affected SPA output: SPA always applies the model's native
no-extrapolation RoPE (ntk_factor=1.0) on the bundled coords
(HRDiT "nor" RoPE). The knob was inherited UI plumbing from the
DyPE base-class constructor chain and only invited misleading
A/B testing.
- drop the method combo from the SPA node schema + execute()
- keep method/yarn_alt_scaling params in apply_spa_to_model for
the DyPEBasePosEmbed constructor chain (documented as no-ops)
- add a schema guard test asserting the input stays removed
- update README parameter table + changelog
HRDiT-style bundle+slide positional alignment for high-res DiTs
(Krea-2, Z-Image, FLUX, Anima, Qwen, Nunchaku). Fixes the
ripple/mosaic output and ~10x inference time at bundle_size>2.
- bundle_size is the paper's tokens-per-bundle N (0=auto, 1=off,
2..8 explicit); legacy group_num-scale values (>=32) migrate to
auto with a one-time warning
- trained-extent gate: identity at <=1024px (no big-patch mosaic)
- spa_steps (default 3) gates SPA to leading denoise steps;
~1.3-1.8x overhead instead of 10x
- delta-RoPE cache: inv(base)@variant composed once per grid
- averages attention OUTPUTS across 2s-1 slide variants (not
rotation matrices), killing the period-s ripple
- Remove validate_inputs() which caused per-input error spam in ComfyUI
- Add _snap_to_multiple() helper that rounds to nearest multiple of 16
- Apply snapping at top of apply_dype_to_model() for graceful UX
- width=1000 now silently becomes 1008 instead of blocking execution