Three related improvements to the file selector popups:
- The Load Existing flake picker opens at img/<family_folder>/ derived
from the active node's selected family (instead of root) and shows
models/flakes/<rel> in the breadcrumb. The up arrow can still walk
past the family folder for cross-family use.
- The generic file browser (LoRAs, checkpoints, flakes) header now
renders models/<type>/<rel>/ instead of a bare /, so the user knows
exactly which directory the listing came from.
- Search inside the Load Existing picker is now scoped to the current
folder, matching the breadcrumb. Searching from the family folder
no longer pulls in unrelated flakes from elsewhere.
- The empty-state message also shows up when navigating into an empty
family folder (previously only at the root).
Open the LoRA file browser at img/<family_folder>/ instead of the
loras root, derived from the active modal's family dropdown (create
mode) or the existing flake's stored path prefix (edit mode).
The file browser also now falls back to the loras root if the
requested directory doesn't exist on disk, so the UX is forgiving
when a family folder hasn't been populated yet.
When the user selects a LoRA on a flake and no cover has been picked
yet, fetch the LoRA's sibling image (same basename, .png/.jpg/.webp/...)
from models/loras/ and use it as the flake's default cover.
Triggers from all three LoRA selection paths (file browser, dropdown
change, dropdown blur) but only for the first LoRA on the flake, and
only when no cover file has been chosen by the user. Adds a server
endpoint /flakes/lora_sibling_image mirroring the existing checkpoint
sibling endpoint, with a shared helper.
The Modify and Remove buttons that appear on hover over a selected
preset were 24x24 with small icons, making them awkward to target.
Bump to 36x36 with 20px icons, larger shadow and gap, and add a
per-button mouseenter scale + brighter background so they feel
clickable when targeted.
The Family dropdown was too small to comfortably click on the Flake
Stack node and clicks were leaking to the LiteGraph canvas on the
Flake Model Preset node, where they triggered the underlying preset
combo. Increase font size, padding, and min-height across all four
widgets, and stop mousedown/click propagation so the canvas no longer
intercepts dropdown opens.
Also introduce a shared FAMILY_FOLDERS / familyFolder helper in utils
to be used by upcoming path-aware features.
- Add openPresetPicker() that shows presets in a searchable grid with
cover images, matching ComfyUI Load Image dropdown styling.
- Rewrite FlakeModelPreset widget: remove dropdown, add 'Select Preset'
and 'Create Preset' buttons. When selected, show cover image with
preset name and hover buttons for Remove/Modify.
- Update FlakeModelCombo widget: remove dropdown, use the visual picker
when clicking 'Add Preset'.
Fixes#54, Fixes#55, Fixes#57
Adds cache-busting to the preset list fetch and makes widget DOM
updates more robust by trying multiple element selectors. Also
forces a canvas redraw so existing nodes reflect the new preset
without requiring a ComfyUI reload.
Fixes#56
Adds String() coercion and null-safety to the file browser search
filter to prevent 'No matches' when entries have unexpected types.
Removes redundant keyup listener since input already covers text changes.
Fixes#58
- Add /flakes/checkpoint_sibling_image endpoint to find an image next to
the selected checkpoint with the same basename.
- In the preset editor, auto-load that image as cover when a checkpoint is
selected, but only if no cover already exists.
- Poll preset widget value in FlakeModelPreset so cover updates immediately
when the user swaps presets via the dropdown.
Closes#52
- Add dblclick handler on file rows to immediately select and close.
- Add keyup fallback for search filtering.
- Add Enter key support to select the first matching file.
- Focus search input when dialog opens.
Closes#50
- Increase select and option font-size from 10px to 13px
- Increase height from 22px to 26px to fit larger text
- Fix asymmetric padding (0 18px 0 4px → 0 18px) so selected text is
truly centered across the full width, not offset by the chevron
- Add text-align:center to each <option> so open dropdown items are centered
Closes#47
- Stop filtering out already-added flakes from the picker list
- Add double-click handler on flake thumbnails to select+close immediately
- Add double-click on folder items to navigate into them
- Update both FlakesStack and FlakesCombo handleLoad call sites
Closes#46
- Model Preset: move URL input above checkpoint path selector
- Model Preset: make toggle button bigger (14px) with flex centering
- Model Preset: make link icon blue (#4a9eff)
- Flake LoRA editor: same bigger toggle button and blue link icon
Closes#45
- openFileLoadPicker now accepts {flakes, directories} and builds a folder tree
- Folders rendered as large 📁 icons with labels; clicking navigates into them
- Breadcrumb path bar shows current location; click to return to root
- Up-folder item (..) shown when inside a subfolder
- Search bar filters all flakes globally regardless of folder
- Exclude model_presets/ from both directory tree and search results
- Update both FlakesStack and FlakesCombo handleLoad call sites
Closes#43
- Replace defaultPath: 'img' with '' for both checkpoints and loras pickers
so they open at the model root instead of a non-existent img/ subfolder
- Add real-time search bar to openFileBrowser overlay filtering files/folders
in the current directory by name
- Show 'No matches' when search yields no results
Closes#42
- Save: build ordered dict by iterating activeFields so YAML keys follow
the user-dragged order
- Load: derive activeFields from Object.keys(data) order (Python preserves
insertion order via yaml.safe_dump sort_keys=False)
- Fallback appends any fields not present in the key order
Closes#41
- Add makePanelDropdown helper with dark background (#1a1a1a), #333 border,
4px radius, 10px font, 22px height — matching makeSmallValueSlider
- Hide native arrow with appearance:none and add custom SVG chevron
- Center text edge-to-edge using text-align-last:center
- Options now share the same 10px font size as the selected value
- Replace inline select creation in rebuildPanel with makePanelDropdown
Closes#40
- Extract loadOptions() to fetch flake metadata in the background on init
- Call loadOptions() immediately so triangle button shows for flakes with options/loras
- Remove right-click handler that was used as a workaround
Closes#39
- Replaces file-browser-based load picker with a dedicated overlay
- Shows thumbnail grid with cover images (background-size:cover)
- Search bar filters flakes by name in real time
- Click to select, Cancel / Select buttons in footer
Closes#32
- Add proper dragstart/dragover/drop/dragend handlers to field drag handles
- Visual drop indicator shows between fields during drag
- Reorders activeFields array and re-renders on drop
Closes#36
- Model Preset: checkpoint URL hidden by default, toggle with triangle button
next to Checkpoint label. Blue link icon appears when URL is populated.
- Flake LoRA: replace [...] button with triangle toggle. Header shows LoRA name
and blue link icon when URL is populated. Full URL no longer shown in header.
Closes#33, closes#34
Backend:
- Add LoraEntry dataclass with name, url, path, strength
- Flake dataclass now has loras[] list; legacy lora_path/strength kept for compat
- _flake_from_raw parses both new multi-LoRA and legacy single-LoRA formats
- resolve() applies multi-LoRA strength overrides from grid entries
- full_flake_node.py applies all LoRAs in order
Frontend:
- Flake edit modal: each LoRA gets its own section with name, URL, path picker,
strength slider. +Add LoRA button to add more. [...] button edits name/URL.
- Grid dropdown: shows one strength slider per LoRA, labeled with LoRA name
- Grid entries store loras[] array of strengths for overrides
- Backward compatibility: old entries with single strength auto-converted
Closes#30
- Replace inset box-shadow with absolutely positioned indicator at left:-3px
so the blue line appears in the gap between items rather than on the item
- Add dragover/drop handlers to the Add block for dropping after the last item
- Clear all indicators on drag end
Closes#28
- Update has_lora flag after editing/saving a flake (both defaultUpdated and saved cases)
- Update has_lora after overriding pending changes to disk
- Fix incorrect lora_path field name: raw YAML uses 'path', not 'lora_path'
Closes#27
- Added checkpoint_url to ModelPreset dataclass and load/save
- Added optional URL input field in the preset edit overlay
- Defaults to empty string
Closes#25
- Model Preset initializes filename prefix with <PresetName>/
- New optional 'Output Filename Stem' field in flakes editor
- FlakeStack collects stems from all flakes and builds prefix:
- Folder stems (containing '/') are appended to path
- Date folder <YYYY-MM-DD> inserted after last folder stem
- Filename starts with <HH-MM-SS> followed by _ separated file stems
- FlakesGenerationData converter outputs filename_prefix as 6th pin
Closes#24
- Checkpoint field in preset editor now opens a file picker filtered to .safetensors
- LoRA field in flake editor now opens a file picker filtered to .safetensors
- Load Existing now opens a file picker filtered to .yaml/.yml
- Each picker attempts to map the selected file name back to the backend's full path
- Manual text entry is still available via a small '...' button next to each picker
Note: Browsers do not allow setting the default directory of a file picker for security reasons.
Closes#18, closes#20, closes#22
- Replace inline LoRA slider with a bottom-center triangle button
- Triangle opens a dropdown panel with options and LoRA strength
- LoRA strength slider uses the same comfy styling and allows -10 to 10
- Right-click still opens the same panel
- Changes in the panel do not affect the yaml file
Closes#19
- Use inset box-shadow instead of inserting an indicator element, preventing items from being pushed during drag preview
- Fix insert index calculation when dragging from before to after target
- Clear box-shadow styles properly on drag end and leave
Closes#16
- New flakes no longer auto-add a prompt field (#15)
- LoRA strength sliders now allow -10 to 10 (#14)
- Option choices no longer auto-add positive/negative; use +positive/+negative buttons instead (#21)
Closes#14, closes#15, closes#21