Skip to content

v2.4.0 — 20 utility nodes: dataset prep, media I/O, video/image/data toolkits - #78

Merged
gokayfem merged 1 commit into
mainfrom
utility-nodes
Jul 2, 2026
Merged

v2.4.0 — 20 utility nodes: dataset prep, media I/O, video/image/data toolkits#78
gokayfem merged 1 commit into
mainfrom
utility-nodes

Conversation

@gokayfem

@gokayfem gokayfem commented Jul 2, 2026

Copy link
Copy Markdown
Owner

Summary

Twenty nodes under FAL/Utils covering everything between a user's assets and a fal endpoint — dataset prep, media loading, and output post-processing — so fal workflows need no third-party utility packs.

Dataset (FAL/Utils/Dataset)

The full LoRA pipeline in three nodes: Load Image Folder → Batch Caption Images (parallel VLM) → Images → Training ZIP URL → any trainer. Plus Folder→ZIP and Video→Frame-Dataset ZIP. The trainer's internal zip helper is refactored onto the same shared ArchiveUtils.

Load (FAL/Utils/Load)

Load Image from URL (comma-separated batching), Load Audio from URL, Load Image Folder (patterns, sorting, caps), Upload Folder as ZIP URL.

Video (FAL/Utils/Video)

Extract Frames (efficient last-frame seek — chain into any image-to-video model for endless extension), Trim (keyframe remux, no re-encode), Concat (auto resolution/fps normalization), Mux Audio + Video (marry TTS/music output to generated video), Video → Audio. Verified against real encoded fixtures (durations, resolutions, FFT-checked audio round trips).

Image + Data (FAL/Utils/Image, FAL/Utils/Data)

Labeled Image Grid, Resize to fal Presets (cover/contain/stretch), Image ↔ Base64, JSON Extract (dot/bracket path queries over any result_json output), Prompt Lines cycler, Text Template.

Review (adversarial pass, findings fixed)

  • Folder→CDN uploads now log file count + total bytes and enforce configurable [archive] caps (max_files, max_total_mb) — no more silent bulk reads
  • Batch captioning re-raises ComfyUI Cancel from worker threads instead of recording empty captions
  • Malformed JSON paths return the default instead of failing the graph; string "false" → boolean False
  • Cold-start balance checks collapse to one API call under parallel workers

Test plan

  • 100 tests pass (9 new: zip contents/captions, JSON path matrix, preset resize dims, base64 round trip, real-video frame extraction, tooltip coverage on all 20 nodes)
  • Full pack loads: 1,511 nodes; ruff clean; av added to deps with lazy imports (pack loads without it)
  • Live smoke: folder→caption→zip→train pipeline, extract-last-frame→i2v chain, mux TTS onto a generated clip

⚠️ Merging bumps pyproject.toml to 2.4.0 → auto-publishes to the Comfy Registry.

…/data toolkits)

Everything between local assets and fal endpoints, under FAL/Utils:

- Dataset: Images → Training ZIP URL (LoRA caption layout), Folder → ZIP
  URL, Video → Frame Dataset ZIP URL, Batch Caption Images (parallel VLM,
  wires straight into the trainers). trainer_node's zip helper refactored
  onto shared ArchiveUtils.
- Load: Load Image from URL (multi-URL batching), Load Audio from URL,
  Load Image Folder, Upload Folder as ZIP URL.
- Video (PyAV/cv2, verified against real encoded fixtures): Extract
  Frames (efficient last-frame seek for image-to-video chaining), Trim
  (keyframe remux, no re-encode), Concat (normalizes resolution/fps),
  Mux Audio + Video, Video → Audio.
- Image: Image Grid with Labels, Resize to fal Preset
  (cover/contain/stretch), Image ↔ Base64.
- Data: JSON Extract (dot/bracket paths over result_json outputs),
  Prompt Lines cycler, Text Template.

av added to dependencies (lazy imports keep the pack loading without it).

Review fixes: folder zips log file count/bytes and enforce configurable
[archive] caps before uploading to the CDN; batch captioning re-raises
ComfyUI cancellation instead of recording empty captions; malformed JSON
paths return the default instead of raising; string "false" parses as
boolean False; cold-start balance checks collapse to a single API call.

9 new tests (100 total).
@gokayfem
gokayfem merged commit ca4251e into main Jul 2, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant