Commit Graph
223 Commits
Author SHA1 Message Date
Jason HokuandClaude Opus 4.6 d2e6717867 feat: dashboard session picker with search and sort by recent
Replace the session <select> dropdown with a searchable scrollable list.
Sessions already come sorted by most recent from the backend. Added
search input that filters sessions by name in real time.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 20:13:53 -07:00
Jason HokuandClaude Opus 4.6 b701c5f8b2 feat: add Steps, CFG, and Upscale Model/Method to dashboard filters
New filter buttons for Steps, CFG, and Upscale (combined mode + model
name). Applied in both the new-items filter path and the full
executePipeline filter path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 20:12:28 -07:00
Jason HokuandClaude Opus 4.6 51dd73b254 fix: centering zoom fits columns width and pins top row below header
Scale to fit all columns across viewport width, center horizontally,
and position the top row just below the header bar instead of using
a hardcoded 20px offset.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 19:44:25 -07:00
Jason HokuandClaude Opus 4.6 f19a0f08c2 fix: centering zoom accounts for topbar and bottom bar height
autoFitZoom() now measures header and json-container heights to
calculate actual available viewport space. Fits to both width and
height constraints and centers vertically in the remaining space.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:00:55 -07:00
Jason HokuandClaude Opus 4.6 9cf556d886 fix: prompt ordering and duration metric with upscaling
- Replace set() with ordered list dedup for batch encoding so prompts
  generate in the order they're written in the config array
- Track cumulative upscale duration so the time metric includes both
  generation and all upscale steps instead of just the last upscale

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:00:47 -07:00
Jason HokuandClaude Opus 4.6 cf896ec1e5 feat: add label size slider to dashboard settings
Slider in Label Mode settings (6-16px range) controls overlay text size.
Uses CSS custom property for instant updates. Persisted to localStorage.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:00:38 -07:00
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