18 Commits
Author SHA1 Message Date
DemonGatanjieuandClaude Opus 5.5 845d2b6178 Let saves and workflows reach each other
A save copies to a workflow card, a preset of a card with the same structure, or a
combo; a card's preset can join the open canvas's saves. The Workflows page lists
every group, so saves of a closed tab or a deleted file can be opened again, on a
new tab where the group goes on, or removed. A card keeps no key of a canvas's saves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 16:39:22 +08:00
DemonGatanjieuandClaude Opus 5.5 c59927e701 Read the LoRAs of popular third-party nodes wherever AMB reads a workflow's models
AMB read models only from ordinary drop-downs, so rgthree's Power Lora Loader (rows are
{on, lora, strength} objects) was invisible: Model Check never reported its missing LoRAs.
Now its switched-on rows are Model Check boxes (lora_nodes.js powerLoraRowBoxes: ComfyUI's LoRA
list as choices, a fix changes only the row's LoRA; downloads put files in the same way), saved
fingerprints and a picture's model search read them, the workflow summary lists them, and saved
model references include them and Easy-Use LoRA stack rows (nodeModelValues /
_model_reference_values, mirrored). Only these widely used nodes; ComfyUI's loaders stay the
reference.

recipe_parser.js was over 600 lines: which LoRAs a node loads moves to recipe_loras.js and the
box readers to recipe_widgets.js.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:57:36 +08:00
DemonGatanjieuandClaude Opus 5.5 4abb0100a7 feat(prompts): find prompt boxes by node definition and wiring
One module, prompt_boxes.js, now decides which boxes of a live node take a
prompt and whether each is positive or negative. A prompt box is a
multiline STRING input by the node's ComfyUI definition, not a widget
whose name looks right; its role is its own name (positive / negative) or
the wiring down to a sampler's positive / negative input, not the title.

- Material drops, Prompt Studio, the translator and recipe capture use it;
  their name regexes and fallbacks ("any string widget") are gone.
- Prompt Studio's role detection read graph.links[id], which is a Map in
  current ComfyUI, so it never followed a link; it uses the module now.
- Material writes call onWidgetChanged(name, ...) as ComfyUI expects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 05:46:21 +08:00
DemonGatanjieuandClaude Opus 5.5 40195aa842 fix(recipes,materials): keep all-in-one support without guessing or crossing roles
Keeps the planned All-in-One loader and cross-node prompt features but removes
the regressions they introduced:

- model references: one adapter table for verified layouts (easy a1111Loader,
  easy fullLoader, Efficient Loader) shared by recipe_identity.js and
  recipe_schema.py; native loaders keep their stored labels; no more guessing
  categories from file names (a "...vae.safetensors" checkpoint was a VAE);
  "None"/"Baked VAE" are never references
- recipe summary sync follows the extraction rules: only checkpoint/UNet
  loaders or ckpt_name/unet_name set the base model (not an upscaler's
  model_name), only sampler-like nodes set seed/steps/cfg, and LoRA edits
  update the entry of the edited loader instead of falling back to loras[0]
- one LoRA entry per loader again (deduplication shifted entries)
- prompt injection never writes negative text into a positive slot or the
  reverse; the block chooser follows the same rule
- material cards only accept cross-node drops that carry prompts; parameter
  blocks stay same-type
- drop unused imports and the unused modelSpecs alias

Verified: regression cases added to tests/recipe_all_in_one_compatibility.mjs
and tests/material_prompt_cross_node.mjs (both fail on the previous commit),
new tests/test_recipe_model_references.py; all JS tests except the orphaned
material_parameter_cross_node.mjs and 95 Python tests pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W411Z69FC3em9CzpeqEub5
2026-09-23 08:07:14 +00:00
DemonGatanjieu e4dcbfab28 feat(recipe): implement universal semantic compatibility for All-in-One and third-party loaders 2026-09-20 15:46:23 +08:00
DemonGatanjieu 780f60af35 Add scope-aware recipes and model verification 2026-09-03 16:55:11 +08:00
DemonGatanjieu f30f4e7181 feat: add conservative prompt role labels 2026-08-08 15:18:44 +08:00
DemonGatanjieu 1929da70d9 fix: stabilize recipe and node assistant integration 2026-08-07 19:52:43 +08:00
DemonGatanjieu a156701ce4 Fix: Add uncond support for topological tracing and backend dynamic role injection 2026-08-07 19:27:50 +08:00
DemonGatanjieu a849d12bb6 Fix syntax error caused by duplicated function block 2026-08-07 18:44:14 +08:00
DemonGatanjieu 7302532057 Core: Implement topological backward-tracing for positive/negative prompts 2026-08-07 18:31:10 +08:00
DemonGatanjieu d74390b6c5 refactor(recipes): remove save parameter picker 2026-08-04 00:44:10 +08:00
DemonGatanjieu 978e9f7750 Harden recipe save integrity 2026-08-03 03:44:06 +08:00
DemonGatanjieu cc735f29b3 Improve recipe detail readability 2026-08-02 23:02:05 +08:00
DemonGatanjieu 2d0eebcf77 feat: edit workflow recipes with history 2026-08-02 17:47:22 +08:00
DemonGatanjieu 5fb01d1879 feat: bind recipe images and pin parameters 2026-08-02 05:11:24 +08:00
DemonGatanjieu b775058280 feat: integrate recipes with notebooks 2026-08-02 04:58:12 +08:00
DemonGatanjieu a35e1fa463 feat: add local workflow recipes 2026-08-02 04:40:18 +08:00