Align memory behaviour with the reference Comfy-Org NVIDIA RTX node:
- torch.empty instead of torch.zeros: physical pages fault in as frames
are written, so reserving large video batches no longer forces the
full footprint up front (the OOM source).
- 24 GiB VRAM output ceiling (32 GB card): large batches stay in VRAM
instead of bouncing to the CPU tier.
- Drop the conservative up-front RAM pre-check from the default path;
the kernel decides. 'use_mmap' (now off by default, with a warning in
the help text) is the opt-in last tier of VRAM -> RAM -> disk.
- Collapse per-frame output write to 0 extra buffers in the in-VRAM case
(strided view + in-place copy_); cross-device/dtype still uses one.
- Director recipe + JS UI default follow use_mmap: false.
Tests: 26/26 green; allocator exercised in isolation for both tiers.
The bare-list combo (3861b6c) fixed the widget type, but the optional
socket's hollow ring still draws: LiteGraph draws optional sockets as
HollowCircle and core VAELoader.vae_name (required) draws none. The
backend socketless option-dict flag is ineffective in frontend v1.49.x
(addComboWidget only copies values/advanced/hidden onto widget.options,
so the !c?.options?.socketless gate never fires). The Director's JS
install() now nulls the preview_tiny_vae socket shape on create + load
-- same look as VAELoader, socket stays connectable. Drop the dead
socketless flag; update tests + docs.
Frontend v1.49.x maps a legacy ("STRING", {"combo": [...]}) tuple to a
free-text widget, not a dropdown. Use the bare-list combo spec shape
(same form as core VAELoader.vae_name) so preview_tiny_vae renders as a
clean model-selector combo; socketless=True in the options dict keeps the
optional input dot hidden.
The combo widget still carried a hollow optional input dot on the node edge
because the new frontend adds a widget-linked input socket for every non-
socketless widget. Mark preview_tiny_vae socketless (legacy dict key, same
pattern KJNodes uses in curve_nodes.py) so it renders like the VAE loader's
model-selector dropdown with no dot. Combo still sourced from
models/vae_approx. Align .tests + docs with source.
SAMPLER/SCHEDULER/STEPS/SHIFT external sockets (external > internal > default), sampling panel in the node UI with clamped inputs and external-override connected state, settings persisted across reloads. Import-safe: lazy comfy imports in the preview helper, guarded folder_paths vae_approx combo, synthetic-package test loader so tests pass with and without ComfyUI on PYTHONPATH (9 passed dev, 14 passed live).
- v1 reverted to the exact GitHub (origin/main) state, byte-for-byte:
nodes_minimax_h3_director{,_guide}.py, helper_minimax_h3_director.py,
helper_minimax_h3_prompt_builder.py, js/minimax_h3_director.js, plus the
github-versioned docs and mjs/py tests.
- v2 is a fully standalone 2.0 node (MiniMaxH3DirectorV2 +
MiniMaxH3DirectorGuideV2) with its own _v2 helper copies and
js/minimax_h3_director_v2.js. It no longer subclasses v1 and has zero
imports from v1 director modules, so both can coexist without affecting
each other.
- v2-only helper_media_output.py / helper_minimax_h3_director_execute.py are
superseded by their _v2 copies (v1-named originals removed); the v2 tests
now target the _v2 modules and v2 js.
- __init__.py registers all four: MiniMaxH3Director, MiniMaxH3DirectorV2,
MiniMaxH3DirectorGuide, MiniMaxH3DirectorGuideV2 (+ input_images route).
Verified: 22 pytest director tests pass, v2 imports with no v1 side-effects,
all four variants register.
Add an "Image Inpaint" mode to the MiniMax H3 Director with an optional
internal_execute path (clip/vae/seed inputs, prompt/extra_pnginfo hidden)
so the timeline can drive native inpaint execution in-node. Add
helper_media_output.publish_media_output to route images/video/audio through
the existing saver nodes, and helper_minimax_h3_director_execute for the
Director-owned inpaint execution + postprocess recipe. Extend JS + tests.
Update the MiniMax H3 Director changelog (docs/minimax_h3_director.md)
with three bug-fix entries added since the last 0.4.14 changelog:
- Legacy Director prompt preservation (36b9b3a): pre-builder prompts
are now detected on load and migrated into a lossless Simple-prompt
state instead of being silently dropped.
- Serialized standard prompt (009cd47): emit() now writes the resolved
prompt back to the prompt widget so it round-trips through
widgets_values on save/load.
- Legacy widget order preserved (ed5d393): frame_rate moved to the
end of the required input list so pre-frame_rate saves keep their
positional order; build_guide coerces a stale non-numeric value.
Bump pyproject version 0.4.18 -> 0.4.19.
- use_mmap off = never use disk; VRAM short -> use RAM if possible, else clear error
- auto_unload_models stays the first remediation when the active tier is short
- default flipped False->True; helper untouched (Watermark unaffected)
- docs/README reworded; bump 0.4.19
- New Resolution panel (Aspect / Resolution / Input scaling, all Auto default)
driving hidden width/height on MiniMax 16px grid; Auto aspect follows the
first visual reference (4:3 fallback), Auto resolution sets 768px short side;
aspect/MP/pixel presets plus CUSTOM values
- Input scaling delegates to DaSiWa_TorchResize (Off/Auto/Target/Fit/Fill and
crop/Fit and pad/Long side divisible crop); Auto never upscales sources at or
below a 2048px short edge
- external_prompt_overwrite replaces external_prompt (legacy input migrated
in-UI); external_width/height_overwrite replace the canvas and bypass
Director sizing/preprocessing when both are connected
- Toolbar consolidated (Mode / Prompt Mode / actions), video dimension probing
for auto aspect, progress doc for the feature
Extract shared CPU batch-output allocator into nodes/batch_output.py.
Replace the fixed 8 GiB in-memory cap with a dynamic reserve based on
system total RAM:
reserve = clamp(total_RAM * 25%, 1 GiB, 8 GiB)
The allocator checks psutil.available RAM at allocation time and falls
back to disk-backed mmap only when the complete output batch would
cross the reserve. GPU outputs keep their separate 8 GiB VRAM guard.
Migrated RTX Upscaler & Refiner and Watermark Overlay to the new helper.
Updated documentation and added targeted tests.
- Switch multiplier from 1_000_000 to 1024*1024 (1,048,576) to match
ComfyUI's Scale Image to Total Pixels node
- Recalibrate resolution presets (###p) to real-world pixel counts under
new formula with sufficient precision to avoid off-by-one rounding
- Keep MP precision preset labels unchanged (0.26-8.30) — they now
correctly map to ComfyUI-native megapixels
- Add unit tests for ComfyUI compatibility and preset accuracy
- Update documentation with MP convention explanation
Bump version to 0.2.10
Compact, color-coded system telemetry bar in the ComfyUI top toolbar.
Displays CPU, RAM, SWAP, DISK, and per-GPU Util/VRAM/Temp metrics
with proportional 0-100% background fills.
Features:
- Multi-GPU support (NVIDIA, AMD, Intel) with indexed labels (GPU0, GPU1...)
- Cross-platform (Linux/Windows) with graceful GPU tool fallbacks
- Responsive layout that hides lower-priority metrics on narrow viewports
- Independent toolbar placement, no dependency on rgthree or other extensions
- Detailed tooltips with device names, IDs, and byte-level usage
Files:
- nodes/system_monitor.py: psutil + nvidia-smi/rocm-smi/sysfs collector
- js/dasiwa_system_monitor.js: ComfyUI frontend extension with live polling
- tests/test_system_monitor.py: collector tests including Windows fixtures
- docs/system_monitor.md: full documentation
- assets/DaSiWa_System_Monitor.png: screenshot
- README.md: updated with new node section