Address CodeRabbit review on the --disable-mmap fix: reject headers over
the safetensors size limit and tensor data ranges that don't match their
declared shape/dtype (previously a corrupt header with start==end for a
non-empty shape produced an uninitialized tensor instead of an error),
and read each tensor directly into a single bytearray via readinto()
instead of read() + bytearray() copy to halve peak host memory use for
large files.
load_torch_file only wrapped the tensor returned by
safetensors.safe_open()/get_tensor() in a copy when --disable-mmap was
set; the mmap-backed read that produces that tensor had already
happened by then. On Windows that mmap-backed read of large
safetensors files can crash the long-running ComfyUI process with an
access violation (#15424). --disable-mmap now reads tensors with plain
file I/O so no mmap of the file is created at all.
This avoids name collision (circular imports) for external custom nodes,
for which the comfy path is pushed into sys.path so Python's own logging module
is shadowed otherwise.
fixes: #15229
This priority scheme was broken in the case where you have pin
registration exhaustion while loading a VBAR that gets a big evicition.
The weight would stay in the loaded set but inherit the MRU priority
against other workflow models WRT pin registration which leads to async
offload without pinning.
Fix by universally promiting active pin registration above workflow
pins without concern for the weights/weights-loaded split. This diverges
from the actual budgeting where the split still makes sense.
Changes:
Remove sequential scan hint
Prefer NVML pressure on windows
Add async malloc clamp option (unused by comfy so far)
Workaround AMD windows GPU virtual address space leak
The largest change is the NVML pressure, which works around a cuMemGetInfo
drift from actual VRAM in some circumstances.
Windows has proven this logic works for a long time and there are
corner cases where this materialization actual consumes real RAM
on linux.
Its not as bad as the original windows commit charge surge, but
its still a detectable transient leak. So simplify and unify.
Some long running chaos testing on a 512GB RAM RTX6000 pro showed that this
is a little bit too low for common template workflows switching around. The
original number was just a guess from me, so go with the scientific result
instead.
These were alll non-dynamic (some non-ModelPatcher) code path calling
FreeMemory for management requiring up-front memory freeing. Convert it
to dynamic to avoid legacy free behaviour mixing into otherwise
dynamic workflows.
* Add native Uni3C controlnet support for Wan models
* Dispatch double_block patches in all Wan model variants
* Remove unused grid_sizes assignment in CameraWanModel, WanModel_S2V, HumoWanModel, and AnimateWanModel