Commit Graph
70 Commits
Author SHA1 Message Date
Meisoft bdd650ff69 Merge pull request #29 from Meisoftcoltd/fix-vhs-video-loader-kwargs-9842839560735093901
fix(video): handle kwargs strictly in LoadVideoWithSourceAudio to prevent VHS queue crash
2026-03-28 17:26:18 +01:00
Meisoftcoltd 9711831bb5 Fix ComfyUI queue crash in LoadVideoWithSourceAudio node
- Ensure `IS_CHANGED` and `VALIDATE_INPUTS` are fully utilizing `@classmethod` logic.
- Filter `**kwargs` before passing them to the native `VHS_LoadVideo` instance to prevent "unexpected keyword argument" crashes.
- Update internal Spanish comments to align with user requested format.
2026-03-28 16:25:47 +00:00
Meisoft 5e412b9a37 Merge pull request #28 from Meisoftcoltd/replace-vhs-validator-with-native-logic-4322568155129062363
Update LoadVideoWithSourceAudio validation and cache checking
2026-03-28 16:43:35 +01:00
Meisoftcoltd d7c671aff8 Replace VHS validation in LoadVideoWithSourceAudio with native file checking
- Removed dependency on VHS_LoadVideo cache and validation methods
- Replaced IS_CHANGED to check modification time instead of slow SHA256
- Replaced VALIDATE_INPUTS to check file existence directly and absorb kwargs
- These changes improve the node's independence and speed for large files
2026-03-28 15:43:06 +00:00
Meisoft 8b60e818fa Merge pull request #27 from Meisoftcoltd/fix-video-nodes-10941441744767870842
Arreglar nodos LoadVideoWithSourceAudio e IncrementalVideoStitcher
2026-03-28 16:09:20 +01:00
Meisoftcoltd 2f4a329478 Actualizar READMEs y restablecer tests
- Se actualizaron las descripciones en README.md y README_EN.md para reflejar las nuevas capacidades de LoadVideoWithSourceAudio (widget UI intacto, upload directo) y el Stitcher (INPUT_IS_LIST=False, passthrough directo de audio al último frame).
- Se restauraron los scripts de testing en `tests/` que se habían eliminado accidentalmente.
2026-03-28 15:08:50 +00:00
Meisoftcoltd 91a80b1169 Fix y mejoras en nodos de video para el manejo de UI, subida y batching
- Se reimplementó `LoadVideoWithSourceAudio` para envolver adecuadamente `VHS_LoadVideo`, añadiendo la directiva de UI "video_upload", y métodos para la verificación de cambios (IS_CHANGED, VALIDATE_INPUTS) mientras se conserva el widget de UI.
- Se ha expuesto explícitamente `INPUT_IS_LIST = False` en `IncrementalVideoStitcher` para forzar el tratamiento de imágenes como tensores puros.
- El passthrough de audio en `IncrementalVideoStitcher` ya funciona correctamente de forma predeterminada sin cambios adicionales.
- Se agregó el nuevo alias de nodo en `__init__.py` para su registro en ComfyUI.
2026-03-28 15:01:44 +00:00
Meisoft d6e1b997b8 Merge pull request #26 from Meisoftcoltd/refactor-incremental-stitcher-and-add-source-audio-loader-17321561639295743240
Refactor IncrementalVideoStitcher and Add LoadVideoWithSourceAudio
2026-03-28 15:37:49 +01:00
Meisoftcoltd def18e6390 Update README documentation for new video capabilities
Changes:
- Documented zero-OOM tensor handling and audio passthrough for IncrementalVideoStitcher in README.md and README_EN.md.
- Added documentation for the new LoadVideoWithSourceAudio node explaining dynamic VHS integration and uncropped audio extraction.
2026-03-28 14:34:05 +00:00
Meisoftcoltd 10bf229175 Refactor IncrementalVideoStitcher to handle raw image tensors and add LoadVideoWithSourceAudio node.
Changes:
- Modified IncrementalVideoStitcher to process IMAGE tensors directly instead of MP4 lists.
- Implemented RAM/VRAM saving mechanism by saving tensor state dynamically to `.pt` files and cleaning them manually via `gc`.
- Introduced LoadVideoWithSourceAudio mapping to extract complete original tracks dynamically.
2026-03-28 14:26:11 +00:00
Meisoft 18eb230109 Merge pull request #25 from Meisoftcoltd/feat/input-validations-16278556174992080220
feat: Add explicit input validations and Spanish error messages to key nodes
2026-03-23 21:57:43 +01:00
Meisoftcoltd e87cad300c feat: add explicit input validations to key nodes
- `loop.py`: Added check for `trigger_dependency` in `SequentialLoopTrigger.trigger_next`.
- `image.py`: Added checks for `generated_images` and `current_loop_index` in `SessionImageSender.set_image`.
- `video.py`: Added list-aware checks for `trigger` and `current_loop_index` in `IncrementalVideoStitcher.stitch_incremental` due to `INPUT_IS_LIST = True`.

