Commit Graph
74 Commits
Author SHA1 Message Date
Jason HokuandClaude Opus 4.6 1fc660ad78 fix: Revise & Generate sends complete config with model, seed, prompts
The GENERATE NEW button was only sending sampler/scheduler/steps/cfg/
denoise/lora — missing model, seed, prompts, and all advanced settings.
The generated image would use whatever the sampler node had as defaults
instead of the actual parameters from the source image.

Fixed triggerGen() to build a complete config entry:
- Model and seed from the (now editable) modal fields
- Positive and negative prompts from the modal textareas
- seed_behavior set to "fixed" so the exact seed is used
- All advanced settings carried from the source item: vae, clip_type,
  model_type, text_encoders, attention_mode, clip_skip,
  model_sampling_override + shift values, advanced_sampling,
  flux_guidance, gguf_options

Also wraps output in {"configs": [...]} format (was sending bare array).

Template changes:
- Model input: removed disabled attribute + opacity
- Seed input: removed disabled attribute + opacity
Both are now editable so users can change model or seed before re-gen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 15:18:37 -07:00
Jason HokuandClaude Opus 4.6 9e7911aa23 feat: SeedVR2 upscale mode in Builder UI and Dashboard
Adds SeedVR2 as a new upscale mode alongside HiRes Fix, Model Upscale,
and Model+HiRes. Requires ComfyUI-SeedVR2_VideoUpscaler to be installed
as a dependency — the plugin calls its nodes programmatically.

Data Model:
- New seedvr2 options object on each upscale step with all SeedVR2
  parameters: dit_model, resolution, max_resolution, seed,
  color_correction, batch_size, noise scales, blocks_to_swap,
  attention_mode, offload_device, cache_model, VAE tiling options
- _defaultSeedVR2Options() / createDefaultSeedVR2Options() helpers
- Migration: ensureStepFields adds seedvr2 defaults to existing configs

Builder UI (conf-builder-config-management.js):
- "SeedVR2 Upscale" added to mode dropdown
- When selected, shows full SeedVR2 settings: DiT model selection
  (10 variants: 3B/7B x fp16/fp8/GGUF/sharp), resolution, seed,
  color correction, noise scales, batch size, VRAM optimization
  (blocks_to_swap, attention_mode, offload), VAE tiling with
  conditional encode/decode tile size and overlap fields

Dashboard (logic_upscale_modal.js):
- Same SeedVR2 mode and fields in renderPipelineEditor via _renderStep
- All fields use existing _makeSelect/_makeNumber/_makeCheckbox helpers

Python Execution (image_generation.py):
- New seedvr2_upscale(pil_image, seedvr2_config) function
- Imports SeedVR2 nodes from NODE_CLASS_MAPPINGS at runtime
- Calls SeedVR2LoadDiTModel → SeedVR2LoadVAEModel → SeedVR2VideoUpscaler
- Converts PIL→tensor→SeedVR2→tensor→PIL
- Clear error if SeedVR2 not installed

Pipeline Integration (generation_orchestrator.py):
- Inline upscale path: mode=="seedvr2" branch decodes current latent
  to PIL, calls seedvr2_upscale, saves result, updates manifest
- Supports chained steps: non-final SeedVR2 steps re-encode to latent
  for the next step in the pipeline

Preset compatible: seedvr2 config serializes naturally as JSON, saved
and loaded with upscale presets without any special handling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 12:29:00 -07:00
Jason HokuandClaude Opus 4.6 da7b789098 fix: copy model_type from manifest, remove dead g reference
Fixed ReferenceError: g is not defined — leftover reference from
deleted groups code. Now copies d.model_type directly from each
manifest item into the flat config, as it should.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 01:01:32 -07:00
Jason HokuandClaude Opus 4.6 7b597b3098 fix: determine model_type from file extension, not manifest data
The manifest's model_type field was unreliable — in-memory activeData
could have stale values from a previous load, or the Builder UI bug
(per-array not per-model model_type) could poison it.

