quadtree_density used a count-percentile threshold that guaranteed a
fixed hot fraction on any canvas, saturating scores to 1.0 regardless
of content. Redesigned around a value threshold interpolated across
the canvas's own p05-p95 block energy range, normalized to p95 tile
coverage. Validated against real VAE latents: healthy 0-1 spread,
stable across split_percentile 0.3-0.8.
Also fixes: seed+tile_idx overflow past torch's 64-bit seed range,
identical noise across tiles in the advanced node (NOISE objects
reuse a single stored seed), unfeathered seams when the clamped last
tile's overlap exceeds the configured overlap, avg_pool2d crash on
tiny latents, dropped noise_mask/batch_index in output latents, and
an overly-broad pytest import guard in __init__.py.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Delete unused guider_utils.py, gaussian_blend_tiles, resize_mask_to_latent
(and its test); drops the numpy dependency from utils
- Extract the duplicated neighbour-copy block from node.py/node_advanced.py
into build_working_tensor() in image_utils
- Port 5D video-latent handling and fix_empty_latent_channels from the
adaptive detailer to LLMTileSequentialDetailer
- Throttle soft_empty_cache to every 4 tiles (plus a final flush)
- Run the quadtree scorer on CPU to avoid per-region GPU syncs
- Stub fix_empty_latent_channels in conftest (restores 5 failing tests)
- Ignore .claude/ and pytest cache dirs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Generator nodes dispatch seam coherence by wired input: a ControlNet
(SDXL/Flux conditioning path) or a DiffSynth/Fun inpaint model patch
(z-image/Qwen), sharing neighbor-pixel context and a keep-mask. Empty
latents are resized to the model channel count so 16ch/video-format
models (Flux, Krea2/Wan21, z-image) work. Adaptive detailer handles
5D single-frame video latents. README documents both coherence paths.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
i'm trying to improve the tiled diffusion - these changes in node and node advanced are to ensure that final output is always tile width * grid width by tile height * grid height. i'm also starting work on a new tiled diffusion upscaler.