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

附录 B 代码索引

全部在 code/。裸 python 的不需要 Krita,可以在外面迭代;Krita 作业要走 run_job.sh

流程主线

文件运行在做什么
trace_prepare.py裸 python读画:分割 → α → 色阶 → 矢量化 → 规划笔画,产出 plan.json + strokes.jsonl4–7, 17–20
job_trace.pyKrita落笔:建 307 节点的树,逐笔画,存盘,数写像素12, 19
gauge.py裸 python判据尺31

拆分

文件入口做什么
segment.pyload / regions / tiers / pick_flat / inpaint / deaa / residual / pseudocolor边界屏障分割、KMeans 分档、以及旧路线的残差分解(保留)
contour.pyalpha_from_image / level_field / trace / to_svg / rasterize解 α、矢量化、自检
cel.pylevels / vectorize / clean_mask / pick_k嵌套色阶
upsample.py_sdf / coverage / upsample_imageSDF;旧路线的升采样(coveragecontour 自检里当对照)
lineart.pydepth_field / thin / trace_paths / rdp / _catmull / to_svg暗脊线稿、RDP、Catmull-Rom

重绘

文件入口做什么
strokes.pySim / wash / soft / hatch / strand / detail / contour_lines / lines六种笔的规划器 + 1x 模拟画布

Krita 侧

文件入口做什么
canvas.pySession / L / G / pump / replay建树、寻址、落笔、换装、像素读写、选区、filter、存盘、作画日志
measure.pymetrics / edge_ratio / report边缘质量
enrich.pyrim_band / orientation / trace_strand轮廓光、方向场、发束(旧路线的加料,保留)
job_selfcheck.py31 项自检
job_landscape.py参考作业:风景

画师流程(另一条线)

文件入口做什么
workflow.pyPyramid / scale_energy / local_contrast金字塔(笔刷尺度递减)、中灰 hard_light、归一化坐标
layout.pyart_treeDavid Revoy 式图层骨架
job_portrait.py参考作业:按金字塔流程画人像(示范流程,造型很糙)

这条线是「从零画」而不是「临摹」,本书主线没用它,但 canvas / measure 共用。它的两条实测规矩:塑造用中灰 + hard_light 单层(中灰叠上去分毫不动,浅灰提亮深灰压暗且保色相);金字塔是笔刷尺度递减不是画布尺寸递增(画布放大会让细节能量逐级递减)。

环境

文件做什么
setup_fedora.sh生成 harness(独立 HOME + autopaint 扩展 + run_job.sh),先 rm -f 再 cp
setup.sh包一层,把画师流程的脚本也拷进去
../paint唯一入口

canvas.Session 速查

s = Session(w, h, "name", journal=True)
s.build(spec) / s.find(path) / s.use(path) / s.on(path) / s.by_role(r) / s.by_label(n) / s.tree()
s.set_preset(name, size, opacity, flow) / s.set_color(r,g,b) / s.brush(color, size, opacity, flow, preset)
s.stroke(pts, pressures, node) / s.path(pts, node) / s.line(pts, width, node) / s.dab(x,y,p,node)
s.ellipse(...) / s.polygon(...)
s.layer(name, blend, opacity, clip, label) / s.group(...)
s.pixels(node, box) / s.projection(node, box) / s.composite(box) / s.set_pixels(rgba, node, box) / s.ground(r,g,b)
s.select(x,y,w,h) / s.select_mask(mask, feather) / s.select_none() / s.erase(box, mask)
s.filter(name, params, node, box)
s.settle(node) / s.stable(fn) / s.flush()
s.stage(label) / s.final() / s.save_kra(path) / s.manifest()