gradetwo

yanshi-painting

用 yanshi 的 MCP 笔触工具画"一笔一笔看都真实"的画 —— 大笔起手、一笔承载一块体积、用罩染代替平涂。适用于让 AI 通过 brush_stroke / medium_stroke 作画,或诊断"看起来像填色"的作品。

gradetwo 1 Updated 1w ago

Resources

1
GitHub

Install

npx skillscat add gradetwo/yanshi/yanshi-painting

Install via the SkillsCat registry.

SKILL.md

大笔起手,一笔一块体积

这份 skill 解决什么

用 yanshi 画出来的图,最常见的两种失败观感:

  1. 填色感 —— 像把线稿涂满。直因:用 bucket / fill_region 起稿,或用大量小笔堆满区域。
  2. 一笔一笔看时不像手画的 —— 直因:单笔一个尺寸、一个不透明度平铺,没有起收笔、没有笔内浓淡。

∴ 问题不是引擎缺能力 ✗ —— 下面这些开关本来就有,只是没被用起来。

必须记住的六个参数(都是实测读出来的)

参数 值 作用
size 大(覆盖笔刷自带半径,单位是直径像素) ∴ 大笔起手靠它
humanize 缺省就是 true ⇒ 别关 没给压力时自动套非对称起收笔包络(起 12% / 行 60% / 收 28%)
pressure_curve "auto"(推荐),别用缺省的 flat 按曲率自动分配压感 ⇒ 笔内有浓淡
glaze + glaze_passes true,遍数 3 起(8 遍饱和) 罩染:单笔自动拆成多遍微偏移薄涂 ⇒ 皮肤 / 暗部的丝滑渐变
tremor + tremor_seed 0.2–0.5,同种子同波形 生理颤动(手腕 λ≈90px + 震颤 λ≈28px,沿局部法向)
points [[x,y,pressure,time_ms],…] 给毫秒时间戳 ⇒ 引擎算真实速度(吃速度的笔刷才活)

辅助:dwell(0..1,拐角多插点 ⇒ 颜料更足)、color / color_to(一笔内变色)。

作画流程(四遍,按顺序)

第一遍:大笔铺块面(这一步决定"不是填色")

  • size 直接给大值,把全幅拆成 5–9 块:背景 / 暗部 / 中间调 / 亮部。
  • 每块 1–3 笔完成,笔触越过轮廓(后面再收)。
  • 大块之间的过渡不要手拼:用 gradient_blend —— 它就是"手动拼 20 笔"的服务端替代,且逐笔调用同一条落笔实现(与手画观感一致)。
  • 禁用:bucket、fill_region 起稿 ✗(填充只允许用于最后统一底色灰这一种用途)。

第二遍:压出体积

  • 同色系大小笔交替,顺着形体方向走:盘发的旋、肩的弧、裙的垂。
  • 暗部 / 皮肤用 glaze: true 罩出来,而不是一次涂死。
  • 开启 pressure_curve: "auto" + tremor(带种子),让每一笔自身有浓淡与微颤。

第三遍:锚点收细节

  • 只在持久锚点用小笔:脸、手、蕾丝、薄纱边缘。
  • ∴ 小笔总数压到最低 —— 这既让画面真实(大笔是主体),又压住对象数(少笔 ⇒ 折叠开销不涨)。

第四遍:自检("一笔一笔看"清单)

  • 起收笔看得见(不是两端齐平)—— 若齐平 ⇒ 检查是否误关 humanize。
  • 单笔内部有浓淡变化 —— 若没有 ⇒ 检查 pressure_curve 是否还是 flat。
  • 大块面是罩出来的、能透出底色 —— 若一次涂死 ⇒ 用 glaze。
  • 边缘软硬不一(不要一圈同样硬)。
  • 全图找不到"填满"的边界 —— 若找得到 ⇒ 说明起稿用了填充或小笔平铺。

反模式(明写,别做)

  • ✗ 用 bucket / fill_region 起稿。
  • ✗ 小笔先描边、再涂满。
  • ✗ 单笔一个不透明度平铺大面积。
  • ✗ 把 humanize: false 与 pressure_curve: "flat" 当默认(那是"精确复现控制点"用的,不是画画用的)。
  • ✗ 一上来就抠细节(脸画得很准、块面是平的 ⇒ 观感立刻假)。

细节见 references/anti-patterns.md。

笔法不能只有大小:柔 / 薄 / 堆 / 刀

症状:笔触只有"大小粗细"的变化 ⇒ 整幅像一层层平叠,
最后还能看见填色的边缘线 ✗,细节一模糊就偏 ✗。

根因:只用了 size 一个维度 ✗。油的画味来自同一张画里同时出现厚薄软硬 ✓。

五样笔法(本仓的真实实现)

笔法 用什么 关键参数
柔(揉开、消边线) smudge 工具,或 classic-knife 笔刷 smudge = 1.0 ⇒ 把画布上已有的颜色拖开
薄涂(透底) 任何笔画 glaze: true ⇒ 单笔自动拆成多遍微偏移薄涂;glaze_passes 3 起,8 遍饱和
堆(厚) add_filter impasto
层间融合 set_layer_blend —
肌理 texture_background / list_textures —
擦(干笔) 本仓没有这个参数 ✗ 近似:scatter_strokes 低 opacity_range + 小 size_range

★ 刀与揉有一个前提:必须先有底色

smudge(以及靠它工作的 classic-knife)是涂抹类——它抹开画布上已有的颜色。

∴ 空白画布上它什么都不出,那是正确行为,不是坏了 ✓。

∴ 所以顺序是有物理原因的,不是构图偏好:

  1. 先用大笔铺 5–9 块底色(第一遍,size 给大,越过轮廓);
  2. 再用 smudge / classic-knife 把上下两笔的接缝揉在一起 —— 这一步消掉"填色边缘线"和一层层叠加的痕;
  3. 需要透底的地方用 glaze,需要厚的地方用 impasto ⇒ 一张画里厚薄都有;
  4. 最后才在锚点收细节。

细节精度:模糊要有边界

脸 / 手 / 蕾丝不许被 smudge 扫到 ✗ —— 那是"一模糊就偏"的来源。
smudge 只允许用在非锚点区(背景、衣料大面、暗部过渡)。

Categories