Wires the existing add_random_seeds_to_gens parameter (already in
generation_orchestrator.py:824) through the full Run Settings pipeline:
1. Builder UI: state default + _addRunSetting widget (int, 0-100, default 0)
2. config_builder_node.py: emits into session_settings in configs_json
3. sampler_node.py: reads from session_settings, overrides the local variable
The generation loop already handles it — generates N extra images per config
with random seeds when > 0. Previously hardcoded to 0 with no UI path.
Based on PR #21 by external contributor, rebased onto current main with
full pipeline wiring.
Tests: 118/118 pass.
Both symbols were deleted from remote_vae.py in commit 1f77100 (B4) when the
Remote VAE feature was extracted to the ComfyUI-USCG-RemoteVAE companion
plugin. They were never used in sampler_node.py beyond the import line.
Discovered by B10's scanner grep — tests passed only because conftest stubs
the remote_vae module in sys.modules, masking the broken production import.
User feedback: 1 is a more sensible default for typical generation —
smaller VAE batches keep VRAM lower, and flushing every gen makes the
dashboard show progress immediately.
Updated everywhere:
- sampler_node run_tests fallback defaults (post-widget-removal)
- conf-builder-main.js initial state + migration backfill
- conf-builder-config-management.js renderRunSettingsSection
state-init defaults + _addRunSetting defaultValue
- config_builder_node.py state_to_configs_json emit fallback +
except-clause fallback for both fields
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Removes 15 widgets from the SamplerGridTester INPUT_TYPES. The Builder
UI is now the single source for run-level settings via _session_settings
in configs_json. Optional inputs (6 inputs) and the hidden unique_id are
kept; everything else is replaced by hardcoded defaults at the top of
run_tests.
Removed widgets:
- ckpt_name, positive_text, negative_text, seed, denoise
- vae_batch_size, resolutions_json, session_name
- overwrite_existing, flush_batch_every, add_random_seeds_to_gens
- lora_triggerwords_mode, remote_vae_endpoint
- save_conditioning_cache_to_file, enable_model_cache
Defaults set internally (overridden by _session_settings when present):
- ckpt_name: first available checkpoint (fallback so standalone use with
"model": "Default" does not crash the orchestrator with None)
- positive_text="", negative_text="", seed=0, denoise="1.0"
- vae_batch_size=4, resolutions_json='[[1024, 1024]]', session_name="my_session"
- overwrite_existing=False, flush_batch_every=4, add_random_seeds_to_gens=0
- lora_triggerwords_mode="None", remote_vae_endpoint="None"
- save_conditioning_cache_to_file=False, enable_model_cache=False
Existing workflows: ComfyUI silently drops widget values for removed
INPUT_TYPES keys. Workflows that ran on prior versions will use the new
internal defaults; users who customized those widgets need to set the
same values in the Builder UI Run Settings instead (the previous commit
made all Builder UI run-settings authoritative so they always override).
UX: the Generator node is now a near-empty box with one required input
(configs_json) and 6 optional sockets. The user-facing controls all
live in the Builder UI. This simplifies the graph and removes a
recurring source of confusion (widgets that were silently overridden).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Three issues in 7a2c3c9:
1. start_at_job's onchange handler used setDirtyCanvas() instead of
saveState() — changes never reached the lora_config widget value.
Fixed to call saveState().
2. The 6 run-settings emissions were gated on "non-default" values
(e.g. lora_triggerwords_mode only emitted when != "None"). Result:
a user setting Builder UI to its default could not override the
Generator widget if the user had previously set that widget to
something non-default. Builder UI is now authoritative — emit all
values unconditionally. start_at_job and image_format also
switched to unconditional emission for consistency.
3. session_name had no plumbing path. Added emission in
state_to_configs_json and an override branch in sampler_node so
the Builder UI's session_name field overrides the generator widget.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Phase 1 of consolidating run-level config into the Builder UI. The
Builder UI's "Run Settings" section is now rendered at the TOP of the UI
(was previously below config arrays) and gains six new fields with help
tooltips:
- overwrite_existing (bool, default false)
- flush_batch_every (int, default 4)
- lora_triggerwords_mode (enum: None / Append To End / Append To Start /
Read From Config, default None)
- save_conditioning_cache_to_file (bool, default false)
- enable_model_cache (bool, default false)
- vae_batch_size (int, default 4, range -1..64)
State plumbs through state_to_configs_json -> _session_settings ->
sampler_node.run_tests -> run_generation_loop. Builder UI values
override the corresponding widgets on UltimateSamplerGrid when set
(non-default). Widget values remain the fallback so existing workflows
keep working without changes.
Logs an "⚙️ <name> overridden by Builder UI: <value>" line whenever an
override fires, so it's obvious in the console.
Next: once the user has tested this thoroughly, the corresponding
widgets on the SamplerGridTester node can be removed/hidden to
simplify the generator UX (deferred — coordinate with user).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Seed: expanded per-gen behavior + new full run seed behavior (random/increment/decrement before/after entire run)
- Canvas: fix flicker during simultaneous pan+zoom via requestAnimationFrame batching
- Upscaling: 3 session-level modes (HiRes fix, model upscale, model+HiRes) with tiled VAE support
- Cooldown: configurable GPU breaks between generations with optional VRAM clearing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
config_builder_node.py always wraps configs in {"configs": [...]},
but sampler_node.py only unwrapped the array when _distribution key
was present. Without distribution, the wrapped dict passed through
to expand_configs which iterated over dict keys (strings) instead
of config dicts, causing AttributeError on .get().
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Distribution Settings section:
- Always visible at top with On/Off toggle
- Settings collapse when toggled off, expand when on
- No longer conditionally rendered
Distribution config output/input removal (clean break):
- Config Builder: RETURN_TYPES reduced from 3 to 2 outputs
- distribution_config embedded in configs_json as _distribution key
- Output format: {"configs": [...], "_distribution": {...}}
- Sampler node: Removed distribution_config optional input
- Sampler extracts _distribution from configs_json automatically
- Backward compatible: plain array configs_json still works
- JSON Preview shows full output including _distribution when enabled
- Session loader handles both old array and new object formats
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>