Commit Graph
217 Commits
Author SHA1 Message Date
Jason HokuandClaude Opus 4.6 6041fa9919 feat: show LoRA model/clip strength in label overlays
Labels now display strength values (e.g. "loraName:1.0:0.8") instead
of just the filename, matching the config_json format.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:00:29 -07:00
Jason Hoku cbac033c38 Refactor Requests To Make Comfy's Security Review Team's Job Easier :) - Also Fixed Diffusers Incompat Version Full App Failure 2026-03-15 12:00:43 -07:00
Jason HokuandClaude Opus 4.6 d5fd56541b fix: lazy-import torch/safetensors in network gateway, update stale comments
Move torch and safetensors imports inside huggingface_vae_decode() so
CivitAI and Distribution functions still work if those packages are
missing. Update stale "Uses urllib" comments to reference the gateway.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:27:20 -07:00
Jason HokuandClaude Opus 4.6 7dcb4068a6 refactor: migrate distribution_routes.py to network gateway
test_worker_connection, notify_workers_to_start, and stop_all_workers
now use gateway functions. No more inline urllib imports.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:21:37 -07:00
Jason HokuandClaude Opus 4.6 3da8a07f80 refactor: migrate distribution_worker.py to network gateway
All 6 urllib call patterns (download, register, claim, submit,
heartbeat, fail) now use gateway functions from network_utils.py.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:20:34 -07:00
Jason HokuandClaude Opus 4.6 9f7d9ae6c5 feat: add Distribution LAN section to network gateway
GET, POST JSON, POST multipart, and streaming download functions for
LAN-only worker coordination between ComfyUI instances.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:18:28 -07:00
Jason HokuandClaude Opus 4.6 a413f3b722 refactor: migrate remote_vae.py to network gateway, remove urllib
HF_ENDPOINTS now imported from network_utils as single source of truth.
Tensor serialization and query string construction moved to gateway.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:17:54 -07:00
Jason HokuandClaude Opus 4.6 28999721ee feat: add HuggingFace Remote VAE section to network gateway
Allowlisted endpoints with validation. Handles tensor serialization,
query string construction, and HTTP transport.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:16:43 -07:00
Jason HokuandClaude Opus 4.6 77b30a3ca6 refactor: migrate config_builder_node.py CivitAI calls to network gateway
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:16:02 -07:00
Jason HokuandClaude Opus 4.6 f43bdf45e0 refactor: migrate lora_utils.py CivitAI calls to network gateway
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:15:37 -07:00
Jason HokuandClaude Opus 4.6 a192354a49 feat: create network_utils.py gateway with CivitAI section
Centralizes all outbound network requests into a single module for
easier Comfy Registry security review. Starts with CivitAI API.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:15:14 -07:00
Jason HokuandClaude Opus 4.6 895931bd57 fix: restore diffusers to requirements without version pin
Keep diffusers as a dependency but without a version constraint to
avoid conflicts with other custom nodes that may need different versions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 23:04:09 -07:00
Jason HokuandClaude Opus 4.6 9ad8108fe9 fix: graceful fallback when diffusers is missing or outdated
Remove diffusers from requirements.txt to avoid conflicts with other
custom nodes that may pin older versions. Wrap the import in remote_vae.py
with try/except so the node loads fully even without diffusers — only
Remote VAE features are unavailable, with a clear error message guiding
users on how to fix it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 22:52:30 -07:00
JasonHoku 97725bf271 Major Version Release 1.17, Cartesian Upscaling Testing Features, Smart Labeling Overlay Display, Optional MetaData/Workflow Packing, Dashboard Landing Page, More Builder UI Settings & minor fixes. 2026-03-09 15:37:24 -07:00
JasonHokuandClaude Opus 4.6 fc6137462d docs: restore project documentation to tracking
Re-add AI-CONTEXT.md, ProjectStructure.md, README.md, and Roadmap.md
to git tracking. Only docs/plans/ remains gitignored as local-only.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 15:34:28 -07:00
JasonHokuandClaude Opus 4.6 89b6ce4eb1 feat: upscale pipelines system + save pre-upscale + HiRes prompt adjust
Replace flat upscale configs with pipeline/steps/repeat architecture:
- Pipelines run independently from base image
- Steps chain sequentially within a pipeline
- Steps support repeat count for iterative refinement

