- The 54 screen words that said 配方 / recipe for a saved workflow say 工作流 / workflow
(the Workflows page, saving and exporting, the activity log, backups, the gallery's keep);
配方包 / recipe package stays the .zip given to others. README and the MCP guide too.
- The Workflows page's empty guide drops its fallback texts: translate() returns the key
when a word is missing, so they were never shown and still said 配方.
- The glossary retires 配方 and recipe; a retired name may list where it is not that name
("配方(配方包、搭配方案除外)"), and {placeholders} do not count.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9.2 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 工作台
三栏:左边任务列表,中间一个任务的时间线,右边侧栏。窗口窄时左边和中间轮流显示,右边变成标签页。
左栏:任务列表(ui_ai_task_list.js)
| 看到的 | 点了以后 | 后端 |
|---|---|---|
| 「新任务」 | 写一句要 AI 做什么(可以空着),任务显示“等 AI 接手”;下一个来调用的 AI 直接接手它,不会接在旧任务后面 | POST /anomalous/ai_tasks |
| 「连接 AI」 | 弹出连接说明:地址、复制给 AI 的那句话、各个软件怎么加(ui_ai_connect.js) |
无 |
| 「关卡」 | AI 做哪些事要先问你(改画布、用显卡、下载……),还有给 AI 的工具集(ui_ai_gate.js) |
/anomalous/ai_gates |
| 「全部」「进行中」「等你回答」「出错」 | 只筛这一栏,不改任何东西 | 无 |
| 一个任务 | 中间显示它。看过的、鼠标停过的马上出来,再悄悄补上最新内容(ai_task_cache.js) |
GET /anomalous/ai_tasks/{task_id} |
收起:标题栏最左边的按钮(「收起 / 展开任务列表…」)。收起后列表仍在左边排好、藏起来,鼠标碰到这个按钮、或者从页面往左移到最左边缘,下一帧就滑出来;离开后 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} |
| 「接着哪个任务…」 | 把这个任务接在另一个后面,两边都显示链接(ui_ai_task_links.js) |
POST /anomalous/ai_tasks/{task_id}(from) |
标题栏右上角的一排是侧栏的开关:「展台」「节点结构」「决策」「素材」「成果」(ui_ai_side_views.js),同一时间只开一个。
中间:时间线
- 从上往下读,编号 1、2、3……;AI 连着查资料、连着改画布的几步折成一行(
ui_ai_chain.js),点开看每一步。 - 每一步下面写它做了什么(
ui_ai_step_body.js),出的东西能直接去:图片进看图器、模型进模型页、画布改动能定位和撤销(ui_ai_results.js)。 - 图片上鼠标移上去有工具(
ui_ai_images.js):「图片与参数」、「保存为…」、勾两张对比,还有 ✎ 标注。 - 时间线和展台里的图先用缩略图(
/anomalous/output_thumbnail),显示得比缩略图大时才换原图,打开任务不用等大图。
标注:「标给 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 |
设计上的固定做法
- 从上往下读:时间线、展台都是旧的在上、新的在下;看最新的时候自动跟着往下,往上翻着看时不打断,只出现“去最新”的按钮。
- 重画只重做变了的部分:工作台随时在刷新,滚动位置、打了一半的字、展开的东西都不能丢。
- 会改东西的地方说清楚后果:二选一要写每一种是什么意思;删除写明删的是什么、不删什么。
- 鼠标移上去要有反馈:列表行、菜单项悬停变亮,当前选中的有底色或打勾。
- 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 | — | — |
“不再用”里可以写例外,比如“配方(配方包、搭配方案除外)”:这两个词里的“配方”不算。{recipe} 这样的占位符也不算。
还没统一的
node tools/ui_map.mjs build的最后一节列出没有文件用到的文字(目前 33 条),清理前先确认不是拼出来的 key。