Commit Graph
137 Commits
Author SHA1 Message Date
ChrisandClaude Opus 5 322f070539 chore: keep version at 1.6.1 (bump deferred to release)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 13:42:05 +02:00
Chris 29eae8df76 fix: tolerate undecodable audio tracks, skip decode when already at the forced rate 2026-08-14 19:15:53 +02:00
ChrisandClaude Opus 5 f1a2e77e46 feat: front-end support for the Multi Video Loader pair
Extends the shared web/js/multi_loader.js to a third kind ("video") for
AI2GoMultiVideoLoader / AI2GoMultiVideoLoaderAdvanced: NODES map entries,
video/* MIME acceptance, drop-zone wording, a video-row preview (mm:ss +
WxH probed via a hidden <video>), and a serializeValue guard on force_rate
mirroring the existing max_size guard so a '' value can't fail validation.
README and the design spec's amendments section are extended to match.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 19:03:58 +02:00
Chris 82c1eb37a8 feat: Multi Video Loader (simple + Advanced) nodes
Follows the pack's simple/Advanced batch-loader pattern (multi_image_loader,
multi_audio_loader): drop up to 8 video files onto the node, each gets its
own video_N/audio_N output (plus filename_N on Advanced). video_N is a lazy
VideoFromFile by default (decodes nothing); force_rate > 0 decodes and
retimes frames via resample_frame_indices while keeping real duration.
audio_N is decoded independently with PyAV so it stays available on the
cheap path, and is None (not an error) for clips with no audio track.
Disabled rows hold their socket position, matching the other loaders.

Registered in __init__.py; integration tests follow
tests/test_multi_audio_loader.py's shape (skipped outside a ComfyUI env).
2026-08-14 18:59:23 +02:00
Chris 768e9ce011 feat: force-rate frame resampling core (resample_frame_indices)
Adds a comfy-free helper that retimes a source frame sequence to a
target fps while preserving real duration (VideoHelperSuite-style
force_rate) — 0 means off, dropping/duplicating frames otherwise.
Needed by the upcoming Multi Video Loader nodes.
2026-08-14 18:59:14 +02:00
ChrisandClaude Fable 5 90af13f7a0 test: guard the all-rows-disabled case (count 0, all slots None, no raise)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 15:39:41 +02:00
Chris 19602fef52 feat: per-row on/off toggles with Toggle All; disabled rows hold their socket and output nothing 2026-08-14 15:31:12 +02:00
ChrisandClaude Fable 5 105574def5 fix: singular grammar in slot note ("has"/"it", not "haves"/"them")
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 14:35:57 +02:00
ChrisandClaude Fable 5 a2cdb1ddf2 polish: natural single-item wording in slot note; document under-pinned slots in README
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 14:34:37 +02:00
ChrisandClaude Fable 5 87cd054f93 feat: pinnable output_slots + drop zone doubles as file picker
Multi Loader nodes previously sized their output sockets to the loaded
file count, so deleting one file shrank the sockets and destroyed any
wire on a later socket. Add an output_slots combo (auto/1-8, front-end
only — Python already returns a fully padded output list) so a fixed
socket count can be pinned and wires survive file-list edits; the
status line now flags file/socket-count mismatches.

Also drop the separate + Add button: the drop zone itself is now
clickable and opens the same file picker, so there is one field for
both drag-and-drop and click-to-browse.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 14:29:34 +02:00
ChrisandClaude Fable 5 a5b21c8294 refactor: rename Batch loaders to Multi loaders, plain-word downscale modes
Batch already means one-item-per-queued-run in this pack (AI2GoPromptBatch);
these loaders emit everything in a single run, so Batch was misleading.
Renamed the four loader nodes/files/classes to Multi (AI2GoMultiImageLoader,
AI2GoMultiImageLoaderAdvanced, AI2GoMultiAudioLoader, AI2GoMultiAudioLoaderAdvanced),
and reworded DOWNSCALE_MODES from fit/crop/stretch to the plain-word
"keep aspect ratio"/"crop to square"/"stretch to square" (behavior unchanged).
Nothing published yet, so no back-compat aliases were added.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 10:42:25 +02:00
Chris 29ed6e531f fix: node auto-sizing - measure inner content element, not pinned widget root 2026-08-14 10:36:30 +02:00
ChrisandClaude Fable 5 46ed6294b0 fix: final-review findings - upload race past cap, delete/restore warnings, MIME filter, error positions
Six findings from the whole-branch review, fixed together:
1. addFiles() re-checks the row count before each push inside the upload loop, closing a
   race where two overlapping drops could push a node past MAX_FILES.
2. removeAt() now warns whenever a wired socket is disturbed, including when the removed
   row was the last one (previously required a promoted row too).
3. onConfigure no longer overwrites a files_json that failed to parse with "[]"; it shows
   the parse error in the status line and leaves the original widget value in place.
4. parseFiles' mirror comment documents both of its intentional deviations from Python's
   parse_files (empty input OK, entries beyond MAX_FILES ignored rather than rejected).
5. The image/audio MIME filter (and file-picker accept attr) now allows empty-MIME files
   and, for audio, video/* containers like .ogg that the backend decodes fine.
6. Missing-file and decode errors in the image/audio loaders now include the file's
   1-based position alongside its name.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 09:25:06 +02:00
Chris 56f8592382 fix: README downscaling behavior - stretch mode can enlarge shorter side 2026-08-14 00:38:18 +02:00
Chris 806d8c1f0a docs: README section for batch loaders; bump to 1.7.0 2026-08-14 00:35:16 +02:00
Chris 1907c230d6 feat: batch loader rows UI - previews, delete warning, reorder, sort 2026-08-14 00:29:43 +02:00
Chris 18fcbba141 feat: batch loader drop zone 2026-08-14 00:25:56 +02:00
Little-God1983 c3bedddf0a Merge pull request #11 from Little-God1983/batch-loaders
Batch loaders
2026-08-13 22:43:50 +02:00
Chris 3cb8adc074 fix: upload-failure status no longer clobbered by false-success message 2026-08-12 21:53:42 +02:00
Chris c2726481e9 feat: batch loader front-end skeleton - socket trim/grow + minimal upload 2026-08-12 21:47:24 +02:00
Chris 330576e50e feat: register batch loader nodes 2026-08-12 21:44:54 +02:00
Chris 4f010abcfb fix: wrap all audio decode exceptions with filename; add tensor dtype/shape assertions 2026-08-12 21:41:17 +02:00
Chris 2d646d14d2 feat: batch audio loader nodes (simple + advanced) 2026-08-12 21:32:38 +02:00
Chris a3aa3cf221 feat: batch image loader nodes (simple + advanced) 2026-08-12 21:24:42 +02:00
Chris 7b0b3caa88 feat: batch loader core - shift-on-delete list op 2026-08-12 21:21:33 +02:00
Chris 9632f54b23 feat: batch loader core - fit/crop/stretch downscale geometry 2026-08-12 21:17:30 +02:00
Chris fd2e81b039 feat: batch loader core - files_json parsing 2026-08-12 21:13:43 +02:00
ChrisandClaude Opus 5 d157121b52 docs: implementation plan for batch loaders; spec amendment (no sample rate in audio rows)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 19:33:36 +02:00
ChrisandClaude Opus 5 f79032c214 docs: design spec for batch image/audio loader node pairs
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 18:58:17 +02:00
ChrisandClaude Fable 5 eb8fc649e0 docs: draft design notes for XY parameter sweep (brainstorm snapshot)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 16:20:50 +02:00
Chris 23769a02fa bugfix - clear button 2026-07-16 22:21:39 +02:00
Chris 7f2934ab82 new version push 2026-07-16 15:35:06 +02:00
Chris a5c0e9aa22 bugfix-ideogram-prompt-profile 2026-07-15 23:41:04 +02:00
Chris 65f146bd45 fix: append new inputs for old-workflow compat; add MP/portrait tests; harden JS parseAR; README range 2026-07-15 21:09:31 +02:00
Chris 685fbcb57b docs: add Resolution Selector section to README 2026-07-15 20:54:34 +02:00
Chris 7525542759 feat: flip button, snap-multiple visibility, orientation readout in resolution selector JS 2026-07-15 20:49:25 +02:00
Chris 6f4e378f4a feat: add snap_multiple + orientation inputs, default profile, named ratios to resolution node 2026-07-15 20:45:15 +02:00
Chris 8087d933ce feat: comfy-free resolution core (default profile, snap multiple, orientation, named ratios) 2026-07-15 20:40:35 +02:00
ChrisandClaude Opus 4.8 3f790993e1 docs: implementation plan for resolution selector default profile, named ratios & flip
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 20:31:16 +02:00
ChrisandClaude Opus 4.8 746b8cc1e0 docs: clarify aspect-ratio label/value mapping + backward-compat remap in spec
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 20:23:28 +02:00
ChrisandClaude Opus 4.8 801503a921 docs: design spec for resolution selector default profile, named ratios & flip
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 20:19:27 +02:00
Chris dbd189699c another change 2026-07-14 13:28:14 +02:00
Chris 43eaceb172 again chainges 2026-07-14 13:12:46 +02:00
Chris 7bc121055d still working on that markdown 2026-07-14 13:10:10 +02:00
Chris c41ae3f910 update the md again 2026-07-14 13:07:17 +02:00
Chris 67b35d28d4 updated readme again 2026-07-14 13:00:01 +02:00
Chris 9165fb72f1 updated readme 2026-07-14 12:58:42 +02:00
Chris 01d0bbc154 bump version pack 2026-07-14 11:23:51 +02:00
Little-God1983 050db4c7da Merge pull request #10 from Little-God1983/feature/lora-loader-detection
feat: detect rgthree Power Lora Loader + Lora Loader Stack
2026-07-12 20:16:14 +02:00
ChrisandClaude Opus 4.8 e23137d1f9 feat: detect rgthree Power Lora Loader + Lora Loader Stack
The Save Metadata (Civitai) graph trace only recognized ComfyUI's stock
LoraLoader/LoraLoaderModelOnly, so LoRAs loaded via rgthree's multi-LoRA
nodes were silently missing from the written metadata and the preview.

- tracer.py: harvest LoRAs from "Power Lora Loader (rgthree)" (lora_N dicts)
  and "Lora Loader Stack (rgthree)" (flat lora_0N/strength_0N pairs), several
  per node, in load order. Skip disabled, empty ("None") and zero-strength
  slots to match what actually loads. Stock loaders still work.
- save_civitai_metadata.js: mirror the same detection in the live-graph
  Test-detection preview (kept in sync with the Python tracer).
- Preview warning now distinguishes positive/negative (may be resolved at run
  time by the AI2Go Prompt Batch node) from genuinely-unresolved fields.
- Tests for both rgthree loaders (multiple loras, ordering, skipped slots).
- README: document the supported LoRA loaders.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 20:07:08 +02:00