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.
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
- 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
- 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.
save_flake() prepends img/<family>/ to the requested name when family
is set, but the API returned the original user-typed path, so the
freshly created grid item pointed at a non-existent name and any
subsequent run errored with FileNotFoundError. Return the resolved
name from the backend and use it for the grid entry.
- Drop top-level path/strength keys on save when loras[] is present
- Strip them on read so the UI never sees the legacy duplicate
- Resolve LoRA-derived covers to the sibling image path on save so YAML
never stores a .safetensors path under cover_image
- Backend cover lookup keeps fall-through support for legacy YAMLs that
still point at a .safetensors weight
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.