All validations throw a `ValueError` with clear Spanish instructions when inputs are missing to provide immediate user feedback on the ComfyUI canvas.
2026-03-23 20:49:22 +00:00
Meisoft 64596500b0 Merge pull request #24 from Meisoftcoltd/fix/loop-reverse-cache-16882262106205794182
Fix Reverse Cache & Add Progressive Video/Image Storage
2026-03-23 21:13:11 +01:00
Meisoftcoltd bfe40b1b65 Update README documentation to v1.1.0 and add new features
Updated README.md and README_EN.md to version 1.1.0. Documented the new
Anti-Cache Injection mechanism in the Loop Trigger, progressive keyframe
and MP4 saving features, and audio multiplexing using torchaudio and
FFmpeg. Also updated the setup instructions with the new wiring requirements.
2026-03-23 20:09:36 +00:00
Meisoftcoltd 08d7d2747d Add support for optional audio multiplexing
Updated video.py to accept an optional 'AUDIO' input in IncrementalVideoStitcher.
Uses torchaudio to save the waveform temporarily, and then applies ffmpeg with
the '-shortest' flag to seamlessly multiplex it with the concatenated mp4 segments.
2026-03-23 20:03:40 +00:00
Meisoftcoltd 9939314b2f Fix loop reverse cache with payload mutation and add debug logic
Replaced loop.py and image.py, and updated video.py to fix the 'reverse cache'
issue by injecting the new index directly into the ComfyUI API JSON payload.
Added large debug banners in Spanish, PNG keyframe extraction, and progressive MP4 saving.
2026-03-23 19:55:57 +00:00
Meisoft 3d5ec1646d Merge pull request #23 from Meisoftcoltd/feature/cache-breaking-seed-mutator-8604892349368461134
Add Seed Mutator to Loop Trigger
2026-03-23 18:36:51 +01:00
Meisoftcoltd e68d9026d1 Update READMEs to set Spanish as primary language
- Replaced README.md with the Spanish translation.
- Renamed the old English README to README_EN.md.
- Added cross-links between the two versions.
- Updated documentation to include the new Seed Mutator feature for v1.0.1.
2026-03-23 17:35:24 +00:00
Meisoftcoltd 4d18b4e69d Implement Seed Mutator in SequentialLoopTrigger to break ComfyUI cache
- Replaced existing SequentialLoopTrigger logic.
- Added dictionary scanning to intercept the queue POST JSON payload.
- Injects a new 32-bit random integer (`0xffffffff` max) into any node possessing `seed` or `noise_seed` in its inputs.
- Preserves the sequential auto-queue logic but now guarantees the sampler processes a new generation instead of instantly returning cached results in subsequent loops.
2026-03-23 17:24:12 +00:00
Meisoft 209b4c3bea Merge pull request #22 from Meisoftcoltd/fix/cache-invalidation-time-2776254223784323803
Fix IS_CHANGED cache breaking with time.time()
2026-03-23 17:09:07 +01:00
Meisoftcoltd 29915698e5 Fix: Update cache breaking logic in IS_CHANGED from NaN to time.time()
This resolves aggressive caching bugs in newer ComfyUI versions.
Replaced float("NaN") with time.time() in image.py and loop.py
to ensure stateful memory/trigger nodes consistently fire.
2026-03-22 22:17:23 +00:00
Meisoft 3c72a7ab31 Merge pull request #21 from Meisoftcoltd/fix-ram-session-nodes-2451402040826957469
Refactor SessionImageSender and SessionImageReceiver to use persistent System RAM
2026-03-22 22:20:53 +01:00
Meisoftcoltd 23135bfaa7 Refactor SessionImageSender/Receiver to use CPU RAM
Replaced the entirety of image.py with a simplified and corrected implementation. The previous cyclic dependency concept was abandoned due to ComfyUI's DAG constraints. Instead, the global RAM approach is used, heavily augmented with `.clone().cpu()` during storage to protect the tensor from ComfyUI's VRAM garbage collector destroying it between Auto Queue cycles. Extraneous technical debt within the file was completely removed.
2026-03-22 21:18:49 +00:00
Meisoft ff94c32d63 Merge pull request #20 from Meisoftcoltd/feature/recursive-self-queue-1733009829692853919
feat: recursive self-queuing system for sequential execution
2026-03-22 20:40:06 +01:00
Meisoftcoltd 1a28034baf docs: update readme files to reflect v1.0.0 recursive self-queuing architecture
- 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.
2026-03-22 19:37:11 +00:00
Meisoftcoltd 73581ac582 refactor: clean up repository to v1.0.0 and implement recursive self-queuing architecture
- 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.
2026-03-22 19:25:11 +00:00
Meisoftcoltd 6da4275975 feat: implement recursive self-queuing nodes for autonomous execution
- 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.
2026-03-22 19:12:43 +00:00
Meisoft cb6541a306 Merge pull request #19 from Meisoftcoltd/fix/simplify-loop-index-reset-9730679421414511812
Simplify flow by using current_loop_index for internal state reset
2026-03-22 18:57:26 +01:00
Meisoftcoltd 9a2b4beebc Update documentation for current_loop_index reset logic
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.
2026-03-22 17:56:24 +00:00
Meisoftcoltd 12f46287a9 Simplify flow by using current_loop_index for internal state reset
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.
2026-03-22 17:51:31 +00:00
Meisoft 5254d9c241 Merge pull request #18 from Meisoftcoltd/add-wan-validator-13605443588029445601
Add Wan Frame Validator and Visual UI Debugging
2026-03-22 17:35:29 +01:00
Meisoftcoltd e4e92e4f08 Add Wan Frame Validator and Visual UI Debugging to Image Nodes
- 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.
2026-03-22 16:33:49 +00:00
Meisoft 13b2cde008 Merge pull request #17 from Meisoftcoltd/fix-return-names-in-session-image-sender-2688597451786092335
Fix missing RETURN_NAMES attribute on SessionImageSender node
2026-03-22 13:55:25 +01:00
Meisoftcoltd 0156a1b313 fix: add missing RETURN_NAMES to SessionImageSender
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.
2026-03-22 12:54:00 +00:00
Meisoft 55de36b2f0 Merge pull request #16 from Meisoftcoltd/fix-incremental-video-stitcher-12677637160509818319
Update IncrementalVideoStitcher with session memory and strict path extraction
2026-03-22 13:39:04 +01:00
Meisoftcoltd 20eeaf00dc Update READMEs with SessionImageSender/Receiver docs
- 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.
2026-03-22 12:37:21 +00:00
Meisoftcoltd fc24328c95 Add SessionImageSender and SessionImageReceiver nodes
- 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.
2026-03-22 12:33:59 +00:00
Meisoftcoltd bcaa17981b Update documentation for Incremental Auto-Stitcher
- 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.
2026-03-22 12:14:05 +00:00
Meisoftcoltd 143784fd48 Update IncrementalVideoStitcher to use strict JSON parsing and session memory
- 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
2026-03-22 12:08:48 +00:00
Meisoft d9bb1dd2c1 Merge pull request #15 from Meisoftcoltd/fix-incremental-video-stitcher-11651493821724131751
Fix IncrementalVideoStitcher inputs in video.py
2026-03-22 01:15:19 +01:00
Meisoftcoltd f9100f0727 fix: restore INPUT_IS_LIST and update IncrementalVideoStitcher in video.py
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.
2026-03-22 00:09:50 +00:00
Meisoft 6bd37b9671 Merge pull request #14 from Meisoftcoltd/feature/incremental-video-stitcher-1024656265801320493
Add IncrementalVideoStitcher for automated intermediate stitching
2026-03-21 23:32:41 +01:00
Meisoftcoltd c0b1fcbea9 docs(video): update READMEs with IncrementalVideoStitcher details
- 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.
2026-03-21 22:32:15 +00:00
Meisoftcoltd 5171199a61 feat(video): add IncrementalVideoStitcher node
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.
2026-03-21 22:30:50 +00:00
Meisoft ab99598940 Merge pull request #13 from Meisoftcoltd/implement-ffmpeg-stitcher-16344698670511801985
Implement FFmpegVideoStitcher Node
2026-03-21 18:01:46 +01:00
Meisoftcoltd 8351c21219 docs: update READMEs with FFmpegVideoStitcher details
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.
2026-03-21 17:01:30 +00:00
Meisoftcoltd 1a29a6974f feat: implement FFmpegVideoStitcher node
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.
2026-03-21 16:59:14 +00:00
Meisoft 3f9abf4310 Merge pull request #12 from Meisoftcoltd/ffmpeg-video-stitcher-3348528563198334568
feat: Add FFmpeg Video Stitcher for Sequential Batcher
2026-03-21 15:34:37 +01:00
Meisoftcoltd 0773b958cb Add FFmpeg Video Stitcher node and update documentation
- 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.
2026-03-21 14:30:16 +00:00
Meisoft 6c401d7f51 Merge pull request #11 from Meisoftcoltd/perf/optimize-image-slicing-13128165043232194995
⚡ Optimize ImageBatchToList slicing performance
2026-02-06 14:32:50 +01:00