Replaces the two Models/Inputs preview buttons with a single Generation
Data button (#188) opening a split overlay:
- Left half: one horizontal-scroll grid per upstream Flake Model Combo /
Flake Combo node, defaulting to the first item, selectable (#189).
- Right half: model/output/LoRA/prompt data for the selected combination
only, pulling fixed preset + common stack flakes + the chosen combo
flake per axis (#190).
- Top of right half: k-d-tree composite of the selected combo covers
(top half + bottom quarters for the 3-item case), with a
'No image generated yet' label that swaps to the actual output +
filename once that combination has been generated (#191).
queue.js stamps an order-independent combination key onto FlakeGenerate
before each queued prompt so onExecuted can map outputs to combinations.
closes#187
While queueing the cartesian product of jobs, each FlakeCombo and
FlakeModelCombo node highlights (blue border + glow) the flake/preset
being used for the current combination via a transient
_combo_generating_index, cleared when generation finishes.
Removes the 'This will queue N prompts. Continue?' confirm() and adds a
Jobs: N label to the Flake Generate node (left of the preview buttons)
that polls computeJobCount() and updates as flakes are added/removed in
connected FlakeCombo / FlakeModelCombo nodes. Bypassed flakes excluded
(shared with #179 logic).
Adds a read-only monospace field under the Flake Generate image showing
the path relative to ComfyUI's outputs/ folder (subfolder/filename).
Refactors image display into shared showImage/clearImage helpers.
Bypassed (crossed-out) combo flakes were still multiplied into the
cartesian product of queued jobs. They are now filtered out so the job
count reflects only active flakes (e.g. two 4-flake combos with 2
bypassed each = 4 jobs, not 16).
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.
Reduce preview buttons from 4 to 2 in both FlakeGenerate and PreviewFlakeData:
- Models: checkpoint, VAE, text encoder, LoRAs with strengths, width, height,
steps, CFG, sampler, scheduler
- Inputs: prompts grouped by source with selected variants + ControlNet info
Static preview (before generation) now walks the full upstream chain:
FlakeModelPreset → FlakeStack(s)/FlakeCombos → FlakeGenerate, fetching
preset and flake configs from the API to populate both panels.
Auto-created ComfyUI widgets for optional numeric/string fields
(filename_prefix, width, height, steps, cfg, sampler_name, scheduler)
are now hidden on setup — they only appear as input pins when the user
explicitly adds them via the [+] button.
Dropdown appearance updated to use appearance:auto for closer match
to native ComfyUI COMBO widget style.
Remove max-width:200px constraint and add computeSize that derives image
height from node width at a 2:3 aspect ratio so the cover scales when
the node is resized.
COMBO types (lists) are input-only in ComfyUI — using them as RETURN_TYPES
caused node registration to fail, hiding the node from the Add Node list.
STRING is the correct output type for passing sampler/scheduler values.
#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.
Stems no longer reset to [] on each FlakeStack — they accumulate across
the chain by preserving the incoming list. Runtime output_stem overrides
from the option panel dropdown are now applied by resolve() reading
_pendingData.output_stem from the serialised entry.
FlakeDataSplitSelect (#164):
- Remove 'selected_pins' STRING from Python INPUT_TYPES (was causing node load failure)
- Store pin selection purely in node.properties._split_pins
- Rewrite JS widget with attached-button dropdown style
IntoFlakeDataSelect (#165):
- Remove all optional fields from Python INPUT_TYPES; use None-sentinel pattern
so only connected inputs override the original flake_data
- JS now uses node.addInput/removeInput for dynamic pins — no default pins,
no hidden widget fields interfering with click events
- Dropdown styled as select + attached button (matching Load Image node)
- Chips show active pins with x to remove
- Rename 'Base' to 'Base Directory' and expand to full width (flex:1, same as Display name)
- Reduce Flake Type to fixed 140px width (same as Output Stem)
- Show abbreviated full path in Base Directory dropdown options instead of just drive letter
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.
Replace inline absolute overlay with full-page modal via openOverlay().
Add onConnectionsChange hook that walks upstream FlakeStack nodes,
fetches flake configs from the API, and populates preview data so
buttons are clickable before any generation is run.
Rename 'images' key to 'flake_images' in UI output so ComfyUI's default
image renderer is not triggered. The custom JS widget reads 'flake_images'
directly, so only one image is shown.
FlakeDataSplitSelect could not be added to workflow because removeInitialPins
called node.removeOutput/addOutput which could fail during node creation.
Switch to applyPinVisibility (hide/show existing pin slots) instead of
dynamically removing/adding pins, which is safer and avoids the crash.
IntoFlakeDataSelect: hide widget-type fields (filename_prefex, width, height,
steps, cfg, sampler_name, scheduler) by default; show them as label + widget
rows only when added via dropdown. Redesign [+] button with neutral Load Image
style styling and add hover effect. Remove dedicated [-] button since chips
have individual delete (x) buttons. For widget-type pins, display inline
label + input widget instead of a square input pin.
Fixes#152, Fixes#153
Flake Data Split (All) and Flake Data Split (Select) output pins for
sampler_name and scheduler used plain 'SAMPLER'/'SCHEDULER' string types
which did not match KSampler's input type (the actual sampler/scheduler
list tuples). This caused connection validation failures.
Change _ALL_PINS entries for sampler_name and scheduler to use the
_SAMPLER_TYPES tuple values imported from comfy.samplers.KSampler,
so output type keys match KSampler's input types exactly.
Fixes#154
- Reduce HOVER_BTN_SIZE from 33 to 26 and add 4px padding to hoverWrap
- Replace display:none with opacity:0 on triangle, bright white, 30% larger
- Shift triangle 30% from bottom, add pointer-events:auto for clickability
Widget-only parameters (filename_prefix, width, height, steps, cfg, sampler_name,
scheduler) had default values, causing them to appear as node widgets even when
the input pin is not connected. Removing defaults makes them pin-only — widgets
only appear when the pin is manually added via the selector.
Fix FlakeDataSplitSelect not creatable: _ALL_PINS used _SAMPLER_TYPES[0] and [1]
which are tuples/lists when comfy.samplers imports successfully, not valid
RETURN_TYPES strings. Use plain 'SAMPLER'/'SCHEDULER' type names instead.
- Set fixed 680px width on overlay panel to prevent horizontal expansion
when typing in text fields
- Remove Model family dropdown from Preset create and edit overlays;
family is now inferred from the Flake Model Preset node selection
These were declared with const but imported as named exports by
flake_stack.js, causing a module load error that prevented the entire
extension from registering. All custom DOM widgets (FlakeStack grid,
FlakeModelPreset cover image, FlakeCombo, etc.) were silently disabled.
Creates FlakeGenerate node that takes flake_data input, runs KSampler, VAE Decode, and SaveImage internally. Displays seed widget with randomize/increment/decrement controls, 2x2 preview grid (reusing flake-preview.js), and generated image preview in a single DOM widget.
Add list_preset_display_names to flake_io.py and return display_names
from the /flakes/presets API endpoint. Use the display name (falling
back to last path segment) in the preset picker grid thumbnails.
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
- Replace hide/show visibility approach with dynamic addOutput/removeOutput
and addInput/removeInput for proper pin management
- On node creation, remove all default pins and add only selected ones
- On workflow load (onConfigure), clear all dynamic pins and rebuild from
saved properties
- Remove OUTPUT_NODE from FlakeDataSplitSelect (not an output node)
- Add pin selector UI with +/- buttons that dynamically adds/removes pins
- Export DEFAULT_SPLIT_PINS and DEFAULT_INTO_PINS for use in onConfigure
Closes#139
- 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
The edit overlay was broken because baseRootSelectRef was assigned on
line 85 but declared with let on line 219, causing a ReferenceError due
to the temporal dead zone. This made the overlay render only the title.
Closes#136
- Make controlnet type a dropdown listing available types (openpose, depth, canny, etc.)
- Replace input image text field with file selector (left side) with image preview
- Redesign CN card layout: image preview on left, type/model/sliders on right
- Add labeled sliders (Str, Start, End) for controlnet
- Auto-set cover image from first controlnet input image if no cover exists
- Add /flakes/cn_types endpoint for listing controlnet types
- Add 'inputs' browse type for file picker to select input images
- Add fetchCnTypes API function
- 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
- Reduce textarea rows from 5 to 3 and min-height from 100px to 78px
for both positive and negative prompt fields so the preset page fits
in view without scrolling
Closes#125