Step 6 of the lower-barrier plan. The Gates window opens with a Safety level row: Careful asks
before everything and allows only the ready-made ways' nodes; Balanced is exactly today's
defaults; Hands-off downloads without asking, builds blueprints at once and takes the
recommendation when the user does not answer in time. Moving files asks in all three. A level
sets the five gates, the node and route rules, no_answer and ai_plans.auto() in one write
(ai_gates.LEVELS, set_level) and leaves the canvas tab, run waiting, answer time and privacy
alone; level() names the one the settings match, "custom" once a row was changed by itself.
GET /anomalous/ai_gates gives level, POST {level} applies one. Privacy stays out of the levels.
Written by Gemini 4 Hydrogen (xhigh) in Antigravity from a brief the user approved, in a
separate worktree; reviewed, tested and checked live on the test ComfyUI before merging.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Step 5 of the lower-barrier plan: notes, never paragraphs on the page. The first time the workbench
shows a task, once its window has settled, the spotlight tour walks through New task, Connect an AI,
the gates, the list, a task's menu, the timeline and the message box (ui_ai_tour.js); the home
section's "How it works" runs it again. What only shows up after the AI has done something gets
one line with Got it the first time it appears: under a run's verdict, beside the undo of the AI's
canvas changes, under a private task's message box with Hide. Seen ones are remembered in this
browser only.
The tour engine now skips a target folded to nothing (a tab not shown) and lights only the visible
part of a tall one (the timeline), cut to its scrolling box and the window. The task menu button
has a class of its own to be found by.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The user found the AI features hard to start ("即使是我也不敢轻易上手。怕错"). The home page now has a
section under its cards: the AI app that came last (and a warning when it holds a short tool list
that cannot take a task handed over here), then six cards: Try it once (a small picture from the
official text-to-picture example), Run my preset (a saved workflow and one of its presets, with
what to change), Draw what I describe, Change a picture (picked from the gallery), Draw in privacy
mode (the field is the gist that goes to the AI) and Explain my canvas (the canvas hand-off).
A card opens a sheet first: what happens on Start, what stays as it is or what the AI does not
get, what to mind. Start makes the task through startTask, which now sets switches on the new task
(a new tab; privacy for the private card), and shows the sentence for the AI as every hand-off
does. A card's tags name only what Anomalous makes sure of (new tab, no tool saves workflows, the
original picture kept, privacy's filter, undo, downloads asked only while the gates ask), never
what rests on the AI obeying. GET /anomalous/ai_starters (api/ai_starters.py) gives the saved
workflows with their presets, the download gate and the last app's tool list. No new MCP tool.
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>
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>
- 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>
Opening, closing and changing pages jumped; now they take a short
transition. Styles alone do it, since a dozen modules open the window:
anything leaving display: none starts its animation. The rail's highlight is
one piece that slides between the entries. Going between docked, floating
and full window lays the page out once and moves only its picture, where the
docked rule used to animate the width and lay it out on every frame.
Only opacity and position move, and all of it stays off under reduced motion.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A node's "Mark this state" keeps the serialized canvas as a mark in a bar
under it. A mark's number goes back to that state, each has its runs, and
seeds are Random or Locked (one per round, shared by the marks; a fixed
seed alone would come from ComfyUI's cache). Run checks every mark with
validate_prompt first, then compiles detached copies with their seeds
written, so the canvas and its seeds stay as they are.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AMB only uses: training goes to its own plugin. This takes back the
record of what works (api/ai_evidence.py), the training network and
rounds (api/ai_training.py, ui_ai_network*.js, the round form), the
Gates' record switch, the ways' order by record and the external_skill
field of log_outside that only fed the record.
Kept, as part of using AMB:
- the user's word under a finished run, now only told to the AI
(ai_run_control.set_verdict, ui_ai_verdict.js);
- the Gates' "Custom nodes: only the ways'" rule;
- a picks block left to the AI takes its recommended picture.
Reverts 73518dc, 67bf5b2, 6647b05 and 49d05cf, then puts those three
back with tests in test_ai_run_watch, test_ai_gates and test_ai_panels.
Full suite and structure check pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The side switch's training network now opens over the whole AI
workbench: numbers on top, a filter by kind, a graph or a table with a
cell per pair, and a detail column listing each run of a pair (model,
AI app, judgement, pictures, task), a base model's models and the
training rounds. New GET /anomalous/ai_training/runs; the network data
adds each model's runs and the rounds.
Not yet verified in the browser: Esc after routing it through the
browser's back buttons. Full test run pending.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The AI workbench's side column gets a training network view: base models
on the left, ways, skills and node packs on the right, a line for each
pair that ran, coloured by how it turned out (the user's word first, else
the AI's, dashed) and as thick as it ran often. A node or line shows its
record, last pictures and the pairs not tried yet in a card kept in sight.
"Start a training round" picks a skill (the AI's prompts with its advice
and without) or the ways of one use, up to four models and the pictures
each, and makes a task for the next AI (api/ai_training.py). Each run that
ends fills the trial it fits by what it used; the AI is told the next trial
and, once a model's trials are done, to compare them in a picks panel with
its own pick marked recommended. The record keeps the AI's pick apart from
the user's, and a picks block left to the AI takes its pick.
Tests: tests/test_ai_training.py; full suite and structure check pass.
Checked on an isolated ComfyUI: a round started from the view, four real
runs matched to their trials with the next one told each time, the
comparison panel and the user's pick reached the record and the graph.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Files a scan found on the same Civitai model page (metadata model_id; never a similar
file name) share one card in the model list, the newest version shown or the one picked
last (kept in this browser). The card's version label opens the shared action menu to
switch. The details list the versions here under the name, and "All versions on Civitai"
(GET /anomalous/download/versions, this computer only, asked only when pressed) lists
the page's versions to open or download beside this one, checked by SHA-256, a taken
file name getting the version's name added.
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>
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>
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>
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>
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>
Anomalous sees only the calls made to it; an AI app's own commands and
scripts are invisible, and one rewrote a result six times. When the AI
calls, Anomalous now looks at the top of the output and input folders
for pictures no ComfyUI run saved and pictures rewritten in place since
its previous call (by the files' own times, bounded, never in the
background; new pictures wait while a prompt runs), shows them as an
"Outside AMB" step and tells the AI with its answer (ai_outside.py).
log_outside is the AI's own word on a command or script it ran.
The connect guide gains rules to paste into the AI app's own rules:
use AMB's tools, change pictures only by running workflows, ask and
explain in AMB, and say what was done outside it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One picture in a step filled the timeline's width as a wide grey box
around a small image. The cards now keep to about 300 px each, from
the left.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A progress block on an AI panel is the AI's own number and never moves.
An AI drew one at 12% during a run, came back after the run with a new
panel and left the old bar standing, which read as live progress. Once
the task goes past a bar without an update (a run ends, a later panel or
note, the task ends), the stage now draws it grey and says when it was
written; update_panel records when a panel's blocks changed. The tool
text tells the AI a run's real progress shows already.
run_status before any run answers state "none" instead of failing, so a
task no longer shows a failed step for asking.
In a wide window the task column keeps its content to about 880 px in
its middle, as chat apps do, instead of stretching across the window.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A task now opens at its newest step instead of where the previous task
was scrolled to, and a timeline read at its foot follows new steps
whatever the task's state (before, only while a step was running).
Read further up, it stays put; a round button over the message box
leads back down, with the count of the AI's new steps on its corner.
It replaces the "new steps below" pill (ui_ai_newest.js).
The side column's grip lay over the timeline's scrollbar, so grabbing
the scrollbar often resized the column instead. It now has a gap of its
own beside the scrollbar, drawn as three dots.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When the AI page is lower than SHORT_PX (a window not maximised), the task's title, state,
time and steps, the task it goes on from and the tools share one line, the room around them
shrinks, the message box's hint shows only for a failure (its words become the input's
tooltip) and the waiting page's picture is smaller: about a fifth more room for the timeline.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ui_model_retype.js: on a model's page, and from the toast after importing one model: where it
is, what its header suggests (GET /anomalous/placement/look; picked and marked when it can
tell, nothing guessed when it cannot), every type with its loader, where it goes, moved as
Tidy moves (covers and notes along, never over a file). Kinds and the move's error words are
shared (model_import.IMPORT_KINDS, model_placement.moveErrorText).
- model_import.move_into: a copy to another drive is compared with the original at its start,
middle and end, besides its size, before the original goes.
- model_placement: the model a request names is resolved in one place (_source), which also
refuses a negative root.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ui_ai_now.js: over the message box, a run's progress with stop, the AI's step still going, a
gate to allow or refuse there, and the AI's open question with its options as buttons (own
words or skip too; several picks and pictures lead to the stage). progressWords is shared
with the run card; the panel's and gate's answers are exported for it.
- ui_ai_drop.js: pictures dropped on the box or pasted are kept in output/ai_inbox
(POST /anomalous/ai_pictures/upload, ai_pictures.save_upload: read as a picture first,
25 MB cap, never over a file) and attached; ComfyUI output pictures dragged in attach as they are.
- Long AI notes are folded to their first lines with "Show all".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The message box stays at the bottom of the task column however the timeline scrolls. Over the
input, what the message carries (ui_ai_tray.js): pictures with ✎ to mark up (sent on their own)
and ×, chips for what "@" names; gallery pictures are attached, not typed in as "@name". Beside
it the gallery and materials buttons with their counts; the input grows (Enter sends,
Shift+Enter breaks the line) and pictures alone may be sent. "New steps below" appears when the
AI adds steps while the user reads further up; one's own message scrolls into view. Pictures a
message carries show as small image cards with the usual tools. The ready page keeps the big
gallery and what is ready; the box below takes its pictures.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From a hover audit of the AI workbench and the other pages: picked gallery pictures get a thick
glowing frame, tint and big tick; the picture button lights while open and counts the message's
pictures; weak hovers (materials rows, folded reads with a chevron, gate options, mode switch,
source menu, send and copy buttons, model tabs, set-up button, activity rows) are clear. The
Stage button opens an empty stage that says what goes there; "Hand to AI · 0" is disabled with
nothing picked; move_model's step names the file; a one-node change shows one "find"; the task
link chip keeps its size.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A waiting task now switches between Get started and Put ready at the top. Put ready shows the
gallery as a big searchable grid feeding the note below (click to add or drop a picture), the
note (the message box, moved in), the materials button and what is ready so far. The gallery
grid is split out of the message box's picker so both use it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A task waiting for an AI gets a "Put things ready" step: the message box (gallery pictures,
"@") moves into it beside the materials button, and what the user put ready is drawn there;
the AI gets it all when it takes the task. Pictures a message names show as thumbnails.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- model_kind: Anima LLLite, Qwen-Image block-wise and Z-Image Fun ControlNets (and other
ModelPatchLoader files) go to model_patches, not controlnet; import and Tidy follow.
- api/mcp_model_use.py: search_models / get_model say which node types load each model, or
where a misfiled one belongs; move_model moves it there behind a new "files" gate (asks by
default, never overwrites).
- An empty drop-down in add_node says ComfyUI found no file; the task tab switch is no longer
logged as the user's canvas change.
- The folded task list stays while the pointer is in the box around its button and the list.
- The message box's picture button picks gallery pictures; "@" offers the gallery's newest and
searches it as you type.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The whole gap left of the card catches the pointer, top to bottom; the
handle shows faintly at rest and the edge lights up when pointed at.
Focused, the arrow keys resize it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Per sampler: the model and LoRAs feeding it, its prompts, where it starts
(an empty canvas, a picture, or the part before, upscaled) and where it is
saved, "same as part N" when nothing changed; every name finds its node.
Simple (the default) and Full switch in place, kept on this browser.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A task's pictures no longer in the output folder are marked gone when the
task is read and shown as "Picture deleted" (timeline, results strip,
stage panels and picks) instead of a broken picture; "@" no longer offers
them. The AI hears plainly that the user deleted one, and a tool reading a
gone picture says it may have been deleted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new task an AI begins while on another, or one the user starts while
looking at a task, keeps it as its "from". Links under the title lead both
ways, the list marks follow-ups, the user can link one by hand or take the
link off (never a loop), and an AI beginning a follow-up hears what was
decided in the task before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The AI records what was settled with log_decision (a card on the timeline:
what, why, what was left out, who decided, the steps it is about); the
user's own choices in Anomalous count as decisions too (panel answers,
gates, materials, the canvas mode, stops). A Decisions view in the side
column lists them all, links each to its step and notes work done since
the AI's last one; begin_task repeats them to an AI picking the task up.
A step's words move to ui_ai_step_body.js.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"@" lists the task's pictures, combos, models, workflows, prompts, node
packs and node types; what is named rides with the message and the AI gets
each in full (pictures attached with what made them). "/" lists commands
that act at once (stop, undo, side views, new task, canvas mode) or fill in
words to send. get_toolbox shares the lookup.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Instead of a strip to scroll sideways, one "Source: All" button opens the
list of sources (or types), with a search when it is long; a pick, Esc or a
click elsewhere closes it, Esc without closing the browser.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A pack shown in the nodes' second column has a bar to pick it whole
(packs, by folder). The AI gets its node types in get_toolbox and finds
them first; with "only" every node of the pack is allowed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A short panel lists many: badge or small cover, name, where it is from and
the tick per line; the filters become icons beside the search. Switching
between the side panel and the window redraws as lines or cards.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The side column is a card of its own, narrower by default, its width set
by dragging its left edge (kept; double-click resets; the timeline keeps
its room). The task list folds from a title-bar button and peeks over the
page while pointed at. In the docked materials picker a card's detail opens
from its info button, not on hover.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The stage, a run's node map at full size (pick the run; each run step has
"see it large") and the materials picker share the side column; the switch
sits in the window's title bar on the AI page, the shown one again hides the
column, and each view keeps its state. The task header stays on top while
the timeline scrolls.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every answer, message, set of marks and handed picture shows a pill:
sent and waiting, then the AI has it with the time it did (delivered_at).
Panel questions can be skipped; the AI reads skipped: true.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Each run keeps its shape read from the prompt ComfyUI queued (ai_run_map.py): boxes by role
with their settings, typed links, plumbing wired through, and what changed since the task's
run before. The run step shows a one-line summary, the changes as chips and the boxes (top
down, fitted to the column, each locating its node); show_run_map puts it on the stage.
- By default the AI works in a tab of the task's own (ai_task_canvas.py, mcp_task_tab.js): the
open workflow is copied before its first change, the tab is brought back (a click on
ComfyUI's tab) before later changes, reads and runs, and the user's tab stays untouched.
Per-task switch in the header, default in the Gates window; the AI is told once.
- Output pictures can be handed to the task an AI is on (gallery card menu, the inspector's
✦), with the user's words: the AI gets them attached with what made them (ai_pictures.py).
search_images(with_pictures) attaches the first six.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A stop button on a running run (timeline, and beside the run-status button), and stop_run for
the AI: only this run's prompts leave the queue or are interrupted; the step ends "cancelled"
and a user's stop reaches the AI as a "stop" message (ai_run_control.py).
- The run's progress carries ComfyUI's console since it began (the bar's note, models loading),
time left and per step, and VRAM; once queued, each sampler's working size is estimated from
the prompt, with warnings for an upscaled picture sampled again, a size past the card and a
huge decode, for the user and in the AI's run news (ai_run_watch.py, ui_ai_run_live.js).
- The materials picker opens as a side panel that leaves the page usable (the full-screen
browser makes room), expands to the large window and back, and remembers the choice.
- Esc closes the run-status card only (data-anomalous-escape).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>