The previous attempt (#204 / 36620bd) only set `widget.hidden = true`,
`widget.type = "hidden"`, and zeroed computeSize. On the modern ComfyUI
frontend these flags are not enough — the canvas-drawn COMBO widget
still renders. Result: the model_family dropdown stayed visible on
FlakeStack and FlakeCombo even when an upstream flake_data pin was
connected.
Detach the widget entirely from node.widgets when the input is
connected (saving its prior index so it can be re-inserted in place
when disconnected) and re-add it on disconnect. Also drop the
DOM-querying `_getFamilyWidgetEl` fallback — it relied on label text
that doesn't exist in canvas-drawn widgets and never worked. Run an
initial sync at setup so loaded workflows hide the widget on open
without waiting for the 200ms poll.
Closes#216
Add global _registerOpenPanel/_unregisterOpenPanel registry in utils.js.
flake-combo.js and flake-stack.js now register their option panels so
opening one automatically closes any other open panel.
Each variant choice can now have an optional image (picked from the
ComfyUI input browser) stored as variants.<group>.<choice>.image. The
grid item's cover swaps to that image when the choice is selected on a
Flake Combo or Flake Stack, falling back to the base cover otherwise.
Served via new /flakes/variant_image endpoint resolving from the input
directory or the LoRA tree.
Adds variantSuffix() helper and a refreshName() per grid item so the
displayed name updates live to 'Name (Choice)' when a variant is
selected via the option dropdown, for both Flake Combo and Flake Stack.
The Edit overlay already persists flakes to disk via PUT /flakes/save, so
the override button (which called an unimported saveFlakeApi) was both
broken and redundant. Refetch flake data after edit instead of caching it
in _pendingData. The per-instance Output Stem override now lives in a
dedicated _output_stem_override field, read server-side accordingly.
#168: Call invalidateList() after handleNew so the load picker sees
newly created flakes without a page refresh.
#169: Pre-fetch the full flat LoRA/checkpoint list on browser open;
use it for search so results aren't limited to the current directory.
#170: Auto-select the last (extra) root path in create mode when
more than one base path is configured.
Triangle button repositioned from bottom:30% to bottom:3px so it sits
at the grid item's bottom edge without overlapping hover buttons.
Panel field order changed to: Output Stem → LoRA sliders → Variants.
Add display_names to /flakes/list API response and use them in the
Load Existing Flake picker to show the flake's display name instead
of the path filename as the grid item label.
Closes#137
- Extract shared grid item helpers (makeGridItemOverlay, makeHoverButton,
makeTypeRibbon, makeBypassStrike, svgIcon, TYPE_COLORS) into utils.js
- Fix overlay not covering full item in Flake Stack (was using top/left/
right/bottom:4px instead of inset:0)
- Fix option dropdown button position inconsistency between Stack and Combo
- Use same hover overlay style (inset:0, border-radius:3px) for all three
- Make hover buttons 50% bigger (33px instead of 22px)
- Make triangle dropdown button 50% bigger (18px font instead of 12px)
- Dark overlay always present (not conditional on hasCover), matching
Model Combo style
Closes#138
- Make cover image bigger (160x200)
- Rename Output_stem label to Output Stem, move to same row as Display Name
- Remove Model family field from New Flake overlay (inferred from node)
- Put Base field on same row as Flake type dropdown
- Add Concept option to Flake type, convert checkboxes to dropdown
- Put Output Path in its own row with resolved path preview
- Strip img/<model_family> prefix from Output Path input, show full resolved path below
- Make Output Stem editable in grid item options dropdown
- Make triangle button appear on hover (white, visible)
- Add Concept to TYPE_COLORS in grid
- Remove Output Filename Stem from Add flake field dropdown (now in top section)
- Rotate bypassed bar from horizontal (-) to diagonal (/) with -30deg
- Increase bar thickness from 2px to 2.5px
- Brighten bar color from rgba(200,60,60,0.7) to rgba(230,90,90,0.85)
- Applied to both flake-stack and flake-combo grid items
Closes#129
- Add 4px inset padding to hover button overlay so buttons stay within
grid item bounds when node size increases
- Raise triangle button z-index from 2 to 4 (above hover buttons at 3)
so it remains clickable when hover buttons are visible
- Clicking the ribbon toggles a flake between active and bypassed states
- Bypassed flakes show greyed out appearance with a red strikethrough line
- Bypassed ribbon is dimmed with click-to-activate tooltip
- Backend (FlakeStack.execute) skips bypassed flakes during processing
- Bypassed state stored as 'bypassed' field in flakes_json entries
- Works in both FlakeStack and FlakeCombo grid items
Closes#121
Mirror the model-preset base-path support on the flake side:
Backend:
- save_flake() now accepts base_root_index, output_path, and old_name,
using the same semantics as save_preset(). Renames/moves migrate the
YAML and its cover image.
- /flakes/save now passes those through to save_flake.
Frontend:
- Base Path dropdown + Output Path text field on the flake create AND
edit overlays (populated from /flakes/roots?type=flakes).
- Path prefill from display name + flake type only fires in create
mode; edit mode seeds from the existing flake name and treats it
as user-edited.
- Save call now uses /flakes/save with base_root_index/output_path/
old_name, and flake-stack.js updates the entry's name if the saved
canonical name differs (i.e. the flake was moved).
Set draggable on the whole grid item and remove the 3px vertical bar
on the left. Buttons inside the card cancel the drag so clicks on
Replace/Edit/Remove still work, and double-click-to-edit remains
intact (the browser only kicks off a drag after meaningful pointer
movement).
Mirror the Flake Model Preset hover-button pattern: each non-default
flake card shows three centered buttons on hover (Replace, Edit,
Remove). Removes the static top-right ✕. Double-click-to-edit is
preserved; the override (💾) badge stays pinned top-right when the
entry has unsaved in-memory changes. Replace opens the existing load
picker and swaps the entry in place.
- YAML: write 'variants:' going forward; reads still accept 'options:'
as a legacy alias and migrate it on next save.
- Flake.variants dataclass field renamed; entry payload now reads
'variant' for the per-stack override (legacy 'option' still works).
- UI: button labels (+ variant group), field selector label (Variants),
empty-state text, alert wording all updated.
- /flakes/meta returns both 'variants' and 'options' keys for one
transitional release.
- README updated to reflect the new key.
The ribbon was conditional on entry.flake_type being populated, but
loaded/created entries never copied flake_type from the YAML, so the
ribbon vanished after the modal closed. Always render the ribbon for
non-default entries, defaulting to Other when no type is set, and
populate entry.flake_type when loading/creating/saving.
After Edit Flake saves, sync the entry's lora strength overrides to the
new defaults and prune option-group overrides that no longer exist.
Previously the override array kept a stale 0.9 strength after the
default moved to 0.7, masking the new default with no UI indication.
Saving an edit updated the flake YAML on disk but flakes_json (the
node input) was unchanged for already-loaded entries, so ComfyUI
reused the cached FlakeStack output and the next generation still
saw the old values. Stamp _edited_at on each save so the JSON differs
and the node re-executes (which then re-reads from disk).
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.