Checked against the headers of 315 models in ComfyUI-Manager's list: a Hunyuan-DiT
checkpoint and LBM were read as VAEs, SUPIR as a ControlNet, XLabs' Flux LoRAs and
IP-Adapter as diffusion models, a whole CLIP as a text encoder only; also PhotoMaker, LoRAs
of weight differences or OFT, and checkpoints without a VAE. Files two loaders read from
different folders (SUPIR, a whole CLIP) are not sure. A lone drawing model in checkpoints
loads there (the checkpoint loader reads it as a diffusion model). Newly told: diffusers
UNets, Stable Cascade, SDXL T2I-Adapters, RCAN/SPAN/compact upscalers. 301 of 315 now agree.
"Looks like no drawing model" said what it could not tell: now "Kind not told". Kept header
answers carry the rules version and are read again when it changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An Anima LLLite in controlnet is not misplaced while the ComfyUI-Anima-LLLite pack
(which reads it from there) is loaded, and identical copies kept one per loader folder
(controlnet and model_patches) are listed as shared, both in use, not as duplicates to
recycle. An IP-Adapter carrying LoRA layers (the Anima IP-Adapter) is no longer read as a
LoRA. The header cache keeps the new "form" field (older entries are read again).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
prompts (1-8, instead of prompt; at most 16 tries with batch) fills and queues each prompt
in turn with the call's other blanks; the receipts form one run and by_prompt says which
are which. A prompt that cannot be filled or queued stops the rest, the queued ones stay
tracked and submission_error names where it stopped. The run_workflow description is
tightened so the tool list stays within its budget.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each skill the AI fetches with get_toolbox(skill=...) is a "skill" step of its task
(ai_skills.note_use), with the form its advice came in for the canvas's model; the same
advice again before the next run adds nothing. A run's row lists the skills fetched since
the run before it (ai_task_view.skillsBefore). A skill step never names an untitled task.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The prompt_pose skill now comes in the form for the model the canvas's sampler uses:
its drawing model's parameters are counted from the file's header (model_kind.
diffusion_params: safetensors shapes, GGUF tensor dims; a checkpoint's text encoders
and VAE left out), so a compressed GGUF counts like the full model. From 10 billion
(Flux.1, Flux.2, Qwen-Image) the AI is told hands and hard poses come out well and
not to hide or simplify; under it, the clear-pose and optional hand-hiding advice;
when the model cannot be told, both cases.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pose and hands advice for writing prompts moves out of the set_prompt and
run_workflow descriptions into the first skill, prompt_pose (api/skills/). begin_task
lists the skills that are on in a line; get_toolbox(skill=...) gives one; the prompt
arguments only point at it. The tool list is back within its budget (it was 44726 of
44000 characters). The Ways panel lists the skills under the ways, each with a switch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1.5x left the Codex test picture's hand better but still soft; 2x gave
sharper fingers in the same seeds (about 105 s instead of 75 s on a 6 GB
card). The fix-hands way now enlarges to about 4.2 megapixels, never
smaller, at most 2x: reference_blocks.enlargement reads the picture's
size (add_nodes passes picture_size of its input copy). Tried through
AMB on an isolated ComfyUI: 2547x1656, no memory trouble, 2 clean hands
of 4.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A block (detail, want hands) that takes a picture: enlarged 1.5x and
redrawn lightly by the canvas's sampler (denoise 0.4), then every hand
found by hand_yolov8 redrawn at guide 768, denoise 0.45 ("detailed
hand"), saved as hands_fixed. Tried on the Codex test picture on an RTX
4050: the hand pass alone fixed about half the seeds, enlarging first
about 3 in 4; the way built through AMB on an isolated ComfyUI gave 2-3
good hands of 4.
On an Anima model a variant adds the Anima Turbo LoRA (0.7) for 10 steps
at CFG 1, about 75 s; a variant's LoRA missing falls back to the plain
block with a word on what it would do. Its next step tells the AI to
make 4 tries, check the hands itself, retry at most twice, and let the
user pick in a zoomed panel. The Turbo LoRA joins the recommended models.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ui_gallery_viewer.js (8c044d0) imported formatSize from
ui_model_download.js, which leads through the settings page and
browser.js back to ui_ai_workbench.js; with ui_ai_images.js ->
ui_gallery_detail.js -> ui_gallery_viewer.js at the start of that chain,
ui_ai_workbench.js called setMarker before ui_ai_images.js had run, and
the whole plugin failed to load ("Cannot access 'marker' before
initialization"). formatSize now lives in file_size.js, which imports
nothing, and every module takes it from there.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When a video's first frame could not be read (a broken file, no decoder)
the card's thumbnail route served the whole video as the picture. It now
gets the same SVG placeholder with its size as a picture with no card.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The run estimate followed each sampler's size but not what a SaveImage
finally gets: a 5120x3328 sample upscaled 4x saved 20480x13312 (324 MB)
without a word. A save past 64 megapixels now warns on the timeline and
in the AI's run answer, with the PNG size it will take.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A 20480x13312 upscale is past Pillow's pixel limit, so its card image
failed and the catch-all fallback served the 324 MB original as the
thumbnail: the gallery and the AI workbench decoded it every time.
- A picture past the limit is shrunk once by a child process
(huge_picture.py, low priority, one at a time) and cached; a card is
never a large original, one with no card image gets an SVG with its size.
- /anomalous/output_preview gives the viewers the picture or a cached
4096 px copy of a very large one; the viewer (moved to
ui_gallery_viewer.js), the image workbench's stage and the AI pages'
larger pictures use it, with a note and "Open the original".
- The listing carries each file's size (and big ones' pixel size); such a
card says "Very large".
- The browser-side PNG metadata read stops at the image data.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- tags_from_picture: WD14 tagger (the source's model and thresholds) on a
picture the user handed; run_status now carries what nodes showed as words
(texts: a tagger's tags), with a summary and next step for a run that made
words but no pictures.
- Optional nodes: a block node marked optional goes when its pack is missing,
and a link "match|decode" takes the first one there. The four upscales end in
KJNodes' ColorMatch (mkl, the source's) when it is installed; the panel says
"better with" it otherwise.
- LanPaint's next step keeps the prompt about the whole picture; Follow a pose
says OpenPose misreads anime (use control_depth), as the source's author did.
- The directory has a size cap: past it, block names alone, so collected ways
never make begin_task long; shorter headings and few-word lines.
Live-tested on the isolated 8199 ComfyUI: LanPaint (area changed 14.6, outside
0.0, 82 s), tiled 2x (167 s), depth ControlNet (follows the layout), OpenPose
(misreads an anime picture), background removal (8 s), tags (166 s with the
model download), upscale with ColorMatch (73 s).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each block is now api/blocks/<name>.json (nodes, packs, models, the AI's words
and the panel's in both languages), so a way collected later is one more file.
The AI workbench's side column has a Ways view: blocks by job, what each does
and where it came from, greyed with the pack (opens ComfyUI-Manager) or model it
lacks, and a switch (user/anomalous/ai_blocks.json) that keeps it from the AI;
begin_task lists only the blocks on and runnable here, the rest in one line.
New blocks: upscale_iterative (Impact Pack), upscale_two_models ($loader role,
a second loader "like" it), remove_background (inspyrenet-rembg).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A block node can be "like" a role (takes its settings) or "replace" it (its
links, place and settings too; LanPaint's sampler for the KSampler). $save is
the output node the picture reaches, past a stitch. Upscale blocks take an
upscale model this ComfyUI has; control blocks a ControlNet whose base fits the
canvas's model, and the picture to follow copied into the input folder. The
directory is grouped by job, a few words a block, to keep begin_task short.
Drop-down choices are read in both forms of ComfyUI's node list.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
api/reference_blocks.py holds groups distilled from workflows that do
one job well: a repaint that crops around the mark, repaints at 1024
and stitches back (ComfyUI-Inpaint-CropAndStitch), the same with
built-in nodes only, and face and hand detailing (Impact Pack, the
detector models this ComfyUI has). begin_task hands the AI their
directory; add_nodes(block=...) builds one in one call. Its links name
roles web/modules/canvas_roles.js finds on the canvas by their sockets
(the sampler, its decode and save, what feeds an input upstream), so
canvas_wiring splices it into the workflow there; several samplers
need near_node_id, a missing pack names the pack and the stand-in.
The repaint note now points to the block. Checked on the test ComfyUI:
the repaint changed the marked area only, the detailer the face area.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A value of the right type under an unknown name may mean something
else (set_prompt {style: "anime"} is no prompt), so the correction now
takes only the other names light models were seen to write in the tool
exams (name/workflow_name, file/filename/image_name, text/positive,
model/id, node/id); any other name is answered with what the tool takes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A call lacking its one needed argument but carrying one unknown
argument of that type is run with it (open_workflow {name} is
{workflow}), and the AI is told the right name. The timeline names
zoom_image steps; a test makes every tool have a name in both
languages. tool-exam.md records the second exam, all eight tasks
including the repaint one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A question the user began to answer is never answered with the
recommended option on time-out; the AI is told they began an answer
and ends its turn. On the page, what was half typed in a question's
line survives the question being drawn again (another question came,
the AI read an answer), with the cursor; that question stays first in
the strip; a narrow window lights the stage tab instead of taking it
from under the user's typing; Enter that picks an input-method word no
longer sends a stage answer line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gemini 3.8 Flash took seven exam tasks through Antigravity (107 calls, 19
failed, every task done). Nearly all failures were a tool's first use:
empty or guessed arguments. So:
- An argument error lists what the tool takes ("set_prompt takes: prompt
(needed), role, node_id, mode"), and the next call is right.
- One argument name per thing: set_prompt's text is prompt (as in
run_workflow), open_workflow's name is workflow (as in run_workflow).
- A wait over 55 s waits 55 s instead of failing; search_models takes a
model type in the singular too.
- An unread reply older than two hours no longer draws a new chat's calls
into its old task (a two-day-old mark took the first exam task).
The exam doc gets the setup, the Antigravity command line and the results.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Antigravity, Claude Code, Cursor and VS Code load tool descriptions on
demand themselves; looking tools up through Anomalous (tool_help, use_tool)
only doubled that: in one Gemini 3.8 Flash run 18 of 29 calls went to it,
while full-set chats had none. tool_help, use_tool, action_catalog.DAILY,
ai_gates.tool_set and the Gates row go.
An app still holding an older list is now told apart by the list it fetched
last (a fingerprint per app in anomalous/ai_tool_lists.json), so the note
under the task header also covers an Anomalous update.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- An AI app calling by an older tool list (tool_help or use_tool not offered,
use_tool for a tool offered directly, a tool the list lacks) is told so, and
the task header shows how to reconnect until the app fetches tools/list again.
- add_lora / set_model compare the base models on the model line
(model_advice.py; the page reports the line) and add base_model_note.
- get_model gives author_examples (sampler, steps, CFG, size, a LoRA's weight
from the Civitai record's example pictures) and the version name.
- run_workflow says ComfyUI's refusal as which node, what is wrong and the tool
that fixes it (run_refusal.py; mcp_run.js passes the refusal as data).
- Gates "When I don't answer": wait for me, or go with the recommendation once
the waiting time runs out (choices with a recommended option only), handed to
the AI in the same call and shown on the stage and under Decisions.
- A tool budget test (count, size, description length, required arguments) and
the exam tasks with their scorecard (docs/architecture/tool-exam.md,
tools/tool_exam.mjs). The tool set's text recommends Full for Antigravity.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The user took an option for something to select and then pressed "skip"
to confirm; boxes shown open read as fields to fill.
- Questions (stage panels, the strip over the message box): options are
buttons with an arrow under "One press sends it to the AI" and show the
pressed one at once; "Let the AI decide" moves to the question's top
right (the panel title for ask_user); a line of one's own is folded as
"None of these, I'll say it…". The Gates card folds its reason the same.
- A waiting task is one page: the sentence for the AI leads and sticks
under the task header while the page scrolls (the workbench measures the
header); "Say what to do" and the gallery are optional folds that say
how many pictures are in. The sentence has the AI do what the task says,
asking only when it says nothing. The Get started / Put ready tabs and
their words are gone.
- Gates window texts fixed (canvas covers building, lines are over the
message box, "Ask me" named as on the button); run_workflow waits up to
55 s by default, so a quick run comes back with its pictures.
- The UI map counts words the backend names (label_key) as used.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The user's marks are rough. propose_repaint_area takes the AI's area for
them (boxes or ellipses, grown and softened by pixels), draws both areas
tinted over the picture into the task's marks folder and shows them side
by side on a panel (block "area"): the AI's, the user's own, or marking
again, or words on what to change. The picked area is written into the
input folder like the user's own mask (ai_marks.write_inpaint, soft edges
kept) before the answer is recorded, so the AI reads inpaint_image and the
inpaint note with it. Building the repaint stays the AI's: the note names
the usual nodes, no template. Options Anomalous makes carry a page word
(label_key). The panel hint and guide say "Your call".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The daily tool set now also offers tool_help and use_tool, and the
directory marks the tools reached that way; show_panel joins the daily
set. The "lazy" set is gone: a small model spent a third of its calls
looking tools up and never built what it planned.
- Gates window "Waiting for your answer" (1, 3 or 10 minutes): an open
question tells the AI to wait on with get_answers until then, and while
the user types (POST /anomalous/ai_tasks/{id}/typing) until a minute after
the last key. report and show_panel remind the AI to end each round with
ask_user; a question written in a note is pointed to ask_user.
- "Skip this one" is "Your call": the AI decides and does not ask again.
- ComfyUI's own `$$` widgets (the canvas image preview) are no longer
reported to the AI as the user's canvas change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Old toolbar, scan-wizard and workspace labels and a few hints, in both languages; each
checked against the web files, tests and the backend (no t() use, no key built in a
template, no error message used as a key). The UI map's scanner read a quoted string with
an escape ('\n') wrong and missed the key after it on the same line (delNote is used).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The 54 screen words that said 配方 / recipe for a saved workflow say 工作流 / workflow
(the Workflows page, saving and exporting, the activity log, backups, the gallery's keep);
配方包 / recipe package stays the .zip given to others. README and the MCP guide too.
- The Workflows page's empty guide drops its fallback texts: translate() returns the key
when a word is missing, so they were never shown and still said 配方.
- The glossary retires 配方 and recipe; a retired name may list where it is not that name
("配方(配方包、搭配方案除外)"), and {placeholders} do not count.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- tools/ui_map.mjs find <words on screen | key | /anomalous/route | file.js>, read from the code
each time (tools/ui_map_scan.mjs: the words, what each web file shows and calls, its CSS
classes, imports, the backend's routes); build writes the whole map to the untracked
docs/ui-map.md, with the routes no page calls and the words no file uses.
- docs/architecture/ui-flows.md: the hand-written part for the AI workbench (what each part
is for, what a click does, why) and a glossary of one name per thing. The structure check
fails when a word in it is no longer on screen, a file or route it names is gone, or a
retired name is back on screen.
- One name each on the AI page: 素材 (not 材料), 留言 (not 消息), 节点结构 (the / command
too), 连接 for the last AI, 副本 for the task's tab, 撤销; English "Node map".
- AGENTS.md: look a button up with the map before changing it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Marker: "make a repaint mask" becomes How to change it (leave it to the AI, only the
marked areas, the whole picture anew); the AI reads the choice first as the user's, the
timeline row says it, the repaint brush picks "only the marked areas".
- Task list: folded, it stays laid out out of sight and slides in at once from its button
or the page's left edge; redraws make anew only the rows that changed (sync_rows.js).
A picked task shows at once from the copy read before or read ahead on hover
(ai_task_cache.js), then what changed; activity entries follow instead of holding it up.
Stage pictures load as thumbnails first, the file itself only when shown larger.
- Header: "Own tab" is "AI edits a copy ▾", a two-way menu with what each means (kept open
across redraws), and "Show the copy".
- Materials: the Source list lights the hovered row and ticks the one shown (a later rule
had hidden both), tooltips only for cut names, arrows and Enter (ui_ai_facet_menu.js).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each panel's line in the timeline becomes a card: an icon of what it holds,
a line of what is in it, and a solid "Show on the right" button that turns
into "On the right now" while the panel is in view on the stage. A run's
"See it large on the right" uses the same button, and the blue text links
under steps become small buttons with icons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new panel opens the side column on the stage at that panel, even after
the user closed it or picked another view; the AI changing a panel does not.
A switch in the stage's head turns it off (kept on this browser). In a
narrow window it lights the stage's tab instead of taking the timeline's
place; a question still brings the stage forward.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Three or more reads, canvas changes and decisions in a row, two of them not
reads, become one row: how many steps, chips of what they did, the last one
while the AI is at it, and undo for their canvas changes. It opens to the
steps as before, and a jump to one of them opens it. Words, notes,
questions, panels, runs, errors and waiting or running steps stay rows of
their own. The folded rows move to ui_ai_chain.js.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The AI's question waits at least 30 s, so an answer the user gives in
Anomalous right away reaches the same call and the AI goes on without a word
in its chat (Gemini asked with wait_seconds 0, stopped, and the user had to
say "go on"). add_node's description points to add_nodes for a group of
nodes wired to each other.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When the AI is not in a call, a run or a question, the AI workbench offers a
line to copy into the AI's chat, picked by what waits for it: the run that
ended, a reply in Anomalous it has not got yet, else "Go on", and a line
that picks the task up in a new chat. The lines under a finished run's step
move there. The Hand to AI sentence no longer names show_panel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A third choice for "Tools for the AI" in the Gates window. With "On demand",
AI apps are offered only action_catalog.CORE plus two tools of
mcp_directory.py:
- CORE: begin_task, get_situation, run_workflow, run_status, report, ask_user,
get_answers.
- tool_help: the description and arguments of up to three tools named in the
directory.
- use_tool: calls any tool of the directory.
tools/list drops to 11 tools and about 9,000 characters (daily 22,200, full
40,700). With this set the directory begin_task brings names every tool and
says how to reach the ones not listed.
use_tool has no run of its own. mcp_server._call makes the call the tool it
names before anything else, so the user's gates, the timeline's step, the run
watch and the answer are all that tool's; the timeline never shows use_tool.
An unknown name, the card's own tools or wrong arguments come back as tool
errors that point to tool_help.
The default stays Full. Switching back to Daily or Full in the Gates window
undoes this without a revert, and this commit stands alone if it has to go.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In the user's real tasks the AI spent many calls finding its way: reading the
canvas, searching node types, looking at combos and the activity log. The
directory gives it what ARCHITECTURE.md gives the code: each tool offered,
under its stage of the work, with its title. The stages are run, canvas,
models, prompts, combos, pictures, voices, the library, and the task and the
user. Seeing it, the AI can go straight to the tool it needs.
The directory is built from action_catalog's stages and the tool specs, so a
new tool shows up by itself, and a test checks that every stage has a heading.
It lists only the tools offered: about 1,100 characters for the daily set and
2,000 for the full one. begin_task's answer carries it, and so does
get_situation's while there is no task. The server's instructions and
begin_task's note point to it.
retext, the helper that rewrites a result's text from its data, moves from
ai_task_runs to mcp_tools, so both modules share it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Waiting on runs was the biggest share of the AI's calls in the user's real
tasks (85 of 316 run_status calls, about ten per ten-minute run). A new Gates
setting, "Waiting for runs", defaults to "Tell AI when done" (ai_gates.run_wait,
stored beside the tool set in ai_tools.json).
In that mode:
- run_workflow still waits its 15 s, so a short run comes back done with its
pictures.
- Otherwise the answer's note, `next` and the your_run sentence tell the AI to
say the run is going and end its turn, not to wait with run_status.
run_status still honours wait_seconds, so a model that polls anyway is no
worse off than before.
When the run ends before the AI knows, the server marks the step `call_ai`. The
workbench then shows lines to copy into the AI's chat (ui_ai_call.js): "It's
done, take a look", "Again with another seed", "Go on", or "It failed, find out
why". The mark goes as soon as the AI is told, or when a newer run starts, and
the lines go with it. The AI's next call brings the result and the pictures.
"AI waits" keeps the old behaviour. The setting takes effect at once, because
the words are made for each answer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In the user's real tasks, nearly every run ended with get_image_info, then
show_panel, then report: one extra call just to fetch the picture. The answer
that first tells the AI its run ended now carries up to four thumbnails of the
run's pictures (pictures_attached). That answer can be run_status, run_workflow's
own wait, or any other tool's answer.
It happens once per run. status() and news() mark the run when they first tell
its end, and show_pictures, called for every answer in mcp_server, attaches the
pictures to the marked run and clears the mark. Runs told of before this change
carry no mark, so they never bring old pictures along. The done `next` now says
to report with the pictures and to use a panel only to compare or ask. tell()
and show_pictures share _retext.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In one real task the AI built an inpaint branch with 9 add_node and 16
connect_nodes calls. add_nodes takes the whole group in ComfyUI's API form, the
format models know best:
- links inside the group, and to canvas nodes as "#12", with outputs by slot
or name;
- a node's wire_to feeds canvas nodes the way add_node does.
All of it is checked before anything changes. The page lays the group out as
one block in a free spot (canvas_build.placedBlock) and applies it in one
transaction: one Ctrl+Z step, and a failure takes every new node out again
(applyWires now takes several nodes). The answer maps the AI's keys to node ids
and lists what is spliced and what is still unwired.
A splice now uses only an input that nothing else in the plan feeds. A node
whose latent comes from the group, or from wire_from, replaces the sampler's
empty latent instead (replace:true) rather than being fed twice. It is in the
daily tool set.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
run_workflow's blanks were a fixed list (prompt, seed, size, image). Anything
else meant a set_values call per node, or yet another blank. Now `values`, on
run_workflow and on set_values without a node, sets any setting by its name, a
third-party node's too.
- The one node that has the setting gets it.
- When several nodes have it (a hires fix's two samplers), nothing changes and
the nodes are listed, so the AI names one: {"12": {"denoise": 0.5}}.
- One Ctrl+Z step for all of them.
The remaining blanks are roles (which prompt box, which latent), not setting
names. `prompt` now stops when several positive prompt boxes are combined into
one sampler (regional prompts) instead of giving them all one text. A refiner's
own prompt still gets it.
The scalar check moves from mcp_canvas_edit to mcp_fill (flat_values), which
both use; set_values keeps its argument order.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GPT's auto-wiring (4afee83) was checked on the isolated test ComfyUI. A splice behind
a node, a new branch, the branch choice and the loop check each took one call. A
ControlNet still failed both ways, because its positive and negative have the same
type as a sampler's. A LoRA after a checkpoint wired only its MODEL line.
- Same-type sockets of the same name pair up (positive to positive).
- wire_to into an input that is already fed puts the new node in front: the old
source now feeds the new node's matching input. A ControlNet before a KSampler
is 6 links in one call; a LoRA before the sampler and both prompts is 5.
- insert_after splices every type a node passes through.
- add_node errors call the new node #new instead of #-1 and say how to pick sockets.
- frontend.md: the canvas_wiring paragraph moves from Verification to the
mutation rules.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>