"Hand to AI..." in a node's and the empty canvas's menu opens ready wishes (run 4
and pick, find what is wrong, explain each step, add an enlargement and face and
hand fixes; explain or tune a node) and the line to change. It goes to the task an
AI is on as a message, or starts a task about the canvas: the task's reads, runs
and copy start from that tab even with another in front. A node's saved pictures
can go along, and a failed run offers "Ask the AI" with ComfyUI's words. The AI's
job sheet now follows the task's tab like a run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Chinese prompt on an English-only model (SD 1.5, SDXL, Pony, Illustrious, Flux,
Chroma: marked "reads": "English" in model_profiles.json) draws as if it were
nearly empty: in an exam the pictures followed nothing of it. The AI's run and job
sheet are refused once and told to write it in English; called again unchanged
they run. The job sheet's Start warns once and runs on the second press. The once
is kept apart for the AI and the user.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Flash ran five prompts one call at a time and took wait_seconds for the rest
between pictures. run_workflow's title and description now name the job sheet,
wait_seconds says it is no rest, the manual has a job_sheet topic, and a tool's
name asked as a topic points to the tool. With a sheet, prompt is the prompt of
rows that have none instead of an error. Both exams are in tool-exam.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A card on the canvas (right-click > Job sheet) takes many prompts, a line each,
the runs of each, a rest between pictures and the same seeds if wanted; with no
prompt it runs the canvas as it is. The page runs it from copies of the workflow
kept at the start, as saves run, so the canvas stays as it is; pause, go on and
stop from any page, a failed or interrupted run pauses it, a reload goes on and
another page takes over a sheet whose page is gone. run_workflow(sheet=...) lets
an AI hand over prompts or settings by name; the sheet is that call's run step.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From six Gemini 3.8 Flash runs of one question (Harem 1.5, then a Kirazuri v4 Tile redraw, then
faces and hands), recorded in tool-exam.md:
- begin_task's ways and the empty-canvas hint name add_nodes(plan=[...]); a route without its
models and "several samplers" say what to do instead.
- A plan is two steps or more (no one-step probe card for the user); a model may be named by its
name when only one main model has it; a way for a handed-over picture (fix_hands) gives way to
its use's way that goes on from the step before.
- The user's rule is kept in run_workflow: a plan's first run is three bases, and the whole is
refused once until they pick (an AI told "go on without" calls again).
- canvas_roles takes a "...model" path past size-bound patches (LLLite, ControlNet, T2I-Adapter):
face detailing after a Tile redraw took the LLLite-patched model and crashed ComfyUI.
Last run: plan, build, three bases, pick, the whole from the picked base, no crash; 27 calls,
4 failed (each an empty first try).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
add_nodes(plan=[...]) takes the big steps of a picture (use/want as for add_nodes, a model for the
first step or a block's own loader). api/mcp_plans.py resolves them to ready-made blocks and
shows a plan card (panel block "plan", only Anomalous makes it). The user drops steps but the
first, swaps a step's model for one of its family listed with it, and says build, or writes what
to change; api/ai_plans.py turns a build into the steps kept and keeps "build without asking"
(ai_plans.json, POST /anomalous/ai_plans/auto). Built by block_chain.py on a new tab, with
base_only previews next when there is a second step; a card answered after the AI stopped
waiting is built by add_nodes(route=<its panel id>). web/modules/ui_ai_plan.js draws the card;
the AI apps' own card leaves it to Anomalous.
Found in the live check and fixed: the steps kept did not reach the AI (get_answers hands over
named fields only); a test now goes through the real hand-over. Checked on the test ComfyUI: a
four-step plan on two Anima models, step 3 dropped, built as picture, Tile redraw and upscale,
each on the step before's picture.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gemini 3.8 Flash on the isolated test ComfyUI after read_guide: a how-to question (7 calls, 0 failed), a picks panel built from the guide's fields (14, 1: a guessed topic name), standard question 3 on scenery (18, 2). 39 calls, 8% failed, no detours (1.63's standard exam: 16%). A wrong topic now lists the topics, so no second call is needed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
read_guide (api/mcp_guide.py) hands the AI one topic at a time: the README's parts between
<!-- guide:name --> marks (both languages, same names; the Chinese one carries the words the
Chinese window shows), Model Check's rules by section, and the fields of show_panel's blocks.
Long topics come in parts that fit an answer. Nothing is written twice: the topics are the
README's and the rules' own text.
To make room for what 1.64 adds next: show_panel names its blocks and the guide has their
fields (a bad block's error points there), update_panel's details moved there too,
download_status became run_status(downloads=true), track_run's text is shorter. The tool list
went from 43,957 to 42,574 characters with one tool more (53 tools); show_panel no longer needs
a longer-description exception in the budget test.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Viewers could not find the plugin after installing. README install step 2 now has a picture
(both languages) of the cube button at the canvas's top left and the C menu path
Extensions -> Anomalous Model Browser -> Open / Reset floating entry position, and says how
to make the entry easier to spot (labeled pill, large, or the top action bar); a line under
the language links points there.
Taking the picture showed the cube covering the C menu's "New" row: it sat at z-index
2147483000. It is now 1000: over the canvas and its tool layer (999), under the top bar
(1001), menus (PrimeVue, about 1800) and dialogs. Checked on the test ComfyUI.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ui_model_guide.js (above the description, out of ui_detail.js): Civitai's trigger words,
else the words the LoRA's file suggests (dashed, said to be a guess), the settings its
author's example pictures used, and for a diffusion models file of a known family the text
encoder and VAE it needs with the file of that name found here; one GET
/anomalous/model_guide per page, a newer page cancels it.
- The models page's search finds the header words too.
- Checked on the isolated test ComfyUI with stand-in files: words read now and after an
offline scan, three example pictures summed up, Anima's two parts found by name.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- header_words.py: modelspec.trigger_phrase, else the tags most training pictures share
(ss_tag_frequency, generic ones left out); the scanner keeps them as
anomalous_header_words when Civitai gives no trigger words, metadata gives headerWords,
model search finds them.
- model_kind: Flux Schnell told from Dev (no guidance_in), Z-Image from Lumina 2 (caption
embedder width, a GGUF by parameter count); RULES 3 so kept header answers are read again.
- api/model_guide.py + model_profiles.json: GET /anomalous/model_guide for the model details
(example settings, header words, the text encoder and VAE a diffusion models file needs,
found by name), and get_model's header_words and usage for the AI.
- model_advice.example_settings gives the author's example settings as values;
author_examples says them in words as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ComfyUI listening on its LAN address only (#26): the browser on the same computer
comes from that very address, so it was taken for another device. A request whose
peer is the server's own end of the connection, naming that same IP, is local now;
DNS rebinding and proxy headers are still refused.
Opened from another device (#25), the settings page said the proxy's format was
wrong and that Civitai could not be reached, when the server had refused the
request. It now says so, and refusals point to the View only chip.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The README now says in both languages that fingerprints come from this
plugin, what Model Check still does for a workflow without them (a file of
the same name to confirm, the workflow's own links, ComfyUI-Manager's list),
and has a button to the rules page, now also in English. The rules page
names ComfyUI's own model links. Also corrected: interface scale (not font
size), what Import keeps and replaces, the Gates list, and the one-server
note on cloud servers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Four pictures (Chinese and English) from the isolated test ComfyUI with
scenery only: a Gemini task in the AI workbench, and three saves of one
canvas with the saves bar. Taking them showed the AI workbench stage and
message box and the saves bar staying in the old language after a switch
until a reload: they are drawn again now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- run_workflow takes a gallery picture as its workflow (mcp_fill.opening
says what a name opens, for open_workflow too); a picture's workflow
opens with an id of its own, and the tab's mark goes into the workflow
before it loads, so ComfyUI finishing the tab does not drop it.
- With ComfyUI open in two browser tabs a task's actions were split
between them (one opened the task's tab, the other could not find it):
the page that did the last action gets the next first now, another
only when it is gone (mcp_bridge.py, pages keep an id of their own).
- describe_canvas on a big canvas: titles off, then nodes as a line each
with their settings, so every value stays readable.
- search_models names the models that did not fit; begin_task's tool
directory goes by name alone when the answer would be too long.
- ask_user refuses a "test" question with made-up options too.
- Exam round recorded: question 2 with nothing filed away, a big canvas
read right in 3 calls, question 3 in 12 calls.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- An answer past Antigravity's size is filed away unread (eight LoRA
searches in the exam): search_models answers small (loaders once,
four trigger words, a LoRA's author weight); describe_canvas gives a
big canvas's last nodes a line each; mcp_fit.py keeps any other list
answer within the size and names what it left out.
- An empty canvas: run_workflow, describe_canvas and get_situation say
to open a workflow first; get_image_info says a picture's workflow
opens with open_workflow.
- ask_user does not put a "test" question to the user; a task's picture
count counts what its runs made.
- AMB failed to load now and then: ComfyUI loads every file at once and
ui_ai_workbench.js set ui_ai_toolbox.js's sideHost before it was made
when the toolbox file ran first. Connected on first draw now;
tests/load_order.mjs runs every file first.
- input_facts moved to api/picture_mask.py to keep mcp_tools.py short.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
To change a picture from the gallery the AI had to open the saved card
and set back, one by one, the model, LoRA and prompt the picture had
been made with (8 to 12 calls in the exam). open_workflow now takes a
picture's name too when no saved workflow has it: the server checks
the picture is in the output folder and carries a workflow, and the
page reads it from the PNG and opens it in a new tab, without the
marks of the tab it ran on (the card that tab came from, which
run_workflow would mistake it for, and its group of saves). The tool
list is 18 characters shorter than before.
Retaken with Gemini 3.8 Flash, questions 3 and 4 only: question 3 on a
changed picture went from 28 calls (7 failed) to 21 (4), opening the
picture's own workflow; written into docs/architecture/tool-exam.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gemini 3.8 Flash took all 8 standard questions the 1.63 way (the
question in the task's message, the new task page's sentence to the
AI, a blank canvas each): 128 calls, 16% failed (21% last time), no
detours. Written into docs/architecture/tool-exam.md.
- A task's picture count counted a picture twice when the AI's report
showed the one its run had made; pictures are counted once each now.
- After a switch of language the AI workbench kept rows drawn in the
old one until a reload: syncRows makes a row again when the language
it was drawn in is not the one shown.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A run with Gemini 3.8 Flash asked for picture to picture and built it node by node, 13 failed calls on the way, with an official example ready:
- list_workflows was 23,630 characters on 17 cards, 21,033 of them settings. Antigravity files an answer over about 4,000 away, unread. A list of more than 3 now goes with name, route, tags and short notes.
- Examples showed only when no saved workflow matched, and only by English words: 图生图 found nothing. They are always named now, and found by their Chinese titles, img2img, txt2img and inpaint.
- Every card's route line was empty, and cards_of found nothing, since c84b596: _list_recipes leaves the graph out, and the tests fed cards that had one. Both ask for it now, with a test on a file on disk.
A waiting task the user wrote to also takes its name from what they wrote, instead of the AI's "take the task".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Going back to a save left the last run's picture on the output node, so the canvas and the picture told different stories.
- api/workflow_saves.py keeps what each output node made, previews too, the newest 16, and read_group gives them as `outputs`.
- ui_snapshot_bar.js puts them on the nodes through the tab's changeTracker (store, restore): no `executed` event, so no plugin takes them for a new run. Several runs sit on the node as a batch does. A node the save has no picture for goes empty; Load Image's own picture stays (snapshot_plan.outputsAt).
The lit number went out every other time with a Preview Image on the canvas, and an empty undo step came with it: a loaded workflow serializes a little differently from its file, and a node gains an empty widget list when it shows a picture. The number now goes out only when the canvas really changed (withoutEmptyValues), and those differences take no step.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Current node now reads what combos hold for the node's type: every box of
a node structure, by name, and a plain combo's prompt on a prompt box. They
get a chip of their own, a press goes to the combo, and the values go in
only on the user's press, as with the other sets (AD-021).
The rail's tools go by how often they are used: Current node, Model Check,
then the scan, and the tour follows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Types go by their usual names, base model chips narrow the list, the
version stands apart from the name, and a model's versions are one card
whose version opens the list to show another; a pick goes with it. The
grouping, the families and the type names are the Models page's own.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Anima loads through other nodes than a checkpoint, so none of the examples
could open on it. Two passes now comes in three versions: SDXL / SD 1.5,
Anima on ComfyUI's own nodes, and the recommended Anima held by Tile, the
way's tested values, kept in step by a test. The own-nodes version redraws
at 0.35: at 0.5 the shapes began to move with nothing holding them.
The window shows plans, versions and notes. A version that lacks a pack
or a model says what and has no Open button; an AI only gets those that
can run here. The layers of cards, examples, ways and skills are written
down as AD-025.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ways: "Use it this time" in the Ways view, for one task. It joins the
task's picks as a new kind, the AI is told, and add_nodes builds that way
for its use whichever one the AI asks for. "Only" lets in the nodes a
picked way builds.
Examples: text to picture, two passes, picture to picture and repainting
an area, on ComfyUI's own nodes. One card, first on the Workflows page,
opens them in a tab of their own. The files name no model or picture; a
checkpoint and a picture that are here are filled in when one is read.
list_workflows gives them to an AI when no saved workflow fits, and they
open and run by name like saved ones.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It said "waiting for an AI" three times and kept two folds that did what
the message box does. Now it is the sentence and its Copy button, in the
middle of the column; what to say first and pictures go in the message
box, whose words say so. The connect card comes first until an AI has ever
come, and is gone after that. The wish line, the big gallery fold and
what only they used go with it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new picture puts itself first in its line, so a press on a picture
ended on another one and was no click. While the main button is held on
a button of the list, what comes waits until the press and its click
are over.
Tested with a real mouse on an isolated ComfyUI: a press held until a
new picture came opened the pressed picture 4 times of 4 (0 before), and
16 of 16 long presses during runs answered (13 before).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When a count's save failed the box kept what was typed, with only a
console warning, while Run went by the stored count. The box now goes
back to the stored one, a box being typed in too, and a toast says why.
Tested with a real mouse on an isolated ComfyUI, the save refused and
the server unreachable, on the bar and on the Saves page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Follow-ups hang one step in under the first task of their line, so the
list shows what goes on from what; a filter's tasks still show alone. Each
row has the head's menu, without opening the task. Removing a task joins
those after it to the one before. The pick list now stands over everything
at the place the menu opened: the head is drawn anew under an open menu.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The click can come before the answer to a count typed just before it,
and all three Run buttons held the saves as they were drawn: a save set
to 3 runs ran once. Run now waits for the counts on their way and reads
the group as it stands at its turn, in one place for all of them.
Tested with a real mouse on an isolated ComfyUI, the answer held back
400 ms: the bar, a part and a card each queue the new count.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A part redrew on new elements each time a count was answered or a run
ended, so a press on the page lost its click and a count being typed
lost its focus. settle moves to ui_dom.js for both; a card is kept for
its save, and a picture line stands while its pictures do.
A press on a picture just as a new one reaches that line is still lost:
the line shifts, and another picture is under the pointer by the mouseup.
Tested with a real mouse on an isolated ComfyUI. tests/snapshot_bar.html
now covers the page and fails 5 checks on the previous code.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every redraw replaced the whole row, and the browser sends no click to
an element that left the page during the press. Three things redraw in
that gap: ComfyUI's graphChanged at mouseup, the answer to a count, and
a run ending. The last also wiped a count being typed. Update the
elements in place, a save's part only for that save.
Tested with a real mouse on an isolated ComfyUI: 19 flows, 5 of them
passing before the fix. tests/snapshot_bar.html fails 7 checks on the
old code.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Inserting took a round per LoRA. The picker now gathers them: click to add,
click again to drop, the number on a card is the order they go in. They go in
as a chain of ComfyUI's loaders, or through one Power Lora Loader or Easy-Use
stack where installed, all or nothing and as one undo step. Third-party nodes
change height just after they appear, so they are placed, and the step taken,
once they have settled. New nodes stand in one column and the view goes to
them when a crowded canvas leaves them out of sight.
Fixes the CLIP line going missing for a LoRA inserted before a sampler with a
LoRA already there: that LoRA counted as a prompt node, so there seemed to be
two CLIP sources.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drag the right edge from 480 up to leaving 240 of the canvas; the width is
remembered and a double-click restores 660. The limits live in the CSS, so
they hold when the browser window shrinks too.
Going through every page at 480 turned up what this needed:
- Workflow cards shrank into strips instead of the list scrolling: a card
clips its content, so plain grid rows fit the height.
- The Prompts page's own columns beat the narrow stacked rule, leaving half
a page empty, in a narrow floating window too.
- The Models header pushed the close button out.
- The Workflows bar only wrapped on a small screen, not a small window.
- The AI tabs kept a gap for their hidden icons and wrapped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With the list a drawer over the task, Esc closed the whole window while the
drawer was open. It now closes the drawer, and the window on the next press.
The task's back button left the Esc list: from the task it would only reopen
the drawer, and Esc could never reach the window.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Filling the page, the list read as a page of its own rather than the records
of conversations. It now slides over the task shown, which stays visible and
dimmed beside it; a click there goes back. With no task it still fills the
page. The welcome page moved to ui_ai_ready.js to keep the workbench under its
size limit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With no room for the side column the AI page showed a row of bare icons in the
title bar, and two tabs that changed under the user. It now shows labelled tabs
over the task, the timeline and every view, kept in the head while the
timeline scrolls, and words that named a right side say what they do. One
function gives both strips, in place of tabBar.
On a wide window the Prompts page left two thin boxes over empty space: the
boxes now share the room, side by side and full height, with wider cards. The
Saves page puts its cards side by side like the workflow cards and says how
many canvases and saves there are.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ComfyUI imports every script under web/ on its own and at once, so any module
of the big import cycle can run first. ui_ai_workbench.js wrote to a const of
ui_ai_results.js as it loaded, which failed when ui_ai_results.js or
ui_ai_step_body.js was entered first, and the whole plugin went with it until
a reload. The value now lives in a module that imports nothing, and
tests/module_cycles.mjs refuses the pattern.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Walking through the AI workbench as a user: the task head held nine loose
controls that wrapped to four or five lines with the side column open. It is
now two lines whatever the width, with rename, privacy, links and remove in a
menu. The stages and what a task made share one line over the timeline, a
failed step is a mark instead of red text, New task opens at once, and a
missing label in the Ways panel is filled in.
The walk also caught AMB not starting at all on one page load. ComfyUI imports
every script under web/ on its own and at once, so any module of the big import
cycle can run first; ui_ai_workbench.js wrote to a const of ui_ai_results.js as
it loaded, which failed when that module was entered first. The value now
lives in a module that imports nothing, and tests/module_cycles.mjs refuses
the pattern.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A walk through the whole flow, as a user would, showed what felt wrong.
The folded bar floated over the canvas: it is now a handle on the canvas's
bottom edge. The bar lives in the canvas's panel, so the logs stay uncovered
and it wraps before going under ComfyUI's canvas tools; it holds the newest
six saves, the rest behind a button to the Saves page, instead of growing
into a block. A lit number now means the canvas stands at that save, going
dark on any change or undo. Words float over the bar and leave with the runs,
and on the page a kept card is a toast and runs show on their own save, so no
button moves under the pointer. Removing a save tells the next one what it
changes now, and the Saves view says the way back to the cards.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A save's line had a scrollbar under its pictures, and long change words had
one too. The line now holds what fits and folds the rest into a last +N tile,
refitting when the window changes. The tile, or the save's menu when all fit,
opens all its pictures as the gallery's own cards, in the list's place until
Back or Esc. Cards take their pictures from an option, so stepping, delete
and compare stay inside the save; the Gallery page passes nothing and works
as before. Change words stop at four lines, the rest on hover.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pictures dropped to a line of their own under the save's words, and a
thin line was all that told one save from the next. Each save is now a card:
what changed, its runs and buttons on the left, its pictures in a line on the
right, going under them only in a narrow window. A picture opens View
Parameters too, and the arrow keys step through all of that save's pictures.
The part sets its own text color, which light themes were missing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Presets, combos and Add to saves took more to keep sensible than they gave,
so a save now only becomes a new workflow card and only the canvas makes one.
The panel above the bar moves to the Saves page, a part for each canvas, open
or not, with each save's pictures and its runs: the whole group in order, or
one save alone. Running moves to snapshot_run.js for the bar and the page;
what is clicked goes in in click order, and closed canvases run too.
A run taken off ComfyUI's queue is now forgotten at once, so "runs to go" does
not stay wrong for a day. A first save on an unsaved tab now reaches ComfyUI's
draft of it, so a reload right after keeps the tab's saves on it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>