- Rewrite README.md and README_ES.md.
- Document the shift to the "Formula 1" engine architecture with the 6 core nodes.
- Remove references to deprecated batch, sequence, and debug nodes.
- Add setup and usage instructions for the new autonomous machine.
- Delete deprecated modules: `sequence.py`, `paths.py`, `batch.py`, `debug.py`.
- Clean `image.py`, retaining only SessionImageReceiver, SessionImageSender, and auxiliary function.
- Clean `video.py`, retaining only IncrementalVideoStitcher and WanFrameValidator.
- Clean `loop.py`, retaining only SequentialLoopStart and SequentialLoopTrigger.
- Rewrite `__init__.py` mapping explicitly to the 6 core components and bump version to 1.0.0.
- Add `SequentialLoopStart` and `SequentialLoopTrigger` nodes in `loop.py`.
- Manage global loop index for memory persistence across cycles.
- Implement auto-queue HTTP POST trigger using local ComfyUI API `/prompt`.
- Add non-blocking timeout of 5s on urllib requests.
- Register new nodes in `__init__.py` under NODE_DISPLAY_NAME_MAPPINGS.
Updated `README.md` and `README_ES.md` to document the change from boolean
reset flags to using `current_loop_index` for internal session resets in
the `Incremental Auto-Stitcher` and `Session Image Receiver` nodes.
Modified `SessionImageReceiver` in `image.py` and `IncrementalVideoStitcher`
in `video.py` to accept the integer `current_loop_index` instead of external
boolean values. Automatic state clearing is now correctly performed when the
loop index equals 0. List unwrapping logic for inputs was implemented to
defend against ComfyUI `INPUT_IS_LIST = True` iteration behavior while
preserving the robust path resolution checks built in previous iterations.
- Added WanFrameValidator node in video.py to ensure 4k+1 frame logic.
- Registered WanFrameValidator in __init__.py with "WanFrameValidator": "🛡️ Wan Frame Validator".
- Updated both README.md and README_ES.md to document the Wan Frame Validator.
- Modified SessionImageReceiver and SessionImageSender in image.py to return a UI object mapping for Visual UI Debugging in ComfyUI frontend.
The custom `@register_node` decorator requires `RETURN_NAMES` to be explicitly defined as a tuple. `SessionImageSender` had `RETURN_TYPES = ()` but was missing `RETURN_NAMES = ()`, which caused an `AttributeError` upon importing the module, breaking the startup of ComfyUI. This patch adds the missing empty tuple.
- Documented the `SessionImageSender` and `SessionImageReceiver` nodes under the "Image & Latent Category" in both `README.md` and `README_ES.md`.
- Described the "Sender/Receiver" pattern functionality: transferring the final frame from one Auto Queue cycle as the first frame to the next without generating ComfyUI cyclic dependency errors.
- Both language versions maintain accurate context regarding infinite/continuous video loop generation.
- Added `SessionImageSender` to save the last frame of an image batch (using `.clone()` to safely decouple the tensor) into a global session variable.
- Added `SessionImageReceiver` to inject the stored image into the start of the next workflow execution cycle.
- Both nodes utilize `IS_CHANGED` returning `NaN` to force execution on every Auto Queue tick.
- Updated `__init__.py` to register the new nodes under the display names "📤 Session Image Sender" and "📥 Session Image Receiver".
- Ensures users can chain frame sequences across independent batch loops without creating cyclic dependencies in ComfyUI.
- Updated README.md and README_ES.md descriptions for the Incremental Auto-Stitcher node.
- Replaced mention of `video_prefix` search (globbing) with strict JSON path extraction (`reset_list` added).
- Explained the session memory behavior that clears on restart and guarantees immunity against old files in the ComfyUI output directory.
- Replaced glob search with strict JSON payload parsing of VHS_FILENAMES
- Added a `session_video_list` global variable to accumulate session-specific videos
- Added a boolean `reset_list` input to optionally clear session memory
- Validated and joined relative paths from VHS with ComfyUI's output directory
- Added `try...finally` block to guarantee automatic cleanup of the temporary FFmpeg concat list file
- Updated related prints/error messages in Spanish to match project conventions
Replaces `IncrementalVideoStitcher` with an updated version to fix issue where ComfyUI iterates over string text inputs like the `VHS_FILENAMES` trigger. Adds `INPUT_IS_LIST = True` to the node and unwraps the newly list-wrapped inputs in `stitch_incremental` to process correctly. Ensures `glob` is imported at the module level.
- Added description for "🎞️ Incremental Auto-Stitcher" node in README.md.
- Added equivalent description in Spanish for README_ES.md.
- Explains the expected input behavior and how it differs from the FFmpeg Video Stitcher.
Add IncrementalVideoStitcher to seamlessly join video chunks generated by ComfyUI during Auto Queue cycles.
The node operates efficiently by looking for intermediate chunks generated so far using the supplied video prefix and joining them without re-encoding via FFmpeg.
Registered as "🎞️ Incremental Auto-Stitcher" in the NODE_DISPLAY_NAME_MAPPINGS.
Updated both README.md and README_ES.md to include the newly implemented
FFmpegVideoStitcher node under a new "Video Category" in the Detailed Node Reference section.
Implemented the FFmpegVideoStitcher node in video.py per exact specifications,
including safe type checking and defensive list handling for VHS_FILENAMES.
The node leverages INPUT_IS_LIST = True to act as a sequential loop aggregator
and properly concatenates mp4 videos directly using FFmpeg without re-encoding.
- Created `video.py` introducing the `FFmpegVideoStitcher` node to concatenate video chunks generated via sequential batch loops.
- Registered the node into ComfyUI's standard mapping dictionaries in `__init__.py`.
- Added check for FFmpeg installation using `shutil.which` and raising a ComfyUI-friendly error if it's missing.
- Updated node output file saving logic to utilize ComfyUI's native `folder_paths.get_output_directory()`.
- Revised `README.md` and `README_ES.md` with explicit instructions on how to set up the workflow (VHS Combine integration) and provided warnings emphasizing the need for `easy cleanGpuUsed` after VAE decoders to prevent PyTorch OOM exceptions during iterative batching loops.
This commit addresses a security vulnerability where the `Interact` node
exposed an interactive Python shell (`code.interact`) by default, allowing
arbitrary code execution.
Changes:
- Modified `debug.Interact.interact` to check for `COMFYUI_SB_ENABLE_INTERACTIVE_DEBUG` environment variable.
- The REPL is now disabled by default. It only activates if the variable is set to "1", "true", or "yes".
- Added a warning message when the node is executed without the flag.
- Updated the node's docstring to include a security warning and instructions.
Verification:
- Verified that `code.interact` is not called by default.
- Verified that `code.interact` is called when the environment variable is set.
- Confirmed `import os` exists in `debug.py`.
Modified `Permutations.go` to return an `itertools.permutations` iterator instead of materializing a list. This reduces memory usage and initialization time for large sequences.
Measured improvement:
- Time to generate and process 3.6M items: 38s -> 12.6s (3x speedup)
- Eliminated intermediate list allocation (~445MB for 3.6M items)
Refactored ModelFinder.go to scan directories once and build an in-memory index of filenames. This avoids repetitive I/O operations for each input filename.
- Implemented pre-scanning of search paths.
- Added filename-based index for O(1) lookup of non-wildcard queries.
- Retained wildcard support via linear scan of cached paths.
- Improved performance significantly (benchmark indicates ~16x speedup).
Modified `Permutations.go` to return an `itertools.permutations` iterator instead of materializing a list. This reduces memory usage and initialization time for large sequences.
Measured improvement:
- Time to generate and process 3.6M items: 38s -> 12.6s (3x speedup)
- Eliminated intermediate list allocation (~445MB for 3.6M items)
- Implemented a text-based table formatter for batches.
- Updated Load CSV node to show a table preview in the workflow.
- Added a new Preview Batch node for visualizing any batch data.
- Added a JavaScript extension to handle node visualization.
- Updated English and Spanish documentation.
- Renamed all 'Job' terminology to 'Batch' across the codebase.
- Renamed job.py to batch.py.
- Added LoadCSV node to support loading batch parameters from CSV files.
- Maintained backward compatibility for existing workflows using legacy names.
- Updated README.md and README_ES.md with new version and documentation.
- Fixed a potential index-out-of-bounds bug in GetBatchStep clamping logic.