Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

16 .kra 交付规范

✅ 已验证layers.json 那一节 🧪)

三件套

s.final() 落在 work/output/<作品名>/,名字固定,重跑覆盖:

文件给谁内容
final.kra画师完整 layer stack;clip / blend / opacity / color label / 矢量层 往返无损(实测)
final.png预览合成结果
strokes.jsonl回放 / 审计每一笔(第 22 章
layers.json后续 AI每层的 path / blend / opacity / clip / label / bounds / uid
stages/NN-*.png过程每个 s.stage() 一张

命名文法

顶层组   NN_Name         01_BG  04_Color  06_Line  09_Post
部件组   Part            Hair_Front  Skin_Face  Dress_Frill
色阶组   Part_Role       Hair_Front_Flat  Hair_Front_Shadow1
叶子     Shape / Soft / Marks    (在色阶组内)

Role ∈ { Flat, Shadow1, Shadow2, …, Light1, Light2, … }。部件名全局唯一 ⇒ 色阶组名全局唯一。

color label 是第二索引

findChildNodes(colorLabelIndex=N, recursive=True) 是 Krita 唯一自带的「按语义批量取层」入口,在 docker 里就是一条彩色条——一个字段同时喂画师和程序。

label语义
2Lineart
3Flat
4Shadow
5Light
8辅助(BG / Post)

画师接手时怎么改

想做动哪里
换一个部件的固有色改该部件 _Flat/Shape 矢量的填充色
调阴影形状_ShadowN/Shape 的路径(矢量,可拖节点)
重画某一块的质感清掉 Soft / Marks,在上面画——clip 仍然生效
隐藏所有笔画看纯色阶按 label 批量隐藏 Soft / Marks
移动一个部件整组移动;被遮挡区是空的(第 8 章

体积

.kra
旧路线(103 层光栅,8K)181 MB
只有矢量层(15 层,8K)13.8 MB
现在(307 节点,8 万笔)323 MB

矢量层几乎不占空间;体积全在笔画层的 tile。存盘 4–5s。

layers.json:🧪 一个已知的不一致

layers.jsonSession.manifest() 生成,它遍历的是 s.index——而 s.index 只由 s.build(spec) 填。第五版的 job_trace.py 直接用 doc.createGroupLayer / createVectorLayer 建树,没走 build(),于是 manifest() 拿到空索引,layers.json 没有被重新生成。现在目录里那份是旧路线留下的(103 层,paintlayer,与 .kra 里的 307 节点不符)。

修法有两条:让 job_trace.py 建完树后自己遍历 doc.rootNode()s.index;或让 manifest() 不依赖 index,直接递归 childNodes()。后者更对。没做,所以标 🧪。

还能往里塞什么

三样实测建得出、不改画面、.kra 往返不丢的(第 30 章):

东西给画师的价值
doc.createSelectionMask(name) + mask.setSelection(sel)每个部件一个现成选区,点一下就能只改那个部件
doc.createFileLayer(name, 源图路径, "None")源 diffusion 图作为对照层躺在最上面,随时开关
doc.createCloneLayer(name, source)重复部件只存一份;改源,克隆跟着变

调色板进不去Palette / Swatch 在内存里加得进去,但 save() 返回 False 不写盘,而且没有 Document 级的 palette API。图层样式也进不去(第 31 章)。

往返保真的依据

probes/probe_vector.py 与自检第 196–200 项:.kra 存了再开,层数、inheritAlpha、blend / opacity / label、4 个矢量层及其 toSvg() 全部保真。