Now the export ignores d.model_type entirely and determines type from
the actual file extension:
- .gguf → model_type = "gguf"
- anything else → no model_type field (defaults to "checkpoint")

Also removed dead grouping code (was from the old Config Builder state
format, unused since switching to flat config export) and fixed empty
text_encoders array being included (empty [] is truthy in JS).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 00:58:39 -07:00
Jason HokuandClaude Opus 4.6 8daa31c4f7 fix: export favorites validates model_type from manifest items
Manifest items could have incorrect model_type (e.g. "diffusion_model"
on regular .safetensors checkpoints) due to a Builder UI bug where a
single config array's model_type applied to all models in that array.

The export now validates model_type against the actual file extension:
- .gguf files → model_type = "gguf"
- .safetensors files marked "diffusion_model" → dropped (defaults to
  checkpoint in expand_configs, which is correct)
- Genuine diffusion_model files (non-.safetensors) → preserved

This prevents the "GGUF and diffusion models do not include a bundled
VAE" error when re-running exported configs of regular checkpoints.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 00:39:40 -07:00
Jason HokuandClaude Opus 4.6 f97219f891 fix: export favorites handles GGUF/diffusion models without VAE
GGUF and diffusion_model types don't bundle a VAE, so setting
vae="Default" in the export causes the sampler to throw ValueError.

Fix: when model_type is not checkpoint and no explicit VAE was stored
in the manifest item, set vae="None" instead of "Default". Also shows
a warning in the export alert when GGUF/diffusion models are detected,
reminding the user to connect a VAE to the sampler's optional_vae input.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 00:26:53 -07:00
Jason HokuandClaude Opus 4.6 c2f9955917 fix: export favorites produces sampler-compatible flat config format
The export was producing a Config Builder state object (config_arrays
with arrays of samplers/schedulers/models), but the sampler node's
configs_json input expects flat config entries with single values per
field (sampler, scheduler, model, etc.).

Now produces {"configs": [...]} with one flat config per favorite:
- Each favorite becomes its own config entry with exact field values
  read directly from the manifest item
- Deduplicates identical configs (same model+lora+sampler+steps+seed)
- Wraps in {"configs": [...]} which the sampler node's parser expects
- Alert message updated: "Paste into Sampler Grid node's configs_json"

All optional fields (text_encoders, model_sampling, advanced_sampling,
flux_guidance, clip_skip, gguf_options) only included when present.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 00:03:56 -07:00
Jason HokuandClaude Opus 4.6 820b2a82c7 fix: export favorites config captures ALL settings from manifest items
The previous export only captured model/lora/sampler/scheduler/steps/cfg
and defaulted everything else. Now reads every field from manifest items:

- VAE (collected unique values per group, not hardcoded "None")
- Text encoders (array or string format)
- Clip type (from item, not defaulted to stable_diffusion)
- Attention mode (xformers, pytorch, etc.)
- Resolutions (width x height from each favorite as {width, height})
- Model type (checkpoint/gguf/diffusion_model)
- GGUF options
- Model sampling override + shift values
- Advanced sampling settings (guider, scheduler)
- Flux guidance value
- Model prompt prefix/suffix
- Uses config_positive/config_negative (raw prompts without triggers)

Each group takes advanced settings from its first item (these are
typically identical across favorites from the same model+lora combo).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:49:20 -07:00
Jason HokuandClaude Opus 4.6 75fcc46a91 feat: Export Favorites As Config JSON in Dashboard cog menu
Adds a button in the Dashboard's Export Favorites section that generates
a complete Config Builder JSON from all favorited items, ready to paste
into the Builder UI's lora_config widget.

How it works:
- Collects all favorited items from activeData
- Groups by unique (model, lora, positive, negative) combination
- Each group becomes a config array with all unique samplers,
  schedulers, steps, cfg values from that group's favorites
- LoRA stacks ("lora1 + lora2") are preserved with combine=true
- Per-config prompts are set via use_custom_prompts + positive_prompt_groups
- Session name gets "_rerun" suffix

