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>
Real-world testing feedback (PR #9):
- Detect models loaded via UNETLoader ("Load Diffusion Model", unet_name in
the diffusion_models folder) + GGUF unet loaders, not just checkpoints;
carry the folder so AutoV2 hashing looks in the right place. Fixes
"model (?)" on Flux/SD3/Krea workflows. Mirrored in the JS Test button.
- Expand %date:FORMAT% filename tokens (frontend feature that doesn't reach a
custom node's widget) before get_save_image_path, so e.g.
"%date:yyyy-MM-dd%/Krea-Turbo" works. New comfy-free filenames module.
- Test-detection preview panel now reserves its natural height and grows the
node to fit (measured, like the Prompt Batch editor) instead of overflowing.
Advanced node sockets kept as-is per user preference. +10 unit tests (39 passed).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a README section for the two new output nodes (Basic + Advanced)
covering the A1111 parameters chunk, static tracer with Prompt Batch
index resolution, Advanced override sockets, Test-detection button,
save_workflow toggle, and AutoV2 hashing/caching. Version bumped to
1.5.0 (new minor on top of the 1.4.0 branch base).
Extends the static graph tracer to walk sampler.model backward through
LoraLoader/LoraLoaderModelOnly and pass-through nodes to the checkpoint
loader, populating TraceResult.model_name/.model_file/.loras in load order.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements Task 6 — pure module for walking ComfyUI API prompt backward from
save node to detect sampler and read scalar fields (steps, cfg, seed, etc).
Provides TraceResult dataclass and trace() function with BFS backward search
and single-sampler fallback. Leaves Tasks 7 & 8 extension marker in place.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implement to_a1111_sampler function that maps ComfyUI (sampler_name, scheduler) pairs
to A1111/Civitai sampler labels. Includes 23 known sampler mappings with fallback to
readable label generation and scheduler-specific handling.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move _parse_prompts/_select/DEFAULT_PROMPTS_JSON out of nodes/prompt_batch.py
(which imports comfy_api) into a pure nodes/prompt_batch_core.py so the parsing
logic can be unit tested and reused by the upcoming Civitai metadata tracer
without a ComfyUI install. prompt_batch.py now imports the three names;
behavior is unchanged (select_prompt keeps all three of the original _select's
fallback logger.warning calls, so logging is identical too).
Also fix pytest collection: the repo root doubles as the ComfyUI extension
package (its own __init__.py does relative imports), which made pytest wrap
the repo root in a Package collector and fail importing it. Add
--confcutdir=tests/testpaths in pyproject.toml so `pytest tests/...` (and bare
`pytest`) work without needing a ComfyUI install.
TDD, 12 bite-sized tasks: comfy-free engine (tracer, A1111 formatter,
AutoV2 hashing+cache, PNG builder), the two io.ComfyNode classes, and
the JS Test-detection mirror.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Two output nodes that write the A1111 `parameters` PNG chunk Civitai
reads, capturing the real prompt used per run (incl. the Prompt Batch
line at its run index) instead of the ComfyUI workflow. Full A1111
parity: LoRA tags + AutoV2 hashes so Civitai auto-links resources.
Basic auto-traces the graph; Advanced adds override sockets.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Explain the prompt-list JSON: array of {positive (required), negative
(optional)} entries, plus the bare-string / prompt-alias / {"prompts":[]}
convenience forms and empty-positive handling.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Only the Ideogram 4 Prompt Builder + editor derive from KJNodes; the
Style Wizard, Resolution Selector, and Prompt Batch are original
AIKnowledge2Go work. The pack stays GPL-3.0 because it bundles Kijai's
GPL-3.0 code.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a Nodes section covering the redesigned Prompt Batch node: the
positive/negative row editor, Read-from-JSON import via the json_in
socket, Add/Clear, the index output for filenames, and the
reset-index / delete-empty-prompts toggles.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- megapixel/auto now preserve the aspect ratio when clamped to the profile's per-side cap (16:9 at max -> 2048x1152, not 2048x2048); aspect is prioritized over hitting the exact target size.
- Replaced the Apply button with a read-only readout (resulting WxH + MP); edits and new connections auto-push the dims to a connected Prompt Builder canvas.
- Added a profile-aware warning shown when the request is clamped to the profile's maximum (e.g. Ideogram 4 max 2048x2048).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds AI2GoResolutionSelector: a profile-aware (Ideogram 4 = x16, 256-2048) resolution node with raw/auto/megapixel modes, INT width/height outputs for any workflow, and an Apply button that pushes dims into a connected node's width/height widgets (refreshing the Ideogram 4 Prompt Builder canvas via the same write pattern the Style Wizard uses). Dims also flow on graph execution.
Reverts the prompt builder's width/height to KJ-original (removes the embedded resolution_mode/aspect_ratio/megapixels widgets) so its node/JSON stays copy-paste compatible with the upstream KJNodes Ideogram 4 node.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Old workflows/images saved before the resolution selector (or by a build with a different widget order) could land non-numeric junk in resolution_mode/aspect_ratio/megapixels via ComfyUI's positional widgets_values restore (shown as NaN). onConfigure now restores them from a name-keyed blob when present and coerces any remaining junk to sane defaults.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>