本文件记录每个版本的更新内容。发布新版本时:
VERSION 文件(如 2.0.0 → 2.1.0)__init__.py 里的 __version__## [新版本号] - 日期用户可在节点工具栏「🔄 更新」检查到新版本。
tag_blacklist 命中 / regex_blacklist 命中 / 未归类,分组展示)。
后端 get_tags 经 ComfyUI 的 ui.tk_filter_report 通道回传(每栏限 40 词,不膨胀执行历史)。
点类别名可直接开/关该类并就地重算,不必重跑工作流;若「旧 12 类全关」(= 不启用自动分类、整段原样输出)会显式警告。applyPreset() 原先只查前端硬编码的内置表,自定义预设拿到空 spec →
20 个开关一个都不动(后端 _apply_preset 其实一直是对的)。现在按快照还原开关与权重,
并缓存 GET /anima/tag_presets 的 presets 字段(保存/删除后即时更新)。recoverPointer() 的”补发点击”判据用的是”坐标栈里第一个带 data-node-id 的元素”,
点 ComfyUI 自己的按钮(不属于任何节点)时会一路命中下面的画廊节点 → 误判”同一个节点”而放行 →
穿透到卡片、参考图被换成没想选的那张。改为认事件真正的目标归属(代价:极端情况可能要点两次,但不会选错图)。PRESETS 只剩「自定义(不用预设)」。旧工作流里存着的已删预设名
因为 preset 是 STRING 而非 COMBO,安全降级为”不用预设”,不报 Value not in list。data/tag_taxonomy.tsv.gz,69.3 万标签 /
20 个分类):不再依赖第三方 Tag Sorter 插件,未归类词占比从 98.6% 降到 11.44%;
新增 8 个分类(角色身份 / 作品版权 / 发色发型 / 亚人特征 / 审查遮挡 / 文字水印 / 质量元 / 物件道具),
原 12 类的名字与顺序一个未动,旧工作流可直接打开。AnimaTKLatentSwitch):六路 latent 选一路输出并联动 denoise,
或以一路为背景叠加其余路(羽化 / 居中 / 偏移),模式在节点内切换;
按最后两维处理空间维度,兼容 Anima 的 5D latent。data/tag_presets.json,跨工作流共用)。全开 / 全关 / 反选 / 权重归 1 批量操作;排除框一键清空、权重双击归 1、键盘焦点可见。normalise / tag_lookup_keys /
正则 / 黑名单)加缓存、索引取用改无锁快路径 —— 120 标签的单次查询 1.19 ms → 0.37 ms,
开主题剔除时查表次数从 244 降到 122。POST /anima/cards/zh_lookup
(13.2 万条「标签 → 中文」别名表 + 24 万条词典兜底,均规范化匹配),词典没有才机翻;
批量重译会先整批查词典再决定要不要机翻,另提供「只用词典」档。exclude_groups / exclude_groups_custom 两个控件保留占位
(删控件会让旧工作流的 widgets_values 错位),但前端不再渲染、后端不再参与判定。顺带修了测试基建:test_danbooru_meta 会顶掉真 torch,影响同 session 需要真张量的测试。
probeGalleryIndex() 首次探测成功后永久短路 —— outputThumbnail.ts 里
if (_galleryState !== 'unknown') return _galleryState === 'ready' 让后续所有调用
直接 return,于是 _galleryEntries 永远停在首屏那一版。
refreshOutputsFromGallery() 那句注释写着”索引已重建完则重新载入 entries”,
但实现根本没重新载入。现在加了 force 参数才会真的重拉 manifest。probeOutputsGrew() 只看后端 changed
(磁盘文件数 > 索引里的 total)。而后端重建索引是后台线程:探测到 changed 那一刻
索引往往还没建完,此时拉的仍是旧索引;等它建完后 count 已追平、changed 又变回
false —— 前端据此就再也不来拉了,新图永远不出现。
现在同时比对后端返回的 builtAt(索引构建时刻):只要索引换代就重拉,与 changed 无关;
building 期间跳过,等下一轮。首屏已载入的 builtAt 由 service 记着,不会为此白拉一次 manifest。/anima/gallery/fresh 的判据漏了 latest —— changed = count > known 只判”变多”,
而已经算好的 latest(最新 mtime)根本没用。索引 total 偏大(含已删文件等)时,
新增的图也算不出”变多”。补上 stale = latest > builtAt + 1,并把 builtAt 一并返回给前端。主题切换按钮在浅色主题下几乎看不见(用户截图反馈)。
三个点里只有 [data-theme="mono"] / [data-theme="mono-light"] 定义了背景色,
drinkit 那个点没有背景 → 在浅色主题下只剩 1px 的 --border 淡边,整个控件等于消失。
现在每个点填上它所代表的主题色(drinkit 用 --color-primary),统一加描边;
选中态改成”底色 + 主题色”双层环,比单纯描边更容易看出当前是哪个主题。写在本文件最后
import 的 design-system.css,优先级足以压过 global.css / polish.css。
.outputs-stats 从网格下方的独立卡片移进顶部工具栏同一行,
CSS 从”带背景/边框/padding 的卡片”改为行内紧凑文本(margin-left:auto 推到最右)。
顺带说明:张数在工具栏的「全部图片 (N)」里本来就有,这条属于冗余信息,现在不再占一整行。补回「Outputs 生成完后台更新」的前端部分 —— 发布版一直缺这个功能。
该功能的后端路由 /anima/gallery/fresh 在 2.11.0 已经发了(anima_batch_lora.py 里确实有),
但前端调用只写在 dev 目录 civitai/src/sections/Outputs.ts,从未镜像到 panel/src。
后果:app/、registry 包、ComfyUI-Manager 安装的用户全都拿不到 ——
后端有路由、前端从不调用,功能静默失效;而 AGENTS.md / HANDOFF 里写着 2.11.0 已包含它,
文档与代码不一致。
判据(可复现):在构建产物里 grep 字符串字面量 gallery/fresh / execution_success
—— minify 不会改字面量,所以产物里查得到才算真发布。修复前:dev src 有、panel/src 没有、
app/assets 没有。
双向漂移合并:LoraExplorer.ts 的「版本下拉脱离裁切」修复(applyDropdownClip /
releaseDropdownClip)只存在于 panel 侧 —— 2026-09-12 是直接在发布仓库改的,dev 目录没有。
已回写 dev,否则以后从 dev 构建会把这个修复静默回退。
合并方式:逐文件用 difflib 看「少数派」差异块,确认哪边是超集再整份覆盖
(Outputs.ts 无 panel 独有改动 → dev→panel;LoraExplorer.ts 的 dev 侧只是被重构掉的旧写法
→ panel→dev)。合并后 sync_panel_src.py --dry-run 全部 same。
sync_panel_src.py 全量镜像 ——
那会把 panel 侧独有(在发布仓库直接做的)改动回退掉,而且没有任何报错。app/ 是坏的。2.12.5 发布时我为了本机验证重建了 app/,
但 comfy node pack 只打包 git-tracked 文件 —— 新构建出来的 hash 文件当时还没被跟踪,
于是被跳过,而 app/index.html 已经引用它们。打包日志已经点名:
File not found. Not including in zip: app/assets/index-BeUX-0M9.css。
改法:不手工提交 app/(按 AGENTS.md 由 CI 的 build-app.yml 拥有),
等 bot 的重建提交 chore: rebuild panel app 落地后再发版;本版 app/ 即 bot 的产物,
实测 index.html 引用的 index-Chynkz48.css 含 #f2f3f5,且 app/ 与 git 完全一致(pack 不再告警)。
2.12.5 的 registry 版本作废(仍是 Pending,未被安装)。教训(已写进
AGENTS.md坑 9 的语境):改了panel/之后不要在本机 rebuildapp/再发版 ——app/是 CI 的产物,本地重建会让「git 跟踪的清单」和「磁盘内容」错位,打包静默漏文件。
drinkit)下 toast「黑字黑底」:global.css 的 .toast 背景是写死的深色
rgba(10,10,12,.92),但文字用的是 color: var(--text)。深色主题(mono)下没问题,
可 drinkit 是 color-scheme: light(--text 是深色)→ 于是出现黑字黑底。
用户截图里的「请先选择目录」就是这么看不见的。
而 drinkit 还是 main.ts 里的默认主题(localStorage.getItem('anima_theme') || 'drinkit'),
只有 mono-light 有 toast 覆盖 —— 默认主题反而漏了。
改法:.toast 文字写死浅色 #f2f3f5(背景既然是固定深色,文字就该固定浅色),
这样一次性覆盖 drinkit 与未来任何浅色主题;mono-light 的浅底深字覆盖保持不变。
顺带用脚本扫了全量 CSS 的「写死深色背景 + var(--text)」组合,只有 .toast 一处,不是系统性问题。Tk Toolkit → TK Toolkit(全大写)。理由:面板自己的按钮本来就叫
TK Toolkit / 本地工具箱(panel/src 里既有),15 个节点显示名也一直是 TK xxx;
全大写才和产品内既有叫法一致。节点显示名完全没动(保持 TK xxx)。时运Tk → 时运tk(与 B 站账号一致,tk 小写)。说明:2.12.3 那条 CHANGELOG 里写的
Tk Toolkit/时运Tk是当时的事实,作为历史记录保留, 不回改。另:本次改的是panel/src,app/由 CI 的build-app.yml重建(不手工提交)。
anima toolkit 从 1 条(我们)变成 0 条 —— 我们本来是它唯一的匹配。而旧版 Release
(v2.10.0–v2.12.2)、旧 README、旧教程、以及 AI 的训练语料里都写着 “Anima Toolkit”,
这条查询路径不能断。
改法:description 写成 “Tk Toolkit (formerly Anima Toolkit) — …”,README 英文摘要与
llms.txt 各加一句 “formerly Anima Toolkit(2026-09 改名)”。
这样新旧两个名字都能召回,AI 也能把旧名映射到新名。项目改名为 Tk Toolkit(作者「时运Tk」的品牌)。原显示名 “Anima Toolkit” 与训练工具链
AnimaLoraToolkit(66★) 撞脸 —— 搜 “anima toolkit comfyui” 时对方排第一,AI 容易把我们归错类;
另有一个同名 fork bfftp0502/comfyui-anima-toolkit。
改名范围刻意只动”对外身份”层(零风险,老用户完全不受影响):
| 改了 | 没改(改了会出事的) |
|---|---|
Registry DisplayName → Tk Toolkit |
Registry 节点 id 仍是 anima-toolkit(换 id = 建新节点、重新排队审核,还会在 registry 留一个重复节点) |
| README 标题 / 英文摘要 / 安装块 / 图标 alt | GitHub 仓库地址不变(老用户更新链硬编码了旧仓库名;且旧名释放后有被抢注的供应链风险) |
pyproject description + authors |
NODE_CLASS_MAPPINGS 类名(已保存的工作流 JSON 存的就是这些字符串) |
llms.txt / AGENTS.md / CLAUDE.md / 两个模块头注释 |
anima_ 文件与模块前缀(更新链白名单就是 path.startswith("anima_"),改了等于重踩漏发 bug) |
节点显示名保持 TK xxx(38 处代码 + 34 处测试断言,纯 churn 且无检索收益) |
召回不掉:Anima 关键词保留在 description 里 —— 实测 registry 搜索会索引 description
(搜 danbooru 能搜到我们,而 “danbooru” 并不在节点名里),所以从 “Anima Toolkit” 改成 “Tk Toolkit”
不会丢掉 anima 这个查询词。
作者署名:[project].authors = [{ name = "时运Tk" }]。刻意没写 email —— 一提交就进公开仓库
历史、无法撤回;要公开再补 email = "..."(PEP 621 允许只填 name)。
screenshots/icon.png(400×400,由 tools/make_icon.py 生成,
取自面板自身配色),并在 pyproject.toml 填上 Icon。此前 registry 上的 icon 是空的 ——
registry / ComfyUI-Manager 列表里没有缩略图,直接影响点击与发现率。llms.txt(仓库根):面向 AI/LLM 的机器可读摘要 —— 一句话定位、安装命令、全部节点清单、
关键词、以及”别认错”说明。新兴的 LLM 友好约定,成本极低。## Installation / 安装(Manager 搜索名 + git clone
命令 + registry 链接 + 依赖指引)。此前前 4000 字符里 install 出现 0 次 ——
需要”替你安装”的 agent 找不到可执行指令。关键词补上
comfyui-manager / tag-autocomplete / chinese-tag-autocomplete / workflow-automation。AnimaLoraToolkit(66★) / AnimaLoraAtelier 是训练工具链,
搜 “anima toolkit comfyui” 时它排第一。README 与 llms.txt 都写明本项目是推理侧
工具包(加载/管理/检索 LoRA,不训练),避免 AI 把我们归错类。遗留:registry 上的
category/tags仍是空的 —— comfy-cli 的[tool.comfy]只认PublisherId/DisplayName/Icon/includes(实测其config_parser.py), 这两个字段只能在 registry 网页端补,不是代码问题。三个版本的审核状态仍是Pending(latest_version因此为空),审核通过前 Manager 的注册表安装路径不会列出来。
services/ 与随包词典。发布白名单曾把 data/ 与 services/ 整个排除,
后果有两个:
① 新词典永远下发不到 → 中文联想在老用户机器上表现为”代码在、索引不在”,不报错但没用;
② services/ 不下发 → __init__.py 拆分后 from .services.github_update import … 是硬依赖,
点更新会拿到新 __init__.py 却拿不到 services/ → ImportError,插件整个加载不了。
现在 services/ 全量下发;data/ 改为逐文件白名单(只放行随包词典,
prompt_library.json / batches/ / 账号 / 缓存等用户状态永不覆盖);
别名索引改放插件根目录 anima_alias_index.json,这样连旧版更新链都能把它下发下去。望/橘望 → nozomi (blue archive)、妃咲/龙华妃咲 → kisaki (blue archive)、
日奈 → hina (blue archive)、星野 → hoshino (blue archive)。
数据来自两层可验证来源,不含任何 LLM 编造:
① 社区词典与官方译名(data/danbooru_tags_zh.json、原 CSV 的「关键词」字段);
② 从 Civitai LoRA 元数据里挖出的真实配对(中文标题 ↔ trainedWords 里的 danbooru 标签,
共 2638 条,每条都带证据)。
另引入 AnimaDex 角色表(36,480 个角色 / 3,702 部作品),所以输入作品名
(如「碧蓝档案」)也能直接列出该作品角色。data/ 与
services/ 整个排除。后果有两个,第二个更严重:
① 新词典永远下发不到 → 2.12.0 的中文联想在老用户机器上表现为”代码在、索引不在”,不报错但没用;
② services/ 不下发 → __init__.py 拆分后 from .services.github_update import … 是硬依赖,
老用户点更新会拿到新 __init__.py 却拿不到 services/ → ImportError,插件整个加载不了。
现在 services/ 全量下发;data/ 改为逐文件白名单(三个随包词典下发,
prompt_library.json / batches/ / 账号等用户状态永不覆盖);别名索引改放插件根目录的
anima_alias_index.json,这样连旧版更新链都能把它下发下去。telescope:说明字段里的「望远镜」曾让天文器材标签排在角色前面 ——
中文查询不再扫描英文说明,只在别名表完全没有结果时才回退。tests/tools/run_offline_like_ci.py 报告失败时自身崩溃:失败分支里的 ❌ 在 GBK 控制台上
触发 UnicodeEncodeError,把真正的报错盖掉(与 ai_verify.py 同一个坑),已改为纯 ASCII。(x) 会加强 x),
要拿到字面标签 nozomi (blue archive) 必须写 nozomi \(blue archive\)。
与 D 站画廊的「转义括号」同一套语义(反转义后再转义,重复插入安全)。
②区工具栏新增 括号转义 开/关 按钮,可随时切回裸括号;该选项保存在本地 UI 状态里。热门随机(评分 ≥100)/ 优质随机(≥50)/
高收藏随机(收藏 ≥30),均为 order:random 配质量地板,避免裸随机倒进没人贴过的冷门图。
带 force=1 绕过 30 秒缓存(否则”随机”会给出完全相同的一批);换一批会检测是否真的换出新图,
池子见底时明确提示而不是假装换过;内容标签与随机池无交集时自动退化为纯随机并说明。GET /anima/gallery/fresh(只遍历输出目录文件名并 stat,
不解析 PNG、不返回 16.5MB 索引),并监听 ComfyUI 的 executed / execution_success 事件。
不在 outputs 页面时也会在后台把新图准备好,切回来立即可见
(旧实现只在窗口获焦/切页时扫描、隐藏时直接 return —— 正是”不进页面就不更新”的原因)。.github/workflows/ci.yml):Python 编译 → ai_verify → 离线 pytest →
JS 测试 → panel tsc → panel 构建,每个环节独立 step、失败环节一眼可见。
权限只有 contents: read、不做任何提交,与负责提交 app/ 的 build-app.yml 完全分开;
push 到 main 与 PR 都跑,pip/npm 双缓存。tests/ 按「正式回归 / 需要真实环境 / 一次性脚本 / 工具」分层
(unit 23 / js 3 / integration 57 / smoke 4 / repro 12 / tools 5),
清单由 tools/classify_tests.py 生成并由 test_layer_manifest.py 守卫;
新增 python tests/run_tests.py:本地跑的等于 CI 跑的那一套。pyproject.toml(按当前官方规范)与
requirements.txt(必需依赖)/ requirements-optional.txt(playwright、llama-cpp-python)。
刻意不声明 torch / numpy / PIL:由 ComfyUI 自带,重复声明会引发版本冲突。order 曾被错误地算作免费 metatag,
导致「计数标签超限时自动移除排序」的分支与其提示条变成死代码
(回归 test_danbooru_gallery_interactions.py 自 2026-09-07 起一直失败,却被记成”预存在失败、非本轮引入”)。
现已修正为占 1 槽,前后端语义一致。rating:g / -filetype:mp4(历史写入),
会与筛选面板各拼一次 → 白占计数槽,还会让”退化重试”拿到一模一样的查询而形同没重试。
现已让筛选面板成为这些 token 的唯一 owner(与 order: 已有的规矩一致),并加大小写不敏感去重。PROMPT_LIBRARY_BACKUP_PATHS 在导入时从
PROMPT_LIBRARY_PATH 派生并固化成常量,而 save_snapshot 用的是当前值 ——
一旦数据目录被重定向(测试隔离必做),主文件写新位置、备份却写旧位置,
而 load_snapshot 又去新位置找备份。现改为按当前路径现算。web/ 里放过备份文件,会被 ComfyUI
当扩展一起加载、registerExtension 跑两次。备份已移出 web/,并立规矩:
web/ 是会被服务出去的目录,任何 .js 备份都不能放在里面。ai_verify.py 只在有 FAIL 时崩溃:其中用了 ❌ / ⚠️,默认 GBK 控制台下 print 会抛
UnicodeEncodeError —— 恰好在你最需要它报告失败的时候。已替换为 ASCII 标记。assert / sys.exit(),
pytest 要么收集期 INTERNALERROR,要么导入时执行且失败不会被报告(静默假绿)。
已全部改造为可被收集的正式用例(含”安全更新 ZIP”的回归)。
另修正 3 处从来没通过过的断言(引用不存在的变量、断言写死整串 HTML)。__init__.py 拆分第一阶段:2657 → 2448 行,把 GitHub 自动更新链拆到
services/github_update.py(边界最清晰、且有独立回归兜底)。
__init__.py 保留薄适配层与两条路由(所有 /anima/* 的唯一入口要集中),
会话与目录用显式注入避免循环导入;路径穿越校验与逐文件回滚逐行照搬、未做任何简化。VERSION 成为唯一真源:__init__.py 的 __version__ 改为运行时读它;
ai_verify.py 新增版本一致性检查(VERSION / __version__ / README / CHANGELOG / pyproject 五处,任一处漂移即 FAIL)。tools/bump_version.py:发版时一处改、五处同步,避免手改漏项。docs/FEATURES.md 清掉残留的写死版本号(v0.4)。TK 相机控制 节点已退役移除,由 TK 可动素体相机 取代。旧工作流里的该节点会显示为
「缺失节点类型」,请删除后改用素体相机:机位参数(pos_x / pos_y / pos_z / roll / fov)
与输出端口(camera_prompt / camera_meta)语义一一对应,预设与权重算法同为 CameraControlCore,
换节点即可,无需重新调参。web/js/anima_camera_control_widget.js 一并删除(节点已不存在)。anima_camera_control.py 模块本身保留:素体相机通过 CameraControlCore / DEFAULT_CONFIG_JSON /
CUSTOM_PRESET / all_preset_names 复用它,删除该文件会导致素体相机失效。.version-dropdown 是 position:absolute; bottom:100%
(向上弹),而卡片链路上有 3 层 overflow:hidden(.card-body → .card → .vs-card-wrap),
浮层弹出即被裁切。现于展开时临时解除「浮层 → 滚动容器」之间所有祖先的裁剪(含 .card 的
content-visibility:auto)并把卡片抬到 z-index:40,收起时逐级还原;上方空间不足则自动翻转为
向下展开。滚动容器自身保留裁剪,避免整页跟着滚动。TK 节点系列 由十二个改为十一个。trigger_words 输出改为直接输出本节点已激活(权重非 0)LoRA 的触发词,且与「是否加载成功」解耦——文件缺失但被激活的 LoRA 也会带出触发词。禁用项由面板以 <lora:name:0.00> 写入,既不加载也不取词。output_trigger_words,默认开启)。关闭后该输出为空字符串,LoRA 加载不受任何影响。data/lora_trigger_words.json,端点 POST /anima/lora_trigger_words)。执行时按「节点推送的持久表 > 内存 bridge > anima_bridge.json」解析,不再依赖面板是否推送过 bridge,刷新/重启后依然可解析。名称写成全路径 / 去扩展名 / 纯文件名都能命中同一份触发词。_find_lora_path 模糊匹配分支崩溃(重要):该分支调用了从未定义的 base() → NameError。真实文件名带 ` (1) 之类后缀时(例如 ITEFU-KREA-V1 (1).safetensors)必然走到这里,后果是:/anima/lora/info 返回 500(**触发词因此永远提取不到**)、「验证标签」报错,**并且节点执行会直接失败**。已修复并补回归测试 tests/test_batch_lora_trigger_words.py`(18 项,离线可跑)。0 时必须写回 1.0(否则节点按 (tag:0) 执行、该分类 Tag 被静默丢弃),项目自带 UI 测试正是这么判定的。现已把两者合并:空值 / 非数字 / ≤0 一律归一为 1.0 并写回 + 标记工作流已变更,其余值按 0.05 步进夹到 0.05–2。verify_danbooru_tag_getter_ui.py 通过。TKPromptCards 原先一次性渲染整库(实测 984 张卡 ≈ 1 万个 DOM 元素 / 4 千个控件,而卡片区仅 300px 高),现改为首屏 60 张 + 滚动补渲染(保留滚动位置、切分类/搜索时收回首屏)。卡片区 DOM 由 ~10052 降到 ~601。options.hidden(原先整体替换 options 会让前端判定失效),消除 12 个整宽遗留 <canvas> 行:canvas 12 → 1 张、占用 10.4MB → 0.8MB。web/js/anima_canvas_perf.js 节点级渲染裁剪:为每个节点写入精确的 content-visibility + contain-intrinsic-size(视口外节点跳过渲染)并做图层提升。Chrome Tracing 实测每帧 Layerize 6.8ms → 3.8ms(−44%),平移帧时 −12% ~ −48%(取决于离屏节点比例)。localStorage.setItem('tk_canvas_perf','0') 后刷新关闭裁剪。civitai.red/models/... 链接此前报「无法解析」——URL 解析只认 civitai.com。现已统一为共用解析函数,civitai.com / civitai.red 及未来镜像域名均可;「手动匹配」与「添加 LoRA」入口同步修复。报错信息也会显示完整链接便于排查。纯前端改动,刷新浏览器(Ctrl+Shift+R)即可生效。/anima/gallery/manifest 与 /anima/gallery/meta)——扫描、PNG 参数解析、LoRA 提取、宽高读取全部在本地后端完成(实测 3571 张约 13 秒建库,增量更新 0.4 秒),索引含正向 prompt 全文与 LoRA 列表(支持 ComfyUI UI/API 双格式与「文本拼接 / tag 库节点运行时组装」类工作流的正向链路回溯)。前端打开 Outputs 时一次拉取清单,列表、预览图、全部按钮同时出现;完整工作流 JSON 仍按需获取。索引首次构建期间界面照常可用,构建完成后自动切换。后端不可用时自动回退旧管线。/anima/thumb 生成的 512px 高质量 WebP(LANCZOS,落盘长期复用,按内容自动失效)。单张从约 1.4MB 原图解码降为 30KB 级小图,首屏与滚动加载接近瞬时,预览图不再模糊;后端不可用或图片不在 output 目录时自动回退旧管线,升级无感知。需重启 ComfyUI 生效。/anima/thumb(第一步,前端暂未接入):为下一版「秒开 + 高清预览」打底。512/768 两档 WebP 落盘缓存(LANCZOS),缓存键含源文件 mtime/size(图一变自动失效),带浏览器强缓存头;路径做严格目录校验。生成走旁路线程且并发限流,不影响出图。此版本前端仍走旧管线,升级无感知。nsfw=false,选「全部」时省略该参数;而 C 站 API 省略 nsfw 等价于仅返回 SFW,导致「怎么选都是 SFW」。现在始终显式传参(全部 → true,仅 SFW → false)。resolvedQuery 判定,本地过滤只用于输入防抖窗口内的即时反馈);空状态节点改为幂等复用,不再残留压在卡片上方。hasMore 解耦(updatePager()):只要抓取过(page>0)就保留分页区,仅在没有下一页时隐藏「加载更多」。crypto.subtle 时整文件 digest;大文件仍分块 + Worker),并带取消检查;取消扫描时 progressHide() 复位状态并提示「⏹ 扫描已取消」。civitai.com / 镜像站 / 自定义域名)与只读 API Key;模型与作者链接随线路变化。部分网络下官方域名不可达时可切镜像站。Comfyui-Anima_camera_angle 的路径加载,未安装该插件的机器上节点永远停留在“正在加载本地 3D 引擎…”。现在插件自带 web/js/three.module.js,优先从本插件加载,外部插件路径仅作兼容兜底。width/height 两个 INT 输出口,颜色链等下游可直接读取尺寸。TK Danbooru Tag Getter:修复旧工作流恢复后分类权重变成 0 的问题;0 会按中性权重 1.0 处理,前端最小可调值为 0.05,避免输出 (tag:0)。
natural_language 输入升级为统一 Prompt 入口;没有分类包时会按本机 Danbooru 数据库自动归类已知 Tag,未知句子由“保留自然语言”控制;每个分类可独立设置 0.0–2.0 权重,已有 Tag 权重会按分类权重相乘。分类索引优先读取 Packer 的 xlsx(直接解析 XML,避免 openpyxl 启动开销),找不到时回退随插件 CSV;旧双输入工作流继续兼容。本次版本对应最近推送的 LoRA 子目录功能。
f83d00e):TK 批量 LoRA 加载器和 TK Toolkit 本地管理面板都会读取 LoRA 根目录下的子目录,并保留相对路径。ad3b2b8):本地工具箱新增按钮,按一级子目录名称自动创建/复用分类,将对应 LoRA 批量归类;重复点击不会重复添加。relativePath,统一用 / 表示子目录,并继续兼容 Windows 反斜杠路径。TK String Router:新增 6 路字符串单选/多选路由,支持接口名称保存和 ComfyUI 风格紧凑面板。TK Danbooru Tag Getter:兼容 TAG_BUNDLE 多选分类,增加正则排除和精准 Tag 排除。TK Prompt Saver:新增 6 路提示词自动保存,支持对应 image_1 到 image_6 预览图,写入共享 anima-lora Prompt 库。anima base、ill、sdxl 等用户自建目录。all(not p.strip()))、SaveImage 前缀正则(imageSave 类名)、负向注入保持原值本次版本包含大量更新(跨多轮开发)。
modelVersionId 的链接(无则自动取默认版本)showDirectoryPicker 时用文件选择扫描(Firefox/夸克旧版/局域网 IP)web/)