Output is copied to clipboard. User can then paste into the Config
Builder, adjust resolution/steps/other settings, and regenerate just
the favorited configurations with different parameters.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 23:41:12 -07:00
Jason HokuandClaude Opus 4.6 8b6158d0df fix: scanner manifest order + remove video click fullscreen
Two small fixes:

1. Directory scanner sort inversion:
   The Dashboard's fast-path for oldest/newest sort assumes activeData
   is stored newest-first (generated sessions prepend new items). The
   scanner was writing oldest-first, so both sort modes appeared inverted.
   Fix: sort files by mtime DESCENDING (newest first) and assign
   gen_index via (total-1-i) so oldest=0, newest=N-1 is preserved.

2. Video click-to-fullscreen removed:
   Clicking a video in the Dashboard no longer triggers browser
   fullscreen — the interaction was disruptive. Videos still autoplay
   when visible and double-click still toggles favorite.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 09:53:27 -07:00
Jason HokuandClaude Opus 4.6 3e1f541422 fix: video autoplay + poster frame loading
Two issues were causing grey/unloaded video cards:

1. preload="none" blocked browsers from fetching the first frame for
   poster display. Changed to preload="metadata" so the first frame
   shows even before play starts.

2. IntersectionObserver had edge cases with CSS transforms on the
   virtual scroll canvas — observer wasn't firing for transformed
   cards. Replaced with direct control via virtual scroll lifecycle:
   - Videos get src set + .load() called when card is added to DOM
   - Playback starts after fragment is appended to grid (play() needs
     element to be in the DOM)
   - Videos are paused + reset via _stopVideoPlayback when cards are
     pooled or removed

This uses the virtual scroll range directly (which already handles
pan/zoom/scroll correctly) instead of relying on IntersectionObserver
which has known issues with CSS transforms.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 09:07:51 -07:00
Jason HokuandClaude Opus 4.6 b3fab600c7 feat: media type filter (image vs video) in Dashboard filter panel
Adds a new "Type" filter row to the filter panel that lets users toggle
between showing images and videos. Works alongside all existing filters
(sampler, scheduler, model, upscale, etc.).

- logic_state.js: new filters.mediaType Set
- logic_pipeline.js: filter check in both incrementalFilter and
  executePipeline; included in getFilterKey() hash for cache
  invalidation
- logic_ui.js initFilters(): populate mediaType values from
  d.media_type (defaults to "image" for backwards compat)
- template.html: new .filter-row with #filter-mediaType container

Items without media_type still appear under "image" automatically.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 00:44:22 -07:00
Jason HokuandClaude Opus 4.6 dbd9833fee feat: autoplay visible videos in Dashboard via IntersectionObserver
Replaces hover-to-play with viewport-visibility autoplay for a more
Instagram-like browsing experience. Videos auto-play when their card
enters the viewport (25% threshold) and pause+reset when scrolled off.

- New videoAutoplayObserver in logic_virtual.js with threshold: 0.25
- Each rendered video is registered with the observer
- Pool/removal flow unobserves and pauses the video to prevent leaks
- createCard() in logic_ui.js drops the hover-play listeners; keeps
  click-to-fullscreen and loadedmetadata aspect ratio handlers
- Observer also lazy-loads src on first intersection as a safety net

Uses native IntersectionObserver so it respects zoom, pan, and any
viewport transform automatically — no manual bounds math needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 00:44:21 -07:00
Jason HokuandClaude Opus 4.6 0feb11c6bd feat: video support in Dashboard and external directory scanner
Adds video file support throughout the Dashboard with zero new Python
dependencies — browsers handle all playback, metadata, and thumbnails
natively via HTML5 <video> elements.

directory_scanner.py:
- Add VIDEO_EXTENSIONS (.mp4, .webm, .mov, .m4v) to scan list
- _process_single_image() detects videos by extension and creates a
  video manifest item with media_type="video"
- Videos get default 1280x720 dimensions; browser updates on loadedmetadata
- Image items now tagged with media_type="image" for symmetry

