从扩散图到分层原画
diffusion-to-painting —— 把一张 AI 生成的平面图,变成一张每个像素都有来历的分层原画。
一张 diffusion 图看起来是画,但它不是画出来的:没有图层、没有笔触、放大就糊、边缘是像素格子。 这本书记录一条把它变成可交付原画的完整流程,以及沿途每一个被实测过的结论和踩过的坑:
一张 diffusion 图
│
├─ 拆分 分割成语义部件, 从抗锯齿边解出亚像素边界, 切色阶, 轮廓矢量化
├─ 补全 被遮挡的部件补完整 (📐 设计稿, 未实现)
├─ 叠层 在 Krita 里按画师的图层顺序叠回去: 剪影矢量做底, 每个色阶自成一组
├─ 重绘 在每个色阶的形状里一笔笔画: 平涂 / 柔和过渡 / 排线 / 发丝 / 细节 / 线稿
├─ 记录 每一笔写进 strokes.jsonl, 可回放
└─ 验收 归一到同一尺度, 以源图为锚, 量边、量色阶、量放大指纹
终点是一份 8192×12288 的 .kra:307 个节点、74 个矢量层、8 万笔,写像素只有 2 次(背景铺黑)。
怎么读
- 只想跑起来 → 附录 A 命令速查,然后 第 1 章 一图流
- 想知道为什么这么做 → 从 前言 顺着读
- 要接手改代码 → 附录 B 代码索引 + 第 22 章 strokes.jsonl 规范
- 要在 Krita 里做别的事 → 第七部 Krita 无头能力
- 想少走弯路 → 第 34 章 量错对象案例集,这一章是全书最贵的部分
完整目录在左侧边栏。
状态标记
每章第一行有一个标记,这是本书的诚实性所在——没量过的东西不会混进量过的表里:
| 标记 | 含义 |
|---|---|
| ✅ 已验证 | 有探针或实测数据,数字可复现 |
| 🧪 在做 | 跑通了,但没有收敛到满意 |
| 📐 设计 | 只有接口和验收标准,没跑过 |
仓库布局
book.toml mdBook 配置
src/
README.md 封面(本文件)
SUMMARY.md 目录
00-前言 … 99-附录 正文, 按流程分八部 + 附录
assets/ 对比图、参考画特写、中间产物
code/ 配套代码: 分割 / 矢量化 / 规划笔画 / Krita 落笔 / 判据
probes/ 探针: 每个回答一个「Krita 无头下到底行不行」的问题
paint 唯一入口脚本
环境
Fedora 44 · Krita 6.0.2.1(RPM)· PyQt6 · Xvfb · Python 3.14(numpy / scipy / scikit-learn / Pillow / matplotlib)。
Krita 5.x 没有 Node.paintLine,本书代码不兼容 5.x(第 26 章有说明)。
./paint setup # 装 harness (独立 HOME, 不碰你自己的 Krita 配置)
./paint check # 31 项自检
./paint trace # 把 work/input/origin.png 临摹成 8K 分层原画, 约 8 分钟