The proxy help, the SOCKS warning, the refused-connection reason and the
Civitai scan hint used the slang word 梯子. Plain 代理软件 says the same and
is safe to show in videos and screenshots on Chinese platforms.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The rule that hides the list column while a workspace is open matched
the workspace panel's style attribute inside :has(). Chrome then treats
every inline-style write on the page as a possible change and restyles
the whole page, so extensions that move their buttons every frame took
a large workflow's canvas down to 2-3 fps. The container now gets an
anomalous-workspace-open class from a MutationObserver on the panel's
style (every module opening a workspace sets its display), and the CSS
keys off that class.
Found, measured and fix proposed by Lindemellis in issue #22.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Bilibili user's scan said Civitai could not be reached while their
browser reached it through a VPN app: the plugin's urllib requests only
use HTTPS_PROXY or the Windows proxy, not a PAC script or a browser-only
proxy.
net_proxy.py: the proxy address saved in api/config.json (NETWORK_PROXY)
that every request of the plugin goes through (Civitai, Hugging Face,
GitHub, translators), handed to the scan process as HTTP(S)_PROXY; empty
keeps the old behaviour. It also names why a request failed (timeout,
refused, dns, ssl, reset, proxy, http:<code>).
Settings -> Network has the address (SOCKS and malformed ones refused
with what to write) and Test connection, which calls 1.60's
/anomalous/civitai_check (brought here unchanged, now through the proxy
and with the failure's name). A scan that loses Civitai records why
(civitai_error) and the scan page and activity log say it with what to
try.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Outputs window (showGeneratedGallery) sits inside the browser with only an id, so the Esc
rule did not see it as a layer: Esc pressed the details' back button and left the window open
over the list. Esc now hides it, as its close button does.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A video card plays its video muted while the pointer is on it, or while in view when
Settings -> Video covers says always play (the model covers' rule). The <video> exists only
while playing, so a page of videos decodes nothing at rest; it lets clicks and drags through.
- The viewer sizes a video to the window (keeping its shape): 480p outputs looked small.
- Double-click in the viewer toggles full screen (checked afterwards so a browser that does it
natively does not toggle twice).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dialog's close event came half a second late in testing: the sound went on, and a video
opened again in that time was stopped. The x, a click beside it and Esc (cancel) stop it now;
close only catches a close nothing else saw.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Follow-up to PR #21:
- The header shows All / Pictures / Videos beside the search (only once the output folder has
a video) instead of twelve chips; the formats move to Settings -> Gallery, stored as hidden
so a format added later shows.
- GET /anomalous/gallery_images lists pictures only unless media= says otherwise, so the recipe
cover picker and the MCP image search are unchanged; hide= drops formats (jpg covers .jpeg);
has_videos tells the gallery whether to offer the switch. .avi is left out (Chrome cannot
play it), .avif is a picture format in the filter too.
- The viewer stops the video however it closes (Esc included).
- Video cards have no View parameters, star or right-click menu, and the workbench steps
through pictures only.
- 图库, not 画廊; the 1.59 CHANGELOG entry credits cocorang and wkdtjs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From cocorang and wkdtjs. The PR's own "v1.58.2" CHANGELOG section is left out (1.58.2 shipped
other changes); the 1.59 entry and the follow-up fixes come in the next commit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
comfyui-browser toggles its own window on a plain b (hard-coded, no
setting), so with both installed one press opened one window and closed the
other. Shift+B keeps the B and leaves comfyui-browser alone (it checks for a
lowercase b). Tested with both plugins loaded.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The user's two wishes for v1.58.2:
- Esc on a page one level down (a model's details, one combo, one recipe)
presses that page's own back button; on any other page, Workflows and
Combos included (they are layers, but look like the other rail pages),
it closes the browser. The model details' back button gets a class on
the line that makes it, so ui_detail.js does not grow.
- The default shortcut is B, like ComfyUI's single keys for its side panels.
Ctrl+Shift+M is taken by Chrome and Edge (switch profile) before the page
sees it. ComfyUI keeps shortcuts the user set; typing in a text box is
left alone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The user's two wishes for v1.58.2:
- Dragging a gallery picture fades the browser out, as for the other cards
(anomalous-material-dragging), so the canvas and the node under the
pointer take the drop; it comes back on dragend.
- Insert as a Load Image node closes the browser and the node follows the
pointer until a click puts it down, Esc takes it off: a combo's Put on
canvas (notebook_canvas.js's followPointer, now exported).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A "tut01/name.png [output]" value ran, but ComfyUI's check before a run
only finds output pictures in this session's history, so an older picture
was flagged "a required media input has no file selected" (seen on the
user's library). The picture is now uploaded through /upload/image like a
file dropped on the node; ComfyUI keeps one copy of the same picture.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From a Bilibili comment (2026-10-13):
- Esc closes the top layer: a dialog or menu (the plugin's alert and confirm
now close on Esc, as OK / Cancel), else the Workflows / Combos workspace,
else the browser. One capture listener decides before the layers act, so a
dialog closing on the same Esc still counts as above. The shortcut and the
Extensions entry toggle the browser.
- A model's file card has Show in folder: POST /anomalous/open_model_folder
(api/model_folder.py) takes type, folder index, subfolder and file name,
never a path, and opens Explorer / Finder with the file selected; a POST,
so local_guard keeps it to this computer. The card moves out of
ui_detail.js into model_location.js.
- A gallery card's right-click menu (gallery_card_menu.js): Insert as a Load
Image node reads the output file in place ("name.png [output]"), and View
Parameters.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found while recording in English: picture details showed "20 步" and
"定位模型", and the activity log said "Changed 1 things". Picture
details' last fixed Chinese strings (steps, Show model, copied JSON, two
empty notes) move to locales. formatTranslation learns {count|one|other},
and every English "{count} <plural noun>" uses it (49 strings; names like {engine} or {node} are left alone); two
sentences whose verb followed the count are reworded. The voice guides
name the TTS node by its English title, Character Speech (GPT-SoVITS).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The key handler ignored every <input> as a text field, so once a node's
checkbox under All parameters was ticked it kept the focus and the arrows
and A / D did nothing until a click elsewhere. Only text entry (text inputs,
textareas, contenteditable) keeps the keys now. In since 2026-09-04.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MCP now uses local_guard.is_local (one local check). A backup upload
request that is no upload answers 400 instead of 500. tests/test_local_guard.py.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With ComfyUI started with --listen, other devices could use most of AMB's
actions: delete and rename models, save and delete workflows and prompts,
start downloads and scans, export a backup of all data, translate with the
user's key, change settings, switch the plugin version. A probe of all
routes as a LAN device found 9 of 112 refusing.
api/local_guard.py is one middleware in front of every /anomalous/ route:
anything but GET answers only this computer unless it is a read sent as POST
(OPEN_POSTS); a GET is open unless it is more than a read (LOCAL_GETS:
backup file, GitHub releases, local folders). Local = loopback peer, no
proxy headers, loopback Host (DNS rebinding is refused too). Refusals are
403 local_only with a bilingual message; GET /anomalous/access lets the page
show a "view only" chip (remote_view.js). AGENTS.md rule 4 now names it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A model Civitai has no record of now has its safetensors header checked (model_identity.
safetensors_damage: too short, header longer than the file, not JSON, or a tensor ending past
the file's end; only the header is read). Such files get the unmatched reason "damaged": a red
badge on the card, a line in the details, a warning on the scan page (the summary counts them)
and first place in the unmatched list, with advice to download the model again.
Tests: header cases, a scan telling a damaged file from a whole one; the scan report fixtures
are whole safetensors files now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After 90 seconds closed the model grid is released. Reopened onto Current node or Prompts (a node selected on the canvas), nothing redrew it, so pressing Models showed an empty page. Showing the models now redraws an empty grid.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Opening a workflow on the canvas hid the workspace without restoring the page under it, so
opening the browser again showed an empty page. It now only hides the browser; the Workflows
list stays in place.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ComfyUI keeps widget values by the root graph's id; a picture's workflow laid on a
detached graph under the open canvas's id shared and overwrote the canvas's values.
detached_graph.js gives the copy an id of its own; image_keep and recipe_save use it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Same fixes as feature/next 99576e6, brought into v1.58.0 (the user fixes the
released line directly while it has few users):
- Current node's model picker repaints the chosen card in place instead of
redrawing the grid, which scrolled back to the top.
- The classic combo editor no longer saves when its bilingual tags are shown nor
once per translated tag; one save follows the last translation.
- A long activity before/after pair is cut around its first difference.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Current node's model picker redrew the whole grid to mark the chosen card, so
choosing one further down scrolled back to the top. The cards are repainted in
place (paintCard) instead.
- The classic combo editor saved when its bilingual tags were shown and again for
each tag's translation as it arrived: a long prompt wrote the combo dozens of
times in a second (34 note_save entries in one user's log). Rendering no longer
saves and the translations share one save half a second after the last. Its
prompt placeholder moves into locales.js (no inline language branch).
- Activity values are capped at 400 characters from the start, so an edit late in
a long prompt logged identical before and after. A long before/after pair is now
cut around its first difference (test included).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Home's feedback band ends with "⭐ Star on GitHub" and Settings -> Help and feedback
has a "Star it on GitHub" row; both open the project page in a new tab
(feedback.js openRepoPage). No pop-up, no reminder and no request is made: the
page opens only when pressed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- CHANGELOG: ui-shell's v1.58.0 Beta block kept as it is there; next's own sections
move to a new v1.59.0 Beta heading (model downloads, backup, share codes, recipe
packages, node combos, MCP, light theme, opening by node, header search, LoRA
insertion, DeepL key, tests; "Ctrl+Z after a scan" under Fixes).
- README badge v1.59.0 Beta.
- What's new guide (new id 2026-10-downloads-and-backup): downloads from Model Check,
backup and share codes, node combos, light theme, MCP.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- CHANGELOG: Unreleased becomes v1.58.0 Beta (2026-10-09), its entries grouped by
subject (layout, keeping results, prompts and Current node, Model Check, scanning,
deleting, memory, activity log, voices, fixes); no entry dropped. Stale wording
fixed: the rail's real order (no toolbox), no material workspace, no help page,
Activity canvas entries do have Undo, combos instead of prompt notes.
- README: changelog badge v1.58.0 Beta.
- What's new guide: the five steps are the release's main changes (rail and Home,
☆ keep and combos, Prompt Studio, Model Check, voices); the model-types,
activity and memory steps are gone (Activity is named in the layout step).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The voices page keeps the node's status for a minute. On a fresh install
the first status said the storage place (models/gpt_sovits) was missing,
so "Import character" refused with "存放位置不能写入" until the cached
answer expired, although the folder existed by then. Before refusing, the
import asks for the status once more. (Anomalous_TTS now also creates the
folder when it starts.)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings stage 1 into stage 2: the gallery drag fix and the change that
follows Anomalous_TTS interface 13 (no server path picker, no storage
change or move, folders shown with the node's settings file).
Conflicts: the picker CSS, the storage-change activity label and its
locale keys are dropped; stage 2's model download and backup entries stay.
tests/tts_setup_api.mjs now checks the pretrained download route instead
of the removed storage and library routes, and that no export sends a
path on the computer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018P2T2R7TFbJsc3C9maCD8B
Anomalous_TTS no longer takes a folder or file path on this computer from
a request (ComfyUI-Manager review of the node): the storage place, other
character folders and pretrained sources are set only in its settings
file, and imported files are always uploaded.
- GPT-SoVITS settings shows the storage place, other places and package
sources without change, move or remove buttons, and names the node's
settings file (status.settings_file) with a copy button and how to edit it.
- The import window drops "from this computer": no server path picker
(ui_tts_path_picker.js is gone), no local folder scan or local clip
preview; a very large upload is confirmed instead.
- tts_setup_api.js loses the removed routes; formatSize moves there.
- The storage-change activity entry, unused locale keys and picker CSS go.
Verified: tools/check_structure.mjs; tts_setup_api in Node with fetch
stubbed; the settings card, batch hero, add menu, file sources and player
rendered with jsdom and stubbed ComfyUI scripts. Not run in ComfyUI.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018P2T2R7TFbJsc3C9maCD8B
Save as combo now keeps all picked nodes but subgraphs, with the links
between them. Model drop-downs and text boxes stay the slots; nodes
without slots are listed in the editor under "Nodes put back as saved"
with their values and go back exactly as saved. Inputs fed by links from
unpicked nodes are stored in structure.open, and the save dialog, the
editor and the card say which ones to wire after putting it down. Cards
of combos without models name their nodes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chrome adds a dragged <img> as a file, and ComfyUI prefers that file to
the link: since the gallery shows WebP thumbnails, a drop on the canvas
loaded the thumbnail (no workflow) as a Load Image node. The card is the
drag source now, so ComfyUI fetches the original PNG.
Picking a picture near the end of the details rail loaded the next page
and rebuilt the rail, which scrolled down again from the top. The new
thumbnails are appended instead, and clicks read the current index.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chrome adds a dragged <img> as a file, and ComfyUI prefers that file to
the link: since the gallery shows WebP thumbnails, a drop on the canvas
loaded the thumbnail (no workflow) as a Load Image node. The card is the
drag source now, so ComfyUI fetches the original PNG.
Picking a picture near the end of the details rail loaded the next page
and rebuilt the rail, which scrolled down again from the top. The new
thumbnails are appended instead, and clicks read the current index.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Grey secondary and hint text is darker in the light theme. Labels and
buttons laid over pictures (model card names, recipe cover labels, the
gallery's View parameters button) keep the dark tokens, including
ComfyUI's palette variables, so their text no longer turns dark on a dark
backing. Prompt role badges, the red close crosses and the voice import
button get colors that read in every theme.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>