Add "Save Pre-Upscaled Output" option to also keep the base image.

Add "Adjust Prompt During HiRes Fix" with prepend/append/replace
behaviors. HiRes-adjusted prompts are batch pre-encoded for efficiency.
Results written to manifest metadata and exposed as label overlays.

Fix fmtVal scoping error in buildLabelOverlay (was referenced outside
the upscale block where it was defined).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 15:33:04 -07:00
JasonHokuandClaude Opus 4.6 9ede82faa9 fix: label mode unique-only not working on first load and not updating
computeLabelGlobalValues() now runs after loadSession() assigns data
so unique-only filtering works immediately. processNewData() calls
refreshLabelOverlays() so existing card labels update when new images
change what's unique.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 15:32:51 -07:00
JasonHokuandClaude Opus 4.6 5fef83db25 fix: dashboard landing page loading default session instead of showing picker
New nodes now show the session landing page instead of auto-loading
"my_session". Uses _configured_from_workflow flag to distinguish fresh
nodes from saved workflows. Also fixes session cards Y-axis overflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 15:32:44 -07:00
JasonHokuandClaude Opus 4.6 6d1fcdb87f chore: gitignore local-only docs and remove from tracking
ProjectStructure.md, README.md, Roadmap.md, AI-CONTEXT.md, and docs/
are local development references — not needed in the repo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 15:32:37 -07:00
JasonHokuandClaude Opus 4.6 2bded1cf6c fix: upscaling manifest issues — correct file URL, add id field, skip base image
Three bugs fixed:
1. Upscaled images used bare 'filename=...' instead of full '/view?filename=...&type=output&subfolder=...' URL format, causing 404s in dashboard
2. Upscaled manifest entries missing 'id' and 'rejected' fields, causing holes in dashboard grid
3. Base (non-upscaled) images were still saved to pending_batch when upscaling was enabled — now only upscaled final versions appear in output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 03:29:11 -07:00
JasonHokuandClaude Opus 4.6 5e1c1a410a fix: add utf-8 encoding to manifest read in delete_non_favorites
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 02:49:08 -07:00
JasonHokuandClaude Opus 4.6 fadd29a916 feat: add workflow packing to export, cleaned manifest copy, and delete non-favorites endpoint
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 02:47:11 -07:00
JasonHokuandClaude Opus 4.6 36acf2bc18 fix: use workflowExample as fallback only when no workflow data provided
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 02:45:20 -07:00
JasonHokuandClaude Opus 4.6 a7961ee4bc feat: add workflow capture, nodes workflow generation, and delete non-favorites to export
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 02:44:44 -07:00
JasonHokuandClaude Opus 4.6 f9077d4c20 refactor: extract buildComfyNodesWorkflow from copyConfigsAsComfyNodes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 02:41:47 -07:00
JasonHokuandClaude Opus 4.6 6ad1f792c2 feat: add workflow packing checkboxes and delete non-favorites button to template
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 02:00:30 -07:00
JasonHokuandClaude Opus 4.6 094b1a7207 docs: add favorites workflow packing implementation plan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 01:14:26 -07:00
JasonHokuandClaude Opus 4.6 1ec57272f6 docs: add favorites workflow packing & cleanup design
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 01:09:49 -07:00
JasonHokuandClaude Opus 4.6 b443184316 fix: prevent crash on empty model name and correct upscale_size for model_only mode
Skip upscale combos that require a model when none is selected.
Use effective_size=2.0 for model_only mode instead of 1.0 which
would resize the model output back to original resolution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:36:48 -07:00
JasonHokuandClaude Opus 4.6 9555aad4d9 feat: array-based upscaling with Cartesian expansion in orchestrator
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:26:00 -07:00
JasonHokuandClaude Opus 4.6 7e1d3bcf75 feat: rewrite upscaling UI as array-based system with Cartesian expansion
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:43:04 -07:00
JasonHokuandClaude Opus 4.6 7c1b6ffc8c feat: add upscale model discovery from ComfyUI folder system
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:33:30 -07:00
JasonHokuandClaude Opus 4.6 91b8598ac3 feat: add seed settings, canvas flicker fix, upscaling & GPU cooldown
- 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>
2026-03-08 14:00:06 -07:00
JasonHoku 8fbf7568d2 Fixed image resolution settings not outputting to config_json 2026-03-07 17:31:54 -08:00
JasonHokuandClaude Opus 4.6 836a7b3b70 fix: distributed worker missing 8 sampling parameters causing different outputs
The worker's generate_image() call was only passing basic parameters
(seed, steps, cfg, sampler, scheduler, denoise, attention_mode) but
missing all advanced/model-specific parameters that the local path
passes. This caused workers to produce different images than local runs.