Dashboard (logic_ui.js createCard):
- Renders <video preload="none" muted loop playsinline> for video items
- Hides REVISE and upscale buttons for videos (don't apply)
- Shows "▶ VIDEO" badge in top-left corner
- Hover-play: videos play on mouseenter, pause+reset on mouseleave
- Click: requests native browser fullscreen with controls
- loadedmetadata handler updates card aspect ratio from videoWidth/videoHeight

Dashboard (logic_virtual.js):
- Lazy loader extended to swap data-src → src for <video> elements

CSS (report.css):
- .video-badge styling (purple pill, top-left)
- .card video positioning (absolute, cover-fit)

Works with any codec the browser supports (H.264, VP9, AV1, H.265).
Existing features unchanged: favorites, rejects, sorting, filtering,
DOM card pool, merge sessions, quick favorite hotkeys all work on videos.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:23:02 -07:00
Jason HokuandClaude Opus 4.6 beacb02101 fix: fullscreen toggle loads correct session instead of default
When toggling fullscreen, the iframe reload was reading the session name
from the node's widget (default "my_session") instead of the session
the user had actually selected in the Dashboard picker.

Now the Dashboard sends its current session name in the fullscreen
postMessage, and the handler prefers that over the widget default.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 10:32:45 -07:00
Jason HokuandClaude Opus 4.6 017f7b894d feat: merge sessions in Dashboard — load multiple sessions side-by-side
Add mergeSession() function that loads another session's manifest and
appends its items to the current view. Items are tagged with _session
field and deduplicated by ID. Each session row in the picker gets a
"+Merge" button. The merge is view-only (not saved) with a notification
toast showing how many images were added.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 22:27:25 -07:00
Jason HokuandClaude Opus 4.6 956d75ba5d perf: DOM card pool for virtual scroller — recycle instead of destroy
When cards scroll out of view, they're now pooled (hidden, up to 100)
instead of removed from the DOM. When new cards need to be created,
pooled cards are recycled by swapping in new content via createCard().
This cuts DOM allocation churn by ~90% during rapid scrolling with
large datasets (10k+ images).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 22:27:24 -07:00
Jason HokuandClaude Opus 4.6 0c82d2621c feat: quick favorite visible cards with number keys 1-9
Press 1-9 to toggle favorite on the Nth visible card in reading order
(left-to-right, top-to-bottom). Uses getBoundingClientRect() for
accurate card detection regardless of zoom, pan, or dynamic card sizes.
Visual feedback: green/red glow + number badge overlay.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 20:50:23 -07:00
Jason HokuandClaude Opus 4.6 c971e2934d feat: full pipeline editor in dashboard upscale modal
Replace the simplified single-step config editor with renderPipelineEditor(),
a full pipeline/step UI matching the Builder UI feature set:
- Multiple pipelines with add/remove, active toggle, name, collapsible
- Multiple steps per pipeline with all settings (mode, resize, ratio,
  denoise, hires steps, tiled sampling, tiled VAE, repeat)
- Multi-model selector with searchable dropdown and chips
- HiRes prompt adjustment section
- Iteration count display per step

Also fixes:
- Preset double-entry bug: save now deduplicates by name in both
  Builder UI and dashboard modal
- Builder UI hires_force_uniform_tiles checkbox: || true -> !== false
  (was always displaying as checked regardless of stored value)
- Model list fetch: GET instead of POST (matching the endpoint)
- Modal size: 600px wide, 90vh tall for better fit
- Cancel button: sends cancel request to server during active upscale
  instead of just closing the modal

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 12:34:13 -07:00
Jason HokuandClaude Opus 4.6 d630f7c8a4 feat: rewrite upscale modal with inline config editor
Replace preset-only UI with inline upscale settings: mode selector
(hires/model/both), upscale model dropdown, ratio, denoise, hires
steps. Mode changes dynamically show/hide relevant fields. Presets
load/save below the config editor. No longer requires going to the
Builder UI first.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 23:59:59 -07:00
Jason HokuandClaude Opus 4.6 6fac4ddf69 fix: read session name from input element in upscale modal
sessionName was not a global variable — read from the session-input
element like other dashboard functions do.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 23:13:28 -07:00
Jason HokuandClaude Opus 4.6 c9efe90b54 fix: add upscale button to mobile touch visibility rules
The ⬆ button now shows on touch devices (pointer: coarse) with
0.7 opacity, same as the other card action buttons.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 19:36:11 -07:00
Jason HokuandClaude Opus 4.6 c03fb050cb docs: update keyboard shortcuts reference with all current hotkeys
Added R (reload), Shift+0-9 (columns), Ctrl+S (save), Escape (close),
Double-click (favorite). Fixed F description (fullscreen, not auto-fit).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 16:03:03 -07:00
Jason HokuandClaude Opus 4.6 d94a0695bd feat: add upscale modal HTML container and wire JS into dashboard
Modal overlay with click-outside-to-close. JS file added to
html_generator.py load order after logic_ui.js.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 15:35:33 -07:00
Jason HokuandClaude Opus 4.6 06a3a1933d feat: create upscale modal JS with preset management and async upscale
Modal with scope toggle (single/all favorites), preset load/save/delete,
config summary display, progress bar with polling, and cancel support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 15:34:31 -07:00
Jason HokuandClaude Opus 4.6 e825438c5d feat: add ⬆ upscale button to dashboard card hover overlay
Purple button positioned between favorite star and revise button on
the right side. Appears on hover, calls openUpscaleModal(imageId).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 15:33:12 -07:00
Jason HokuandClaude Opus 4.6 85ed723b21 feat: show 'Upscaling' phase label in dashboard ETA bar
Progress events with phase="upscaling" display "Upscaling 5/30"
instead of "Job 5/30". Handles missing finish_time gracefully.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 02:30:47 -07:00
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 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
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 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 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
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
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
JasonHokuandClaude Opus 4.6 5913ae19e0 Fix alert popup on dashboard load for non-existent sessions
loadSession() in logic_pipeline.js was called unconditionally on page
load, causing a 404 fetch and alert("Load Error: Session not found")
for new/empty sessions. Guard the call to only run when fullManifest
has items, letting init() in logic_init.js handle empty sessions via
showSessionLandingIfEmpty().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 00:35:52 -08:00
JasonHokuandClaude Opus 4.6 49e0363146 Fix session landing page not showing when no session exists
dashboard_node.py: Generate full template with empty manifest instead of
plain error HTML, so the landing page JS logic can detect empty data and
show session cards.

logic_utils.js: Always call fetchAndShowSessions() so the session picker
dropdown in the cog menu is populated even when a session is loaded.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 23:39:34 -08:00
JasonHoku 2a84bb34a1 fix viewport redeclared 2026-03-05 23:24:21 -08:00
JasonHokuandClaude Opus 4.6 bb2f786832 Dashboard session landing page and reload improvements
- Topbar: Changed Load Session to Reload Session with refresh icon
- Settings cog: Added session picker dropdown in SESSION section
- New endpoint: GET /config_tester/list_sessions returns sessions with
  metadata (name, item count, first image, modification time)
- Landing page: Shows session cards with thumbnails when no session loaded
- Click any card or use dropdown to load a session
- Landing page auto-hides when session data loads

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 15:44:16 -08:00
JasonHokuandClaude Opus 4.6 6cc9616708 Prompt editor size, sidebar icons, and column hotkeys
- Double prompt JSON editor min-height from 80px to 160px
- Sidebar config sub-icons always visible (removed hover-expand)
- Config icons now show cogwheel + number (e.g. ⚙️1)
- Text Encoders icon changed to 🔣, LoRAs to 🔮
- Dashboard: Shift+1-9 sets column count, Shift+0 resets to auto

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 15:31:54 -08:00
JasonHokuandClaude Opus 4.6 a71b9ed315 Add dashboard toggle to show/hide trigger words in prompts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 21:15:21 -08:00
JasonHoku 731db142d9 builder ui updates, features & dash prompt analyize copy favorites to clipboard tool 2026-02-19 15:44:06 -08:00
JasonHoku 820ff09df8 sorting optimization 3 2026-02-18 17:10:10 -08:00