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>
Codex's hand tests (2026-10-29): at denoise 0.55-0.75 the repainted hand
filled its whole mark and came out too big, at 0.4 it kept its size. The
crop-and-stitch block now repaints at 0.45 (the built-in one at 0.5), and
its next step and the inpaint note tell the AI to mark tightly, keep the
strength low, make 4 tries and let the user pick.
Slider and picks blocks take a zoom {x, y, w, h}: every picture shows
only that part, enlarged, from the picture itself. The checks of block
parts move to ai_panel_parts.py (ai_panels.py was at the 600-line line).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
run_workflow's image filled a LoadImage with "name.png [output]"; once
ComfyUI's run history is gone, its newer frontend marks that value as a
missing file though LoadImage reads it (Codex found this on 2026-10-29).
An output picture is now copied into the input folder (content-named,
transparency kept) as the gallery's menu already does.
get_situation's canvas errors also carry what the page's missingMedia
store marks missing, so the AI sees the red error the user sees.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
run_workflow's batch queued the same prompt N times when the sampler's
seed was held "fixed": ComfyUI ran it once and the user had one picture
to pick from. While a batch is queued a fixed seed counts up instead
(the native control moves it per prompt); afterwards the control and the
seed are as they were.
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>
The panel's text for each of the 18 blocks (about, zh and en) is one short sentence; where it came from and how it was tried stay under Details, the AI's instructions (after, notes) unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The two new uses get their headings (换背景·人物不变, 换模型重画); each block's source, how it was tried and its models sit under Details, so a row reads as its title and a line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 18 blocks are grouped into 7 uses (a block's "job": repaint,
new_background, upscale, refine, follow, detail, process); a block that is
not its use's default has a "want" word (best, 2x, pose, ...).
add_nodes(use=…, want=…) has reference_blocks.pick choose the first by rank
this ComfyUI can run (packs and models present, not turned off), the block
taking a second picture when one is given; block= by name still works.
begin_task's directory is a line a use with its wants, the rest by what it
needs ("LanPaint: repaint best"), so it no longer grows with the blocks and
the word budget tiers are gone. Tried live: use=new_background with two
pictures built place_in_scene.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Its CheckpointLoaderSimple takes any SD 1.5 or SDXL family checkpoint; a model in separate UNET, CLIP and VAE files (Anima) does not fit it, which the block and the changelog now say instead of "another family too".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
begin_task's text was at its 4000-character limit with every new block. The
directory now shortens in steps: every word while it fits (625 characters),
then the blocks' names with the missing ones grouped by what they need
("LanPaint: inpaint_lanpaint"), then names alone. With every pack in, the
names (about 400) leave begin_task near 3850 even with the stale tool list
line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
restyle reads a handed picture's outlines with ComfyUI's own Canny, holds
the layout with the union ControlNet (canny mode, 0.7 to 80% of the steps)
and redraws the whole picture in the prompt's new style. Tried on an RTX
4050 6 GB with SDXL (Illustrious) 832x1216: at denoise 0.8 it only got
lighter, at 1.0 it became a watercolour with the layout held, so 1.0 is
the default; about 41 s.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
refine_other_model redraws the made picture at denoise 0.4 with a second
checkpoint of its own (any family: its own CLIP and VAE, prompts copied from
the first, LoRAs added onto it with add_lora) and saves it beside it
(prefix refined), as the reference workflow's refiner keeps a loader and
LoRA stack apart. Tried on an RTX 4050 6 GB, Illustrious then NoobAI at
832x1216: about 66 s for the whole run, the composition kept, the style the
second model's.
A block node may be "like" a path ("$sampler.positive"): it takes the
settings of the node feeding it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
place_in_scene takes two pictures (add_nodes' new scene argument, $scene in
a block marked "scene"): the character is cut out (inspyrenet-rembg), the
place scaled and cropped to its size (GetImageSize, ImageScale), the
character pasted on (ImageCompositeMasked) and everything else redrawn at
denoise 0.5 with the edge grown 6 px, so shadow and ground meet it while
the place keeps its look. Tried on an RTX 4050 6 GB with SDXL (Illustrious)
832x1216: about 40 s.
The blocks' short words are shorter so begin_task stays under 4000
characters.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
change_scene cuts the character out of a handed picture (inspyrenet-rembg),
inverts it and redraws only the rest at denoise 1.0 from the prompt's new
scene; GrowMask lets 6 px of the edge be redrawn for the seam. Tried on an
RTX 4050 6 GB with SDXL (Illustrious) 832x1216: about 30 s, the character
kept, the forest replaced by a night street.
A picture handed to a block may be written "name.png [output]" as Load
Image shows it. Two block descriptions are shorter so begin_task stays
under 4000 characters.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The delete-character change was already on 1.62; its CHANGELOG lines move to the v1.61.1 section.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Interface 18 shipped in Anomalous_TTS v1.1.0 without the route, so the
button now waits for 19 (v1.1.1) instead of failing on a click.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Anomalous_TTS issue #2: there was no way to remove a character. Each card
now has an orange Delete character button (also on broken characters);
after a confirm, the node (interface 18, local only) moves the character's
folder to the Recycle Bin.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Interface 18 shipped in Anomalous_TTS v1.1.0 without the route, so the
button now waits for 19 (v1.1.1) instead of failing on a click.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Anomalous_TTS issue #2: there was no way to remove a character. Each card
now has an orange Delete character button (also on broken characters);
after a confirm, the node (interface 18, local only) moves the character's
folder to the Recycle Bin.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With the AI workbench the rail had ten entries for nine number keys, so
the audio gallery had none. It is now the third tab of Voices (Characters,
Voice-over, Audio); 9 reopens Voices on the view used last, and a test
keeps the rail within nine entries.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
new_workflow / add_node checked a LoadImage value against the input folder's files only, so
an AI could not build an img2img on a picture it had just made (and nothing at all with an
empty input folder). Names ComfyUI annotates ('x.png [output]') now pass; ComfyUI checks the
file. CHANGELOG also notes the rail labels fix.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ce35145 removed 'models' and 'gallery' as unused, but the rail (labelKey) and the page
titles (TITLE_KEYS) name them by key. A test now checks every such key in both languages.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- api/block_models.json: the 15 models the ways recommend, each with its
Hugging Face / Civitai / GitHub links, size, SHA256 (all checked against the
sites), licence and folder. A block's "models" names its recommended ones; the
Ways panel ticks those here (by name, or by size for a renamed copy) and
downloads a missing one in a click with model_download.downloadFrom, its hash
checked.
- A block's "tested": the card (RTX 4050 laptop, 6 GB), sizes and a whole run's
time, shown in the panel and told to the AI with the block (answer.tested).
- color_lineart gets an Anima variant with Anima's lineart LLLite.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- upscale_tile: the 1.25x upscale with a tile ControlNet holding the redraw
(the source's 0.6 to 80%), so it can redraw at 0.5; NoobAI's tile model for
NoobAI/Illustrious, the union one for SDXL, Anima's tile-repair LLLite on
Anima (slow on a 6 GB card, the AI is told to say so).
- color_lineart: a line drawing, inverted to white on black, steers a lineart
ControlNet; its lines are left as a preview.
- A union ControlNet gets SetUnionControlNetType for what it follows.
ControlNets not scanned yet take their base from their folder or name.
- MissingModel: a block's model not in ComfyUI's lists makes add_nodes read
them anew once (a model just downloaded into a subfolder), then try again.
- The upscales prefer the least enlarging model that reaches their size.
Live on the isolated 8199 ComfyUI: NoobAI tile upscale 77 s, Anima tile 710 s,
lineart colouring 34 s (the union model found after the lists were read anew).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OpenPose misread anime characters; DWPose (torch detector: the onnx one found
nobody with this onnxruntime-gpu) reads a single anime character down to face
and fingers. A crowded, heavily stylised picture can still come out empty, so
both control blocks keep their map as a PreviewImage the AI sees in
run_status's previews, and their next step says what to do when it is empty.
Live on the isolated 8199 ComfyUI: DWPose followed a hand-behind-head pose
(64 s); the three-elf picture stays unreadable for both readers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
279ad22 keys recovery by target, so a first try with missing or misnamed
arguments (a light model's {} call) recorded no target and a corrected retry
could never match it: the task stayed marked "a step failed". Such a failure is
now resolved by any later completed success of the same tool; a failure with a
target still needs that target's success.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A block's "variants" rebuild it for the canvas model's family
(reference_blocks.build, which also returns its roles and next step): on an
Anima model control_depth and control_pose patch the model with an Anima
ControlNet-LLLite instead of a ControlNet, and inpaint_crop_stitch adds Anima's
repaint LLLite on the crop; the AI still only names the block. Base packs are
checked before the page is asked which model the canvas has.
Live-tested on the isolated 8199 ComfyUI with an Anima model: repaint changed
the marked hand (43.9) and nothing outside (0.0); depth steers gently, so the
Anima next step says the prompt has to agree with the picture.
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>
A Flash exam showed the crop-and-stitch repaint painting a whole new
person into the hand: the context margin was 1.2 where the distilled
workflow used 2.0, and the sampler kept denoise 1 and the whole
picture's prompt. A block can now set settings on the canvas nodes it
finds (roles: the sampler's denoise 0.75, in the same Ctrl+Z step),
and the block's answer and the repaint note tell the AI to set the
prompt to what belongs in the area. Retake: a natural hand.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From a Flash run: after report(done) it showed a before and after and
asked whether the user is happy, and both went into a new task. A
panel, question or note within 5 minutes of the AI's own report(done)
now opens that task again (unless the user started or wrote to
another); a look still leaves it ended. "Just done" now means ended
by a report, not that the report is the last step.
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>
From the user's first real run: the finished task showed as failed for
one wrong argument corrected on the next call, a look the AI took
right after report(done) made an empty one-step task, and a task the
user started 18 hours earlier still read "waiting for the AI" though
it had lapsed after 12 hours. Now only failures the AI did not get
past mark a task, a read-only call within 5 minutes of report(done)
goes into that task (it stays ended) unless the user started or wrote
to another, and a task the user starts waits until an AI takes it.
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>