Added missing parameters:
- model_sampling_override (noise schedule for Flux/SD3/AuraFlow)
- model_sampling_shift (shift values for model sampling)
- model_sampling_flux_max_shift / model_sampling_flux_base_shift
- use_advanced_sampling (SamplerCustomAdvanced vs standard KSampler)
- advanced_guider / advanced_scheduler
- flux_guidance_value
- width / height (for Flux2Scheduler computation)

All parameters were already present in the job config dict from
expand_configs() but were never forwarded to generate_image().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 16:22:30 -08:00
JasonHoku afd1c07a92 Better, Editable Custom Resolutions In Builder UI & Minor Fixes 2026-03-07 16:02:28 -08:00
JasonHokuandClaude Opus 4.6 5543dd1ddc fix: remove edit emoji button, add newline after dropdown, move custom res to benchmarks/
- Removed standalone edit button (editor accessible via dropdown menu)
- Dropdown and Clear on their own row, custom WxH inputs on a second row
- Custom resolutions file moved to benchmarks/USCG-custom-resolutions.json

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:58:21 -08:00
JasonHokuandClaude Opus 4.6 4a90c18096 fix: resolution dropdown submenus no longer clip or show scrollbars
Removed max-height and overflow-y:auto from all submenu levels so
nested menus can extend freely without being clipped by parent containers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:40:38 -08:00
JasonHokuandClaude Opus 4.6 bad7786597 feat: redesigned resolution picker with nested dropdown and custom editor
- Replaced tiny native <select> with large custom dropdown button
- 3-level nested submenu: Model Type > Orientation (Landscape/Portrait/Square) > Sizes
- Massively expanded built-in presets: SD1.5, SDXL, Illustrious/Pony, Flux, Wan/Video, HiRes/Upscale
- Custom Resolutions Editor modal for creating persistent user-defined resolutions
  organized into named categories
- Custom resolutions saved to ComfyUI output/USCG-custom-resolutions.json
- Custom category always appears first in the dropdown menu
- Edit button (pencil emoji) for quick access to the custom editor
- Backend: GET/POST /configbuilder/custom_resolutions endpoints

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:26:12 -08:00
JasonHokuandClaude Opus 4.6 9987d38f9b fix: Custom Prompts section — session load, checkbox toggle, and count display
Three bugs fixed:

1. Global Prompt data was incorrectly loaded into Custom Prompts when
   loading a session. Added _prompt_source flag ("global"/"custom") to
   configs so the round-trip loader can distinguish between them and
   restore global prompts to the correct section.

2. Checkbox toggle was not visually broken but appeared non-functional
   because bug #1 caused global prompts to populate custom prompt fields,
   making the state confusing. Now correctly separated.

3. Prompt combination count in the section header was only computed at
   render time and never updated when groups changed. Added live update
   via updatePromptCountDisplay() in the onChange callback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:04:08 -08:00
JasonHokuandClaude Opus 4.6 d404420042 fix: disable job skip/resume when optional inputs are connected
Previously, check_if_job_completed() with optional inputs would only
match on sampler/scheduler/steps/cfg/denoise/seed — skipping model,
prompt, and lora checks. This caused false positive matches, skipping
jobs even when the user changed models via optional input nodes.

