scripts/dump_node_schema.py imports the pack against the installed core
and dumps all 68 node schemas; --compare diffs two dumps (dynamic
file/folder combos normalized to presence-only for determinism).
scripts/check_web.py statically verifies JS imports, node-name
references, and CSS paths. Baseline captured pre-restructure.
Also removes a stale 'VideoComparerMXD' entry from image_comparer.js
(real key is 'Video Comparer MXD'; the entry never matched).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Snapshot of ~1 year of accumulated work prior to restructuring:
smart loaders merge, checkpoint loader/saver, live preview, model
storage auto-registration, LTX2 power lora loader, and misc web UI.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add a new ltxnodes module implementing LTX video latent nodes, samplers, and a taeltx-based video previewer (auto-download/load). Update package init to expose ltxnodes and adjust loraloader model list sorting for loras. Extend maxedoutnodes with a BBOX detector batch node and an Image+Mask preview node plus color parsing/helpers. Add VACE 2.2 latent save/load support and related helpers in wan22nodes (trim_latent sidecar, loaders), and enhance WAN 2.2 scaler logic to support 1024×1024 square buckets, aspect_mode options, and auto-square behavior. Add/modify several web UI assets and minor project housekeeping (.gitignore local_notes).
Multiple MXD improvements and additions:
- loraloader_mxd/power_lora_loader_mxd.py: import comfy modules; add robust bool/float coercion helpers; safer parsing of LORA_* inputs; apply LoRA without CLIP when needed; better error reporting.
- maxedoutnodes.py: Add embed_workflow optional flag to SaveImage_MXD and filter extra PNG info when workflow embedding is disabled; add new Extract Workflow From Image MXD node to extract/save workflow JSON from image metadata; register/display name updates.
- pyproject.toml: bump package version 1.9.0 -> 1.9.1.
- wan22nodes.py: many improvements around latent file handling and prompt metadata:
- sort latent files newest-first and list latent subfolders by latest mtime.
- accept a hidden unique_id and attach source KSampler metadata to saved latents.
- introduce robust graph parsing utilities to find KSampler nodes, collect upstream links and extract params reliably (with meta fallbacks).
- use the new utilities across latent loading/saving nodes.
- add LTX Image Scaler MXD node for LTX Video workflow (32-aligned resizing/cropping and tier selection).
- remove wan_svi_first_last_mxd.py (deleted file).
- web/js/betterCombos.js: add MXD alias constants and node configs for new/updated latent nodes.
- web/js/image_comparer.js: change extension hooking to patch nodeType.prototype directly (avoids boundClass naming issue), add comparer_mode combo and ensure stored nodes keep correct title.
Overall: improves robustness of LoRA application, latent file discovery/metadata, prompt graph parsing for reproducible sampler params, adds an LTX scaler node and workflow extraction helper, and updates frontend wiring for these MXD features.
Introduce a new CharacterPrompts extension: adds node implementations (Character Create, Character Edit/Delete, Character Prompt Encode) with storage, resolver, and README. Adds persistent character library storage (default/ComfyUI-CharacterPrompts-MXD/characters.json), server route (/mxd/characters/list), and a web UI integration (mxd_character_prompts.js + import) to refresh/pick characters in the graph. Update root __init__ to register the new module. Also remove the Grow Blur Mask MXD node from maxedoutnodes, and bump package version to 1.9.0 in pyproject.toml.
Multiple updates across the project:
- .gitignore: ignore AGENTS.md
- README: refreshed project README with badges, install instructions and node highlights
- loraloader_mxd/server/utils_info.py: add structured local LoRA storage (more_info/<model>/lora-info.json) with README creation, legacy .rgthree-info.json fallback, and updated get/delete/save helpers to support LoRA-specific layout while preserving backward compatibility
- maxedoutnodes.py: add SmartCropByMaskMXD node (square crop centered on mask), register it in NODE_CLASS_MAPPINGS and display name mappings
- wan22nodes.py: add validation and resize helpers (_validate_image_batch_4d, _resize_to_explicit_resolution), FPS resampling (_resample_video_frames_to_fps), WAN22 match-resolution node (WAN22_I2V_Match_Resolution_MXD), expose fps_mode/target_fps in video prep nodes, keep legacy "Safe Auto" behavior while simplifying UI tier options
- web/js/betterCombos.js: small UI/identifier changes (rename extension id/name to mxd, add alias for LoadLatent, disable legacy pysssss enhancements behind flag, tweak folder arrow glyphs)
- web/mxd_utils_menu.js: replace LoRA chooser with a stylistic tree-style chooser (folder grouping, toggle behavior, styles injection, callback normalization)
These changes introduce structured local LoRA metadata handling, new image/video utilities and nodes for WAN 2.2 workflows, and front-end improvements for LoRA choosing and loader UI.
Bump package version to 1.8.5 and ensure each image comparer node gets its own override class. Added NODE_OVERRIDE_CLASSES map and changed MxdImageComparer.setUp to create/cache a per-node class (by nodeData.name), assign nodeData to it, and register that bound class—preventing static nodeData from being overwritten when multiple comparer nodes are registered.
Strip stray BOM/hidden characters from multiple Python and web source files to normalize file encoding and avoid lint/parse issues. Also bump package version from 1.8.2 to 1.8.3 in pyproject.toml. No functional code changes were made.
Add video handling and prep utilities across nodes and UI.
- mediacomparers.py: add MxdVideoComparer (saves previews, shows A/B videos) and import folder_paths/os/time; register the new node and display name.
- wan22nodes.py: refactor WAN 2.2 scaling with _wan22_pick_bucket and _wan22_scale_image_core, add _select_frames_start_end, expose faster passthrough for scale(), add video prep nodes (WAN22_I2V_Video_Prep_MXD and advanced variant) that scale videos and return start/end/selected frames, improve CombineVideos_MXD audio handling to support multiple audio payload shapes and batching, and mark PreviewVideoMXD as an output node; register new nodes and display names.
- Add new node file wan_svi_first_last_mxd.py: WAN 2.2 First/Last I2V SVI node that prepares SVI conditioning (anchors, padding, masks) and returns latent samples.
- __init__.py: include wan_svi_first_last_mxd in dynamic imports so new node is discovered.
- web/js/image_comparer.js: extend UI to support video/media (playback, sizing, URL builder, mixed image/video lists) and update widget rendering logic for media types.
- pyproject.toml: bump package version to 1.8.1.
These changes add end-to-end video support (preview, compare, prep for WAN 2.2 workflows), improve robustness of audio concatenation, and introduce an SVI-first/last conditioning node for WAN pipelines.
Add integrated Lora Loader MXD support and frontend. Introduces a new loraloader_mxd package (constants, logging, power node, prompt utils, server API routes, model info utils, server helpers, general utils, and userdata migration/IO). Adds many web frontend files for the MXD UI and registers the node in the top-level __init__.py. Updates README with merge/migration notes and adds userdata/ to .gitignore. Also includes minor comment/tuning change in maxedoutnodes.py and small updates to existing web/index.js and project metadata.
Introduced DummyNodeMXD for workflow missing-node testing in maxedoutnodes.py. Added a new web addon 'zip_loader' with JSZip and loader scripts to support zip file handling in the web interface. Bumped project version to 1.6.6 in pyproject.toml.
Updated image_comparer.js to avoid saving preview image paths when serializing the workflow, ensuring that no unnecessary image data is stored. Bumped project version to 1.6.4 in pyproject.toml.
Introduces mediacomparers.py with an Image Comparer + Save MXD node, updates __init__.py to register new node mappings, and adds a frontend widget (image_comparer.js) for image comparison. Refactors and shortens DESCRIPTION strings for clarity across maxedoutnodes.py and wan22nodes.py, adds a ControlNet Preprocessor Selector node, and updates web/index.js to include the new comparer widget.
Deleted the help_popup.js module and its dependencies (marked.min.js and purify.min.js), and removed its import from index.js. This cleans up unused code and dependencies related to the help popup feature.
Simplifies and clarifies the bucket selection logic in WAN22_I2V_Image_Scaler_MXD, ensuring square images always map to fixed square buckets and improving handling for 720p, 480p, and Auto tiers. Also adds a new maxedout_icon.png asset.