5 Commits
Author SHA1 Message Date
rui40000andClaude Opus 5 becde22105 优化 Unmult 批处理:改 torch 分块运算,124 帧提速 3.8 倍
原实现逐帧 numpy 处理再 torch.stack,124 帧 1024x1024 需 9.98 秒。
瓶颈有二:单帧内近十次中间数组分配(每份 12MB),以及 numpy 绝大多数
算子单线程、多核闲置。

改动:
- 核心运算改用 torch 算子分块处理,走 CPU 多线程;原地运算压掉中间分配
- 结果直写预分配张量,省掉最后那次 stack 大拷贝
- 主体 mask 的 resize 移出循环,不再对同一张 mask 重复缩放 B 次
- 分块而非整批,控制中间量内存峰值

实测 9.98s -> 2.61s(3.82x)。与旧实现 24 组对拍全部逐元素一致,
涵盖黑/白/绿幕/自定义底色、黑白点、mask 的四种形状、主体保护开关、
旧英文参数名、RGBA/单通道输入。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 17:36:45 +08:00
rui40000andClaude Opus 4.8 a1f52de801 feat: Unmult 增加「主体保护」开关,控制是否采纳 subject_mask
subject_mask 的合并逻辑此前已存在,本次补上开关:
- 启用(默认):alpha 取 max(unmult 结果, subject_mask)
- 关闭:即便上游已连线也完全不采纳,等同纯 Unmult
想对比「有无 AI 介入」的差别时拨开关即可,不必拔线。
兼容旧英文名 use_subject_mask。

顺带把黑点/白点 tooltip 里的「(主体保护)」字样去掉 —— 那是描述
参数作用的措辞,和新开关撞名会让人以为是同一功能。

实测(黑底 + 暗色实体,alpha 真值恒为 1,下半近纯黑):
  不接 mask              暗部 alpha 0.080  ← 黑衣黑发被扣穿
  接 mask + 保护启用      暗部 alpha 1.000
  接 mask + 保护关闭      暗部 alpha 0.080,与不接 mask 逐元素一致
即开关确实起作用,且关闭时行为与纯 Unmult 完全等价。

这同时解掉了上次记录的适用边界:黑底 unmult 本质是拿亮度当不透明度,
对实体不成立;现在接一路语义抠图的 alpha 进 subject_mask 即可破解 ——
语义模型负责「哪里是主体」,Unmult 负责「边缘有多透」。README 已按此改写。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 15:44:32 +08:00
rui40000andClaude Opus 4.6 adb1de6329 feat: Unmult 节点新增 AI 主体保护(可选 subject_mask 输入)
接入 FeyNobg/Lucida/BiRefNet 等抠图节点输出的 mask,
执行 max(unmult_α, subject_mask) 合并,
防止主体中与背景色相近的区域被误判为透明。
不连接时行为不变,向后兼容。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-08-18 12:00:04 +08:00
rui40000andClaude Opus 4.8 ea632a54d1 style: Unmult 的黑点/白点改为中文滑块,与 LayerStyle 观感一致
两项参数加 "display": "slider",界面从带箭头的数字框变成滑块;
参数名直接用中文「黑点」「白点」,这样不依赖 i18n 语言包,
任何语言环境下都显示中文(LayerStyle 显示中文是靠它自带的翻译文件)。

中文名无法作为函数形参,故 unmult() 改用 **kwargs 接收,
同时兼容旧的 alpha_low / alpha_high,早先保存的工作流不会失配。

验证:display=slider 生效、tooltip 保留、取值范围与步进不变;
黑点 0.2 使全透明占比 0.031→0.219,白点 0.7 使全不透明占比
0.016→0.312,参数确实起作用;旧英文名调用照常工作。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 14:42:12 +08:00
rui40000andClaude Opus 4.8 bc433bc24a docs: 核实 Unmult 节点并补充 README(含实测适用边界)
节点为纯数学去底(等效 AE Unmult):纯色底合成图满足
C = aF + (1-a)B,背景色已知即可反解出前景色与 alpha,
无需模型推理,且能真实保留半透明层次。

核实结果:
- 已正确注册进 __init__.py(无外部依赖,裸 import 与仓库惯例一致)
- 4 个参数均带中文 tooltip,符合本仓库的统一规则
- 分类 Rui-Node/抠图 与其余抠图节点一致,支持批量

验证(构造已知合成图反推真值):
- 发光素材在黑底/白底/绿幕下,alpha 与前景色平均误差均为 0.0000,
  数学上是精确解
- 黑白点参数、批量输入、RGBA/MASK 双输出均正常

同时测出一条必须写进文档的适用边界:
黑底 unmult 本质是拿亮度当不透明度,这对发光物成立、对实体不成立。
同一实体素材(alpha 真值恒为 1)实测——
  黑底:亮部 0.900,暗部仅 0.080(黑头发/深色衣服/鞋会被扣穿)
  绿幕:亮部 0.900,暗部 0.940,正常
故黑底的角色素材仍应走 Lucida / FeyNobg 等语义抠图,
unmult 留给光效、火焰、粒子与绿幕素材。README 补了四个抠图节点的选型表。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 14:10:04 +08:00