Now returns -1 (no match) immediately when has_optional_inputs=True,
forcing all jobs to re-generate since upstream changes can't be detected.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 14:53:55 -08:00
JasonHokuandClaude Opus 4.6 38b766cc92 fix: preserve all conditioning extra dict keys during worker serialization
The conditioning serialization was only preserving pooled_output, dropping
critical keys like attention_mask that Wan/T5 models need for proper
sampling. This caused KSampler to produce NaN latents on distributed workers.
Includes backwards compatibility with old serialization format.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 14:38:54 -08:00
JasonHokuandClaude Opus 4.6 1e43776994 fix: free GPU memory before VAE decode + NaN diagnostics
Worker now clones latent and frees UNet tensors + CUDA cache before
VAE decode, giving Dynamic VRAM clean memory for VAE loading.
decode_latent_with_vae now detects NaN in input/output, logs diagnostic
info, retries with float32, and handles bfloat16->numpy conversion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 14:25:09 -08:00
JasonHokuandClaude Opus 4.6 3003fb8193 fix: add torch.inference_mode to worker thread for Dynamic VRAM compat
Worker threads run outside ComfyUI's execution engine which wraps
everything in torch.inference_mode(). Without it, Dynamic VRAM's lazy
weight loading produces NaN during VAE decode, causing black images.
Matches ComfyUI's execution.py:703 pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 14:06:56 -08:00
JasonHokuandClaude Opus 4.6 1830713bd2 feat: configurable label mode overlays on dashboard cards
Adds color-coded metadata labels (model, lora, prompt, sampler,
scheduler, cfg, steps, seed, denoise) as image overlays in the
dashboard grid. Settings panel with per-field toggles and unique-only
mode that hides values shared by every card. Per-lora filtering skips
global loras while showing unique ones. Persisted via localStorage,
backwards compatible with older sessions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:00:24 -08:00
JasonHokuandClaude Opus 4.6 bfe47e0b46 fix: prevent canvas flicker when panning and zooming simultaneously
When mouse wheel zoom fired during a click-drag pan, the zoom function
updated panOffset for the zoom pivot but the next mousemove overwrote
it using stale panStart values, causing a position jump. Now tracks
last mouse position and recalculates panStart after zoom adjustments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 12:35:12 -08:00
JasonHoku 2986f5af63 Live Version Update v1.15 2026-03-07 12:19:26 -08:00
JasonHokuandClaude Opus 4.6 f6f21e309d fix: remove force_patch_weights for Dynamic VRAM compatibility
ComfyUI v16.3's Dynamic VRAM uses ModelPatcherDynamic which asserts
force_patch_weights=False. Removed the flag from both CLIP GPU loading
calls to match ComfyUI's own CLIP.load_model() pattern. Backwards
compatible with older ComfyUI versions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 12:09:49 -08:00
JasonHokuandClaude Opus 4.6 8ff48532f9 feat: drag-and-drop reorder for models, loras, text encoders, and VAEs
Adds HTML5 drag-and-drop reordering within each list in the Config
Builder UI. Drag the ⠿ handle on any card header to change run order.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:49:42 -08:00
JasonHokuandClaude Opus 4.6 5e7ad22cc7 fix: backslash in f-string, dashboard focus stealing, VAE config priority, column hotkeys
- Fix Python 3.10 SyntaxError: extract backslash replace() out of f-string
  expression in config_builder_node.py (issue #12)

- Fix dashboard iframe stealing focus from ComfyUI on every live update
  by removing viewport.focus() from render/update paths in logic_virtual.js

- Intercept Ctrl+S in dashboard iframe and forward to ComfyUI parent
  window so workflow save works instead of triggering browser Save As dialog

- Config Builder VAE settings now override sampler node's remote_vae_endpoint
  via config_overrides_vae flag in generation_orchestrator.py flush logic

- Fix Shift+1-9 column hotkeys: use e.code instead of e.key since Shift
  produces symbols (!@#$) not digits for e.key on standard keyboards

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:41:44 -08:00