ComfyUI-See-through 插件深度分析笔记
ComfyUI See through 插件深度分析笔记 背景与定位 仓库地址 : 底层学术背景 :基于已被 ACM SIGGRAPH 2026 附条件接收的论文 See through ( )。 核心功能 :这是一款 ComfyUI 插件 ,主要作用是 将单张二次元/动漫平面的插画,全自动拆解成带有前后景深层级(Z depth)的 PSD 文件 。 解决痛点 :对于 Live2D 动画制作(Vt…
ComfyUI-See-through 插件深度分析笔记
背景与定位
- 仓库地址:
https://github.com/jtydhr88/ComfyUI-See-through - 底层学术背景:基于已被 ACM SIGGRAPH 2026 附条件接收的论文 See-through (
https://github.com/shitagaki-lab/see-through)。 - 核心功能:这是一款 ComfyUI 插件,主要作用是将单张二次元/动漫平面的插画,全自动拆解成带有前后景深层级(Z-depth)的 PSD 文件。
- 解决痛点:对于 Live2D 动画制作(Vtuber 皮套、Galgame 角色立绘动画化),画师和绑骨师原本需要花费大量时间手动抠图、拆分图层(如分出前发、后发、眼睛、脸颊),并手动修补被遮挡的部分(Inpainting)。该插件将这一耗时环节完全 AI 化、自动化。
⚡ TL;DR / 工作流概览
- 输入一张动漫角色图片。
- 插件运行底层的
LayerDiff SDXL模型,将角色切割为多达 24 个语义透明图层。 - 运行微调版的
Marigold深度估计模型,为每个图层生成深度图。 - 使用
KMeans聚类算法,根据深度图将图层进一步智能拆分(如左眼/右眼,前发/后发),并自动补全遮挡区域。 - 通过浏览器前端直接导出包含正确图层顺序的
.psd文件。
详细过程:核心技术架构拆解
插件的 Python 入口主要集中在 nodes.py。其封装的核心节点及工作流可以拆解为以下几个主要阶段:
1. 语义分割与透明图层生成 (LayerDiff)
- 核心节点:
SeeThrough Load LayerDiff Model - 底层模型:基于 SDXL 修改的
LayerDiff 3D扩散模型,包含自定义的UNetFrameConditionModel和能处理 Alpha 通道的TransparentVAE。 - 作用机制:通过文本/图像条件,识别并分割出常见的二次元角色部位。
- 支持语义:能够拆解出
hair(头发),face(脸),eyes(眼睛),topwear(上衣),handwear(手套/手部),wings(翅膀)等几十种细分区域,并生成带有精确 Alpha 通道的独立图层。
2. 单目深度估计与层级推断 (Marigold Depth)
- 核心节点:
SeeThrough Load Depth Model&SeeThrough GenerateDepth - 底层模型:针对二次元图像微调的
Marigold深度估计模型。 - 作用机制:虽然第一步切出了不同的图层,但机器并不知道它们在 Z 轴上的先后顺序。此步骤为每个拆解出的图层(如“手套”)生成
float32的深度图 [0, 1],从而建立正确的绘制顺序(Drawing Order),例如:刘海 > 脸 > 身体。
3. 基于深度的智能聚类拆分 (Smart Splitting & Inpainting)
- 核心节点:
SeeThrough PostProcess - 算法依赖:依赖
scikit-learn的 KMeans 聚类。 - 作用机制:
- 左右/前后拆分:第一步可能只会输出一个整体的“头发”图层或“眼睛”图层。此步骤结合深度图和空间位置,利用聚类将“头发”自动切分为“前发(刘海)”、“侧发(鬓角)”和“后发”;将“眼睛”分为左眼和右眼。
- 遮挡补全 (Inpainting):当拆分开图层后,被前面图层(如手臂)遮挡的身体部分会产生空洞。系统会自动调用图像补全算法(结合
cv2或局部扩散),将背后的图层画满,以满足 Live2D 移动时不会穿帮的需求。
4. 输出打包与浏览器端导出 (PSD Export)
- 核心节点:
SeeThrough Save PSD - 作用机制:
- 传统 Python 处理 PSD 非常臃肿且容易出错。
- 作者采用了一种巧妙的前后端分离方案:Python 后端(
nodes.py)只负责将分层图(RGAB numpy arrays)保存为一堆 PNG 图片和描述图层结构、深度的 JSON 元数据(Metadata)。 - 然后,借助 ComfyUI 的前端机制,提供一个
Download PSD的按钮。点击后,浏览器执行 JS 脚本,调用前端的ag-psd库,在用户本地将这些 PNG 和元数据打包合成带有正确混合模式和图层组的 PSD 文件并触发下载。
踩坑总结与环境依赖
| 潜在问题 | 原因 | 解决方案 / 插件做法 |
|---|---|---|
| Python 依赖冲突 | 底层的 see-through 代码库中可能存在与 ComfyUI 或其他插件同名的模块(如 utils, modules)。 |
插件在 nodes.py 中使用了 sys.modules.pop 临时备份同名模块,加载完自己的逻辑后再还原,极其硬核的 Hack 做法,有效避免了命名空间污染。 |
| Mask/RLE 报错 | 原项目使用了 pycocotools 来处理 Mask 的 Run-Length Encoding,但在 Windows 下安装编译较难。 |
插件直接通过 _mock_pycocotools = _types.ModuleType("pycocotools") 注入了一个 Dummy 模块,因为核心拆图流程实际并不依赖它,巧妙绕过了安装门槛。 |
| 模型下载缓慢/失败 | 模型文件庞大且放置位置必须固定。 | 插件会在首次使用时,自动调用代码从 HuggingFace 对应的 Repo 下载模型到 ComfyUI/models/SeeThrough/ 目录中。建议网络环境不佳的用户提前手动下载放入该目录。 |
总结
- 技术纯度:这是一个典型的将前沿学术成果(SDXL 透明图层生成 + Marigold 二次元微调深度 + KMeans 传统视觉后处理)工程化、产品化的优秀范例。
- 实用价值:极大赋能了二次元游戏资产管线,使得 Live2D 拆建模型的起步门槛和人工成本大幅降低。对于你的工作流(游戏开发与 AI 结合)来说,这是一个非常值得引入和研究的提效工具。