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>
35 KiB
界面地图:点哪里、去哪里、为什么
这份是界面地图的手写部分,只写代码里看不出来的东西:每一块是干什么的、点了以后发生什么、为什么这样设计、同一个东西统一叫什么。 具体在哪个文件、哪一行、调哪个接口,不要在这里找,直接问代码(永远是最新的):
node tools/ui_map.mjs find 屏幕上的字 比如 find AI 改副本:哪个文件画的、样式在哪、调哪个接口、后端哪个函数
node tools/ui_map.mjs find /anomalous/ai_tasks 这个接口由谁处理、前端谁在调
node tools/ui_map.mjs find ui_ai_marker.js 这个文件显示哪些字、调哪些接口、被谁用
node tools/ui_map.mjs build 写出 docs/ui-map.md:按页面列出全部文件、文字和接口(不进版本库)
写这份文档的规矩(node tools/check_structure.mjs 会检查):
- 「」 里只放屏幕上的原字(中文界面),一个字都不能差;太长的句子可以只写开头,结尾加 …。界面改了字,检查就会报错,提醒你回来改这里。
- 文件名和接口用反引号,比如
ui_ai_task_canvas.js、/anomalous/ai_tasks/{task_id};不存在了检查也会报错。 - 最后的“统一叫法”表:一个东西只用一个名字。表里“不再用”的词,只要还出现在界面文字里,检查就报错。
AI 工作台
三栏:左边任务列表,中间一个任务的时间线,右边侧栏。放不下侧栏时(侧边停靠、窗口窄;侧边停靠的宽度拖窗口右边缘调,最窄 480,每个页面都要在这个宽度下能用)标题栏的图标开关不显示,改成任务上方一排带字的标签:「时间线」和各个侧栏,一次看一个,切换都在这一排。再窄一些(侧边停靠就是这样),任务列表是从左边盖上来的抽屉,后面露出当前任务:一看就知道这是会话记录,点露出来的部分或按 Esc 回到任务;没有任务时列表铺满。
左栏:任务列表(ui_ai_task_list.js)
| 看到的 | 点了以后 | 后端 |
|---|---|---|
| 「新任务」 | 马上开一个任务,显示“等 AI 接手”,要做什么在那一页写(可以不写);下一个来调用的 AI 直接接手它,不会接在旧任务后面 | POST /anomalous/ai_tasks |
| 「连接 AI」 | 弹出连接说明:地址、复制给 AI 的那句话、各个软件怎么加(ui_ai_connect.js);地址上面选给 AI 哪些工具:全部工具 / 跑图精简 / 我选的,「我选的…」按类别勾选后「保存」,地址跟着加上 ?tools=…(ui_ai_tool_set.js) |
GET/POST /anomalous/ai_tool_sets(只在保存时写) |
| 「关卡」 | 顶上一行「安全级别」(「谨慎」「平衡」「放手」,改过下面某一行变成「自定义:你单独改过下面某一行」),一次性设好下面这些开关;再往下是 AI 做哪些事要先问你(改画布、用显卡、下载……),还有 AI 怎么等你回答、怎么等跑图(ui_ai_gate.js) |
/anomalous/ai_gates |
| 「全部」「进行中」「等你回答」「出错」 | 只筛这一栏,不改任何东西 | 无 |
| 一个任务 | 中间显示它。看过的、鼠标停过的马上出来,再悄悄补上最新内容(ai_task_cache.js) |
GET /anomalous/ai_tasks/{task_id} |
| 任务行上的 ⋯ | 鼠标移到任务上才出现,当前任务一直有。菜单和标题栏的 ⋯ 一样(ui_ai_task_menu.js),不用先打开这个任务 |
POST /anomalous/ai_tasks/{task_id} |
一条线上的任务排在一起:后续任务缩进一层挂在最早的任务下面,链再长也只缩一层,最早的任务上写「共 {count} 个」。整组排在它最新动静的那一天下面,别的日子的任务在时间前面写上自己的日期。点了筛选就不分组,符合的任务单独排,带「↳ 后续任务」。从列表移除中间的任务时,它的后续任务接到它的上一个任务上,线不断。
收起:标题栏最左边的按钮(「收起 / 展开任务列表…」)。收起后列表仍在左边排好、藏起来,鼠标碰到这个按钮、或者从页面往左移到最左边缘,下一帧就滑出来;离开后 0.35 秒收回,点了任务马上收回。
为什么:列表每 5 秒刷新一次,只重画变了的行(sync_rows.js),所以滚动位置不会跳、鼠标下面的行不会闪。
中间:任务的标题栏
| 看到的 | 点了以后 | 后端 |
|---|---|---|
| 「AI 改副本」 / 「AI 改当前画布」 | 打开二选一:「改副本」(先把当前工作流复制到新标签页,AI 只改副本)或「改当前画布」。点开才换,不会点一下就悄悄切换 | POST /anomalous/ai_tasks/{task_id}(canvas) |
| 「切到副本」 | 切到这个任务的副本标签页,并显示画布(mcp_task_tab.js) |
无 |
| 「撤销画布上的改动」 | 按操作记录把 AI 在画布上的改动一步步撤销(canvas_undo.js) |
无 |
| ⋯ 里的「改名」 / 「从列表移除」 | 移除只删这条记录,图、画布、工作流都不动 | POST /anomalous/ai_tasks/{task_id} |
| ⋯ 里的「打开隐私模式」 | 这个任务的图不再发给 AI;开着时标题栏多一个「隐私模式」,点它关掉(ui_ai_privacy.js) |
POST /anomalous/ai_tasks/{task_id}(privacy) |
| 提示词框“画面大意”旁和隐私任务留言框里的「藏」 | 先选中几个字再点:这几个字 AI 只拿到代号,其余照常看(ai_hide_mark.js) |
随回答或留言一起交出,ai_sealed.seal_marked |
| 关卡窗口最下面的「暗房助手(拓展功能)」 | 「检测本地模型」找这台电脑上的 Ollama / LM Studio,选一个模型后点「就用它」,「不用了」关掉(ui_ai_darkroom.js) |
GET/POST /anomalous/ai_darkroom |
| ⋯ 里的「发给 AI 了什么」 | 隐私任务才有:列出 AI 每次调用发来的参数和 AMB 回给它的文字,能搜一个词看它出没出去过(ui_ai_sent.js) |
GET /anomalous/ai_tasks/{task_id}/sent |
| 标题栏下的黄色提醒「隐私模式只管 AMB 发给 AI 的内容…」 | 隐私任务的 AI 软件能自己读硬盘时出现(ui_ai_privacy.js 的 privacyReach) |
任务记录里的 reads_disk |
| ⋯ 里的「模型代号对照」 | 隐私任务把模型名藏起来后才有:列出 AI 说的 [M1]、[M2] 各是哪个模型(ui_ai_privacy.js 的 modelTokens) |
无(任务记录里的 sealed) |
| ⋯ 里的「接着哪个任务…」 | 把这个任务接在另一个后面,两边都显示链接(ui_ai_task_links.js) |
POST /anomalous/ai_tasks/{task_id}(from) |
AMB 更新以后,AI 软件还拿着旧的工具列表来调用时,标题栏下面出现一行黄字「AI 软件拿的还是旧的工具列表,会多走弯路。请重新连接:Antigravity 重启一下,或在它的 MCP 设置里把 anomalous 关掉再打开;然后开个新对话。」,AI 那边也会收到同样的提醒(mcp_directory.stale,按每个 AI 软件上次取的列表比对)。AI 软件重新取工具列表(tools/list)后这行自动消失。
标题栏右上角的一排是侧栏的开关:「展台」「节点结构」「决策」「素材」「成果」(ui_ai_side_views.js),同一时间只开一个。
标题栏固定两行:名字和工具,下面是任务信息和前后任务的链接。不常用的都收在 ⋯ 里(ui_ai_task_menu.js)。侧栏打开、中间变窄时,状态和「切到副本」只留图标,名字放不下就省略,不把工具挤到下一行。
时间线上面一行:这个任务走过的阶段(点了跳到那一步)和这个任务出了什么。AI 排了任务单时,跑图那一格写“任务单 6/10”。
AI 交过蓝图时,下面多一行:开头一个小标签(「蓝图」;还在等你点头时是「蓝图 · 等你点头」,你要它改时是「蓝图 · 你要改」,点了跳到蓝图卡),后面是蓝图的每一步:第一步、「挑一张小样」、后面几步,带着模型名。做完的点亮,正在做的闪,等你的黄框,还没做的是虚线框(悬停写「还没做」),没挑小样就跑了整条时「挑一张小样」划掉(「跳过了」)。点一步跳到正在做它的那次运行。这一行全靠 AMB 从蓝图卡和之后的运行里看出来,AI 不用多做什么;问不问你都一样显示。
为什么:用户要随时知道 AI 走到哪、后面还要干什么。只多一行,不另开地方;AI 没交蓝图就没有这一行,AMB 不替 AI 猜它的打算。
中间:等 AI 接手的任务(ui_ai_ready.js)
「新任务」之后、AI 还没来时,中间这一页只有一件事:「把这句话发给你的 AI」和「复制这句话」。
- 想先交代的话、要给的图,都放最下面的留言框,它的提示写着「可以先交代几句,比如:用樱花 LoRA 出三张图让我挑」。发出去的列在那句话下面,AI 接手时一起收到。
- 从来没有 AI 连过时,最上面先是「先把 AI 连上 AMB」和「查看连接方法」:没连上的 AI 看不懂那句话。连过以后这张卡片不再出现,要连别的 AI 走左栏的「连接 AI」。
为什么:以前“等 AI 接手”说了三遍,下面还有“写一句要做什么”“从图库挑图”两行,和留言框是同一件事,连过 AI 的人也一直看到“第一次用?”。现在一页只留一个动作,要交代的事只有留言框一个地方。任务名由 AI 接手时起,想自己起就用 ⋯ 里的改名。那句话不叫 AI 一接手就停下来问你,而是照任务里的交代做,没交代才问。
AI 问你的问题(ui_ai_panel.js、ui_ai_now.js、ui_ai_gate.js)
展台里的选择题、留言框上方的提问条、关卡卡片都按同一个做法:
- 选项是一按就发出去的按钮,右边有箭头,上面写着「点一个就发给 AI」;点了马上变成选中的样子,再显示“已发送 / AI 已收到”。
- 「让 AI 定」放在问题的右上角,是一个虚线小按钮,不跟选项挤在一起,免得被当成“确认”。
- 自己写的那一行默认收起:「都不是,我自己说…」,关卡卡片上是「说说想怎么改…」,点了才出输入框。
- 写了一半的回答一直留着(只留在这个页面里):AI 又问了新问题、读走了另一个回答,问题重画时字、光标位置和选区都还在,那一行也不会收起;展台和底部提问条同步同一道题的草稿,刷新只把焦点还给原来正在编辑的位置;这个问题一直排在提问条最前面。窄窗口里你正在打字时,新来的问题只点亮「展台」标签,不把你切过去。
- 只有真按键才算“在打字”(每几秒告诉一次服务器):停手一分钟以后照常算时间,光标停在框里不算。动手写过回答的问题,到时间也不会按推荐的替你选,AI 停下等你。
为什么:看到一个框,人就以为要填;选项和下面的按钮排在一起,人就以为要先选再确认。写到一半的话被清掉、被切走,或者人走开了被替你选掉,都比多等一会儿糟。
蓝图卡(ui_ai_plan.js)
AI 想用几块现成做法一步步画一张图时,先在展台上放一张「蓝图」卡:上面写着「AI 打算这样画。每一步都是现成的做法,线由 AMB 来连。」,下面按顺序列出每一步(做法的名字、用哪个模型)。第一步以外每步右边有 ×(「去掉这一步」),有模型的步骤可以从同一类模型里换一个(「换模型」);最下面一行虚线写着「想加一步:在下面留言告诉 AI」。勾上「以后直接搭,不用问我」,以后的蓝图直接搭好。按「照这个搭」AMB 在新标签页一次搭好(「搭在新标签页,你的画布不动」);按「我想改一下」写一句话交给 AI,什么都不搭。直接搭好的卡上写「按你的设置直接搭好了」,旁边的「以后先问我」把设置改回来。
为什么:AI 自己一块块连线容易乱,小模型更是;先看到整条路线、能删能换,再一次搭好,你心里有数,AI 也少走弯路。
中间:时间线
- 从上往下读,编号 1、2、3……;AI 连着查资料、连着改画布的几步折成一行(
ui_ai_chain.js),点开看每一步。 - 每一步下面写它做了什么(
ui_ai_step_body.js),出的东西能直接去:图片进看图器、模型进模型页、画布改动能定位和撤销(ui_ai_results.js)。 - 跑完的图下面是「这次效果:」「效果好」「不太行」(
ui_ai_verdict.js),点了就告诉 AI,再点一下收回。点了「不太行」,下面多一排问题按钮(「手坏了」「脸不对」「构图偏了」「太暗」「太亮」「画风不对」等十个),点哪个告诉 AI 哪个,可以点几个。 - 图片上鼠标移上去有工具(
ui_ai_images.js):「图片与参数」、「保存为…」、勾两张对比,还有 ✎ 标注。 - 时间线和展台里的图先用缩略图(
/anomalous/output_thumbnail),显示得比缩略图大时才换原图(/anomalous/output_preview:超大图换的是 4096 像素的预览),打开任务不用等大图。
标注:「标给 AI 看:哪里要改」(ui_ai_marker.js)
框、圈、箭头、画笔,每个标记写一句要怎么改;右边选「怎么改」:
- 「交给 AI 判断」:AI 看说明自己决定。
- 「只改标出的地方」:其余保持原样,框、圈、画笔和涂抹的地方做成遮罩放进 input 文件夹,AI 只重绘这些地方。用「涂重绘区」时自动选上。
- 「整张重新出图」:按说明整张重画,不做局部重绘。
「发给 AI」以后(POST /anomalous/ai_tasks/{task_id}/marks),AI 下一步收到的第一句就是你选的改法,写明是你的要求(ai_marks.py)。时间线里这条标注写着「改法:{mode}」,方便核对 AI 有没有照做。
中间最下面:留言框(ui_ai_message.js)
- 「给 AI 留言,比如:背景再亮一点。…」:Enter 发送(
POST /anomalous/ai_tasks/{task_id}/message)。 - 打 @ 提到素材和图(
ui_ai_mention.js),开头打 / 是快捷指令(ui_ai_commands.js):/停止、/撤销、/展台、/节点结构、/素材、/副本、/当前画布 马上生效;/重跑、/解释、/继续 帮你写好一句话。 - 「从图库选图给 AI」(
ui_ai_gallery_pick.js),拖进来或粘贴截图(ui_ai_drop.js,存进输出文件夹的 ai_inbox)。 - 留言框上面的一条(
ui_ai_now.js):正在出图的进度、要你允许的事、AI 问你的问题;AI 停下时给出可以复制给它的句子,比如「继续」(ui_ai_call.js)。
为什么:AMB 不能主动叫醒外部的 AI。发出去的留言会等着,AI 下一次调用任何工具时一起收到(ai_panels.py 的 attach_pending),或者它来读回答时收到。AI 已经停了,就要你回 AI 软件里说一句,所以那里总有一句可以复制的话。
右栏:侧栏
| 开关 | 里面是什么 | 主要文件 |
|---|---|---|
| 「展台」 | AI 画的面板,从上往下排,旧的在上、新的在下;要你回答的在这里回答(POST /anomalous/ai_tasks/{task_id}/answer)。来了新面板而你在往上看时,出现「↓ 查看最新」 |
ui_ai_side.js、ui_ai_panel.js、ui_ai_stage.js |
| 「节点结构」 | 这次运行实际用的节点、和上次比改了什么 | ui_ai_run_map.js |
| 「决策」 | 你在面板上的选择、允许和拒绝、AI 记下的关键决定 | ui_ai_decisions.js |
| 「素材」 | 「给 AI 的素材」:挑模型、节点、搭配、工作流、提示词交给 AI;「来源」列表里鼠标所在的行会亮,选中的打勾。模型和模型页一样:按类型分、有基础模型的分类条,同一模型的几个版本是一张卡,版本单独写,点它换版本,已选的跟着换 | ui_ai_toolbox.js、ui_ai_facet_menu.js |
| 「成果」 | 这个任务出的图、工作流、搭配、提示词、音频,按步骤排 | ui_ai_outputs.js |
| 「做法」 | AMB 现成的做法和 skill。先列这里能用的做法,每块一行:名字、一句话、「这次用它」(只对这个任务:AI 会收到,这一类活 AMB 直接按它搭,AI 要别的也一样,POST /anomalous/ai_tasks/{task_id}/way)和右边的开关(全局关掉,AI 就看不到);点名字前的小三角展开全文、来源、测过的耗时和推荐的模型。接着是 skill。缺节点包或模型的做法收在最下面「还差东西的…」里,默认折起,每块写着缺什么,节点包能点进 Manager |
ui_ai_blocks.js |
存档(ui_snapshot_bar.js)
右键节点或画布空白处「存档当前工作流」后出现在画布下方,因为存档时人在画布上改东西,AMB 的窗口会盖住画布。存档跟着工作流走:切标签换成那个工作流的,没有存档的标签没有这一条;刷新、重启都还在。
- 存档的数字:回到那一步,在同一个标签页里,算一步撤销,Ctrl+Z 能回来,也可以接着改出新分支。亮着的数字就是画布现在的样子,画布一改就灭。
- 回到一个存档时,输出节点上的图也换成这个存档跑出来的:跑了几次就都排在节点里,和批量出图一样,新的在前,最多 16 张。这个存档在某个节点上没有图(没跑过,或图删了),那个节点就空着,不留别的存档的图,免得看错。Load Image 选的图不动。Ctrl+Z 退回的只是画布,节点上的图不跟着退。
- 条上只放最新的 6 个,更早的收进一个「前 N 个」,点开是存档页。「运行」跑的是全部存档,不是画布现在的样子。
- 数字旁边的框:这个存档跑几次。条上的 +:再存一个。⌄:收成贴在画布底边的小把手。「随机」和「锁种」管整组运行的种子。
- 条放在画布这块区域里,居中对着画布,打开底部的日志也不会盖住它。提示飘在条的上方,按钮不会被顶开;跑完提示自己消失。
- 「看图」:打开下面的存档页,停在这个画布那一块。
- 运行前逐个存档让 ComfyUI 检查,有问题一次都不排。跑的是副本,画布和上面的种子都不动。
画布上的「交给 AI…」(ui_ai_canvas_hand.js)
右键画布空白处或一个节点,AMB 菜单里的「交给 AI…」。打开一个小窗:上面写交的是哪张画布(“把画布‘名字’交给 AI。挑一个,或者自己写:”)或哪个节点,下面几个现成的说法,点一下填进下面的框,框里可以改:
- 画布:「照这张画布出 4 张,挑最好的给我看」「看看这张画布哪里有问题(缺模型、连错线、报错),帮我修好」「讲讲这张画布每一步在做什么,哪些参数值得调」「在这张画布后面加上放大和修脸修手」。
- 节点:「讲讲这个节点是做什么的,参数怎么调」「帮我调这个节点的参数,跑几张对比」。节点上有存下来的图时多一个按钮,把这些图发给 AI,和图库里一样。
- AI 正在做一个任务时,底部有两个按钮:“发给‘任务名’”(作为留言发过去,提示“它要是已经停下了,在 AI 软件里说一句“继续””)和「开新任务」;没有时只有「交给 AI」,建一个关于这张画布的任务,再给出要发给 AI 的那句话。新任务的 AI 从这张画布开始:读、跑、复制副本都用它,你后来切到别的标签也一样。
- 在这个页面跑出错时,右下角提示“运行出错了:……”,旁边「让 AI 看看」,点了就是这个小窗,框里写好了报错。
为什么:AMB 不能主动叫醒 AI,所以按钮做的是“把要说的话和画布准备好”,省掉自己描述画布、复制报错这一步。
主页的「让 AI 帮你做」(ui_ai_starters.js、ui_ai_starter_sheet.js)
主页卡片下面一块。顶上一行是最近连接的 AI 软件和时间(没有就写“还没有 AI 连接过”),旁边「连接 AI」打开连接说明;那个软件连的是精简或自选的工具清单时,下面多一行黄字,说它接不了 AMB 里的任务、去「连接 AI」选「全部工具…」再重连。下面六张卡,每张底下几个绿色小标签,鼠标停上去说明为什么 AMB 能保证:
| 卡 | 点了以后 | 标签 |
|---|---|---|
| 「先试一次」 | 说明页,点「开始」建一个练习任务:AI 打开官方文生图例子出一张小图 | 新标签页、小图 |
| 「跑我存的预设」 | 选工作流、选预设(或「(工作流自己的设置)」),写「这次改什么…」;没有存好的工作流时说明页给「去工作流页」 | 新标签页、你存的不会被改 |
| 「照我说的出图」 | 写「想要什么画面」 | 新标签页;关卡里下载是先问时多一个「下载前问你」 |
| 「改一张图」 | 从图库挑一张(点一下选中),写「怎么改」 | 原图不动、新标签页 |
| 「隐私模式出图」 | 写「画面大意(会发给 AI)」,建一个隐私任务 | 不发图和原文、新标签页 |
| 「看懂我的画布」 | 就是画布右键的「交给 AI…」小窗 | 每步可撤销 |
顶上一行在有 AI 来过以后多一个「怎么用」:转到 AI 工作台,等它打开后走一遍工作台的引导。
说明页都分几行:点「开始」后、不会动(或 AI 拿不到、管不到)、要注意;必填的没填,按「开始」时下面红字说缺什么。「开始」以后和别处「交给 AI」一样,弹出要发给 AI 的那句话。后端:GET /anomalous/ai_starters(只读),建任务还是 POST /anomalous/ai_tasks,再按卡片设好新标签页、隐私。
为什么:新手不敢上手,怕弄坏东西。卡片把常用的几件事准备成任务,说明页先讲清楚会发生什么;标签只写 AMB 自己做得到的保证,不写要靠 AI 自觉的事。
AI 工作台的新手引导(ui_ai_tour.js)
第一次打开 AI 工作台、里面有任务时,等窗口打开稳了,自动走一遍聚光灯引导(和主页的界面导览同一种),七步:「新任务」、「连接 AI」、「关卡」、任务列表的筛选、任务标题栏右边的 ⋯、时间线、留言框。看不见的那一步(比如窄窗口里时间线收在别的标签里)跳过。走过一次就不再自己出现(记在这个浏览器里),主页「让 AI 帮你做」的「怎么用」可以再看。
有些东西要等 AI 做过事才出现,引导走的时候还看不到,所以它们第一次出现时,下面多一行小字,旁边「知道了」,点了就不再出现:
- 跑完的图下面「效果好」「不太行」:觉得不行就点「不太行」,再点哪里不行,AI 就知道该改哪儿。
- AI 改画布的一串步骤旁有「撤销这一串」时:点它就能退回去。
- 隐私任务的留言框里有「藏」时:选中几个字再点「藏」,这几个字 AI 只拿到代号。
为什么:不在页面上写大段说明。界面一直在的东西用引导讲一次;后来才出现的东西在它旁边说一句。
任务单(ui_job_sheet.js)
右键节点或画布空白处「任务单(批量换提示词)」打开,在画布右下角,ComfyUI 的画布按钮上面。用同一张画布连着跑很多次:观众要的“一次贴几十条提示词,每条跑几次”和“运行间隔”都是它。
- 填:一行一条提示词,填进正向提示词框;一条也不写,就照画布原样跑(只想要运行间隔时这样用)。提示词要写好几行时勾「一条提示词要写好几行:条与条之间空一行」。「每条跑几次」「每张之间歇几秒」「每条用同一组种子(方便对比)」。下面一行算好共几张;最多 200 条、1000 张。填的内容记在这个浏览器里,下次打开还在。
- 「开始」:先让 ComfyUI 检查(第一条和带设置的几条),有问题一张都不排,写明第几条什么问题。画布的模型只读得懂英文(SD 1.5、SDXL、Pony、Illustrious、Flux 这类)而提示词是中文、日文或韩文时,先提醒一次:出的图会和提示词无关;再点一次「开始」就照样跑。开始时记下这张画布,跑的都是副本,之后改画布、切标签都不影响它,画布上的提示词和种子也不动。
- 跑的时候:进度条、已跑几张、出了几张图、正在跑第几条第几次(或「歇一下:N 秒后跑下一张」),最新的 4 张小图。「暂停」已经排进队列的这一两张跑完就停;「继续」接着跑;「停止」把排着的撤掉,正在跑的这张也中断。⌄ 收成一个小把手。
- 有一张出错或被中断,任务单自己暂停,写明原因,改好画布以外的问题(比如显存)再「继续」。
- 页面要开着。刷新同一个标签页会接着跑;跑它的页面关了,别的页面打开时会看到「在这个页面接着跑」。
- 跑完或停下后:「改一改再跑」把这些提示词放回填写框,用画布现在的样子再跑;「在图库里看」;「关掉」。
- AI 也能排任务单(
run_workflow(sheet=…)):卡片上写「AI 排的」,工作台里那一步就是它的进度和图,工作台的停止按钮也能停它。
为什么:存档适合几套不同的工作流各跑几次,几十条提示词要存几十个存档(最多 50 个),所以单独做一张单子。一次只排一两张进 ComfyUI 的队列,暂停、停止随时有效,ComfyUI 的队列里也不会堆几百个。
存档页(ui_saves_list.js)
「工作流」页顶上的「存档」。所有存档按画布分块,画布关了、文件删了的也在;每块能折叠,默认只展开当前画布。
- 块的顶上:「运行 N 次」按存档顺序跑这一块,一次只跑一个画布;再点别的块,就排在后面,先点先跑。「删掉这组」进回收站。
- 每个存档一张卡:左边是和上一个比改了什么、跑几次和按钮,右边是出的图(新的在前;窗口太窄才排到下面)。窗口够宽时卡片并排,和工作流卡一样铺开。
- 图:一行放得下多少放多少,其余折叠成最后一格,写着还有几张。点开看大图;鼠标移上去有「查看参数」,打开参数页后左右键在这个存档的全部图里切换。只有预览没保存的图没有参数。
- 点这一格(或 ⋯ 里的「看全部 N 张图」):这个存档的全部图,用图库的卡片,操作和图库页一样;「← 全部存档」或 Esc 回来。
- 「运行」:只跑这一个存档,每次换新种子,不看「锁种」。还有几次在跑写在这个存档自己的卡上。
- 「收藏为工作流」:存成一张新的工作流卡,之后互不影响。存档只能变成工作流卡,不变成预设或搭配。
- ⋯:「回到这里」(画布开着才有)、「在新标签页打开」(画布开着算一条新分支,存档从空开始;画布没了,这组存档接着用)、「删掉这个存档」。
工作流页的「官方示例」(ui_recipe_examples.js)
工作流页第一张卡片是「官方示例」,放最后的话,卡片一多就找不到了。点开是一个窗口,按方案分组(文生图、两段放大、图生图、局部重绘),方案下面是各个版本,每个版本有备注和「新画布打开」。两段放大有四个版本:SDXL / SD 1.5、Anima、Anima · Tile 锁图(「推荐」)、Anima · 背景虚化,只重画人物。SDXL 和 Anima 必须分开,模型的加载节点不一样。打开时后端按版本填上你已有的模型和文件(GET /anomalous/example_workflows?id=…)。缺节点包或模型的版本照样列出来,写明缺什么,节点包能点进 Manager,这一条没有打开按钮。整个模型家族都要注意的事只在这个家族第一个版本上面说一次(Anima:「下面是 Anima 的版本。要多张图就多跑几次…」),不在每个版本里重复。带 Tile 的版本打开时选的是 Tile 适配的模型(lllite_fit.py 读两个文件的文件头比块数),没有适配的才用第一个。搜索或筛选时这张卡片不显示。
AI 这边:没有合适的已存工作流时,list_workflows 给它这里能跑的版本,每条写着适合什么模型,打开和运行都和已存工作流一样;有合适的时也列出示例的名字,免得 AI 不知道。用中文(图生图、两段放大)也搜得到。用户存过的工作流优先,也不会被同名示例盖掉。
为什么:新装的人一张卡片都没有,AI 也没有现成路线可跑。只放一张卡片,不占用户自己的位置;方案只是窗口里的分组,每个版本仍是一条独立的工作流,不是一张卡里放几套参数。Tile 版的数值和做法 upscale_tile 的 Anima 版一致,有测试看着。
模型选择器(ui_node_model_picker.js)
换模型时选一个。插入 LoRA 时可以选多个:点卡片加入,再点一下取消,卡片左上角的数字就是接上去的顺序。装了 rgthree 或 Easy-Use 时底部能选用哪种节点(官方的串成一串,第三方的放进一个节点),记住上次的选择。放好后新节点都是选中的,可以一起拖走,落在视野外时画布会移过去;Ctrl+Z 一次全部退回。第三方节点放上去后自己还会变一下高度,所以窗口多留一小会儿,等它们稳定再排位置、记撤销。
模型详情的开头(model_detail_head.js)
像一页人物档案:返回的小字,下面大字写模型的名字;名字后面带着 C 站版本的(“名字 - v2”,或者扫描改名后的“名字_v2”)拆开,版本放在第二行灰色小字。再下面一行蓝色小字:类型 · 大小 · 底模,C 站的模型后面是 Civitai ↗ 链接(不再另写“来源 Civitai”)。然后一排按钮,只有「插入节点」是实心的,其余是文字按钮。靠字号和留白分层次,不加框、不加阴影,看久了不累。
模型详情:触发词和用法(ui_model_guide.js)
开头下面是一张细线隔开的清单,每行左边名字、右边内容。有 C 站的训练词就是「训练词」一行;没有的 LoRA 是「常用词」一行(虚线圆角,点一下复制,下面小字说是从文件里读的推测)。每个词点一下复制,「复制」复制全部。扫描时拿到作者例图的,是「作者常用」一行:采样器 · 调度器 · 步数 · CFG · 尺寸,LoRA 还有权重,后面写几张例图。放在 diffusion_models / unet 里、要分开加载的模型(Anima、Flux 等)每个要的文件一行(「文本编码器」「VAE」),写有没有这个名字的文件,只按名字找,不保证就是对的那个。最后是「版本」(C 站上的全部版本,点开在这一行下面列出来)和「文件名」(大字的名字不是文件名时才有)。都来自 /anomalous/model_guide;给 AI 的注意事项不在这里显示。清单下面是「作者的介绍」:C 站上作者写的说明,只露开头几行,下面一个蓝色的「展开全文」(展开后是「收起」),鼠标移到折着的正文上底色会变亮,点标题、正文或「展开全文」都能展开;你展开过,下次打开别的模型也是展开的,收起也一样(只记在这个浏览器里)。介绍是英文而界面是中文时(英文界面遇到中文、日文也一样),旁边有「翻译」:一段一段翻成界面的语言,翻完显示「看原文」可以切回去,旁边小字写是谁翻的(DeepL、Google 或 MyMemory)。翻过的存在 AMB 自己的文件夹里,下次直接显示,不再联网,也不往模型文件夹里写东西;翻不出来时写明原因,原文不动。
角色语音的角色卡(ui_audio_studio.js、voice_covers.js)
每张卡像一页小档案:左边是封面,没设封面时是名字的第一个字;右边大字写角色名,版本(日配、中配)在下面一行灰色小字,再下面一行蓝色小字写模型版本、几条声音、“拖标题栏 → GPT-SoVITS 节点”。按钮在名字下面,是没有边框的文字按钮。下面一条条声音用细线隔开:播放、情绪、台词、「复制」标签。卡片是平的,不发光。
点封面(悬停写「换封面」)打开一个小窗:上面「从电脑选一张」「去掉封面」(有封面时才有),下面是图库,点一张就换上。图自动裁成方形,竖着的图保留上面一截。同一个角色的几个版本共用一张封面。封面存在 AMB 自己的文件夹里,不碰 Anomalous_TTS 的角色文件夹;去掉的封面进回收站。
为什么:角色一多,全是同一个图标,只能读名字找;有了封面一眼认出是谁,也和模型卡片一致。
设计上的固定做法
- 从上往下读:时间线、展台都是旧的在上、新的在下;看最新的时候自动跟着往下,往上翻着看时不打断,只出现“去最新”的按钮。
- 重画只重做变了的部分:工作台随时在刷新,滚动位置、打了一半的字、展开的东西都不能丢。
- 会改东西的地方说清楚后果:二选一要写每一种是什么意思;删除写明删的是什么、不删什么。
- 鼠标移上去要有反馈:列表行、菜单项悬停变亮,当前选中的有底色或打勾。
- AI 改画布默认改副本:你正开着的工作流不被 AI 动。
统一叫法
| 说法 | English | 不再用 | 不再用(English) |
|---|---|---|---|
| 副本(AI 改的那份工作流) | copy | 专用标签页、自己的标签页、新开标签页 | own tab |
| 素材(交给 AI 的模型、节点……) | materials | 材料 | — |
| 留言(你写给 AI 的话) | message | 消息 | — |
| 节点结构 | node map | 结构图、运行结构 | node structure |
| 连接 AI | connect an AI | 最近接入、接入过 | — |
| 撤销 | undo | 撤回 | — |
| 展台 | stage | 画板、舞台 | — |
| 成果 | results | 产出 | — |
| 关卡 | gates | 闸门 | — |
| 工作流(存下的整套工作流,“工作流”页的卡片) | workflow | 配方(配方包、搭配方案除外) | recipe(recipe package 除外)、recipes |
| 配方包(把一个工作流打包发给别人的 .zip) | recipe package | — | — |
| 搭配(主模型 + LoRA + 提示词) | combo | — | — |
| 预设(工作流卡里存的一组参数,“工作流”页卡片的详情里) | preset | 参数方案 | parameter set |
“不再用”里可以写例外,比如“配方(配方包、搭配方案除外)”:这两个词里的“配方”不算。{recipe} 这样的占位符也不算。
还没统一的
node tools/ui_map.mjs build的最后一节列出没有文件用到的文字(2026-10-25 清理过一次,当时为 0),清理前先确认不是拼出来的 key、也不是后端错误信息当 key 用的(t(error.message))。