想象你有一间名叫 Krita 的专业画室:画布、笔刷、图层、选区工具一应俱全,所有设备都称手。但有些活儿依然磨人——把一块空白背景补成夕阳云海、把线稿快速变成氛围图、把竖构图延伸成横版封面,哪怕老手也要耗上几小时。于是你请来了一位“AI 学徒”:它翻阅过数百万幅名画,脑子好比一部浓缩的艺术史。这位学徒就是 Krita 的 AI 插件,它背后站着开源社区训练的 Stable Diffusion(简称 SD)模型。你负责构图、描线、调色,学徒负责让粗糙的草图变细腻、把空白处补上内容、按你的要求重画某个局部。它不抢你的画笔,只在需要时伸手帮忙——这就是“Krita + SD 集成”的日常。而且整条链路开源可自持,你的画稿始终留在本地画室里,不必上传任何云端。接下来,我们一步步参观学徒的工具箱、它背后的“中央画材库”,以及如何把它用得像个真正的助理画师。

岗位关联

掌握 Krita + Stable Diffusion 的集成技能,意味着你能在专业绘画软件里直接调用开源 AI 生产能力,把重复试错交给模型、把创意掌控留给自己——这是 AIGC 时代数字艺术家的核心生产力。

目录
  1. 可视化演示
  2. 插件生态概览:画室来了 AI 学徒
  3. 基础集成配置:给学徒办门禁卡
  4. ComfyUI后端:中央画材库
  5. 局部重绘:只改画面上的一块
  6. 图像扩图:给画纸接上一段白边
  7. 风格迁移:让学徒换一种笔触
  8. 图层式工作流:透明描图纸上的大胆尝试
  9. 专业实战:从草稿到出品
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示Krita通过ComfyUI后端集成Stable Diffusion的架构流、局部重绘Inpainting选区生成、以及扩图Outpainting画布延展与风格迁移操作。

本节配有交互动效(进入视口后自动加载,约 3KB)。

架构集成:Krita->ComfyUI->SD Krita插件通过Socket/HTTP连接ComfyUI SD模型 SD1.5/SDXL+LoRA 图层式生成 Krita -> Plugin -> ComfyUI -> SD 非独立工具,扩展插件+后端服务架构

插件生态概览:画室来了 AI 学徒

你的画室 Krita 本来只有传统工具:笔刷、油彩、刻刀。直到 2022 年 Stable Diffusion 开源,社区里立刻有人做出了“AI 学徒中介”——Krita AI 插件。它像画室门口挂的一块招工牌:任何会跑 SD 的“大脑”(后端)都能被请进来,坐在你旁边的空位上待命。插件生态最早只有单机脚本,后来演变成带面板界面的成熟工具:你在侧边栏输入一句“暴风雪中的灯塔”,点一下生成,画布上就多出一层新画面。

插件本身并不创造图像,它更像一张“翻译合同”:把你画布上的图层、选区、蒙版翻译成后端能懂的语言,再把后端吐出的像素翻译回 Krita 的图层。安装时,社区通常会让你配好 Python 环境与虚拟目录(venv),就像学徒入职前要交体检报告。这也是新手最容易卡住的地方——不是画画难,而是“办手续”难。好在社区文档和视频教程已经非常齐全,照着流程走一遍,多数人都能在一小时内让学徒上岗。

从更技术的角度看,插件的工作本质是驱动一次 SD 图像合成。一次生成可简写为:

选插件就像选学徒:看它接不接得住画室的活——能否局部重绘、能否扩图、能否读蒙版——再看社区是否活跃。生态繁荣的插件,背后往往有一群人不断教你调参数、分享新模型。挑一个维护活跃的插件,等于给画室请来一位“成长型”学徒。

Inew=G(z,p;θsd)I_{\text{new}} = \mathcal{G}(\boldsymbol{z}, \boldsymbol{p}; \theta_{\text{sd}})
这个公式的意思是:给生成器一个随机起点、一句文字指引和一组学来的“手艺参数”,它就能吐出一幅新图像。
  1. 生成器 $\mathcal{G}$Stable Diffusion 中的 U-Net 主网络,负责把噪声一步步还原成画面。
    G(z,p;θsd)→I\mathcal{G}(\boldsymbol{z}, \boldsymbol{p}; \theta_{\text{sd}}) \to I
  2. 随机噪声 $\boldsymbol{z}$生成起点,来自标准正态分布;插件里固定 seed 就是固定这组随机数。
    z∼N(0,I)\boldsymbol{z} \sim \mathcal{N}(0, I)
  3. 提示词向量 $\boldsymbol{p}$文本编码器把“暴风雪中的灯塔”这串文字变成条件向量,指引生成方向。
    p=Encodertext(prompt)\boldsymbol{p} = \text{Encoder}_{\text{text}}(\text{prompt})

基础集成配置:给学徒办门禁卡

学徒上岗前要办门禁卡:Krita 插件必须知道“大脑”住在哪。你需要在插件设置面板里填上后端地址,比如本地运行的 ComfyUI 默认地址 http://127.0.0.1:8188。填对后点“连接”,插件面板会显示版本号,门禁卡就算生效。如果后端部署在远程服务器,则换成那台机器的 IP 与端口。这个动作的本质,是让 Krita 与 SD 后端建立 HTTP 通信——插件每次点生成,都会向后端发送一份“订单”,后端把画好的图返回来。

接下来是模型库管理。学徒的“大脑”里不可能只装一位大师:有擅长写实的 checkpoint,有擅长水彩的 LoRA,还有负责解码图像的 VAE。你得在设置里指定模型目录,并在面板上切换当前使用哪个模型。模型管理混乱,就像库房堆满颜料却找不到要的那支——所以经验丰富的用户会把模型按风格分目录,命名带上版本号,并在插件里保存“常用模型组合”。生成参数也在这里设置:采样步数(Steps)决定学徒反复修改的次数,CFG 系数决定它听话的程度,分辨率决定画布的精细度。这些参数直接影响出图质量,也是新手最容易随手乱调的地方。

插件内部做的工作,可以用扩散模型的前向噪声过程来理解。训练时,模型见过成千上万张图片从清晰变模糊再变噪的过程:

门禁办好了,画室才算真正开门营业。你会发现:只要后端地址在、模型目录对、采样参数不夸张,学徒立刻能听懂指令。配置的每一分钟,都是在为后面的流畅创作铺路。

zt=αˉt z0+1−αˉt ε\boldsymbol{z}_t = \sqrt{\bar{\alpha}_t}\,\boldsymbol{z}_0 + \sqrt{1-\bar{\alpha}_t}\,\boldsymbol{\varepsilon}
它描述了“噪声一点点盖住画面”的过程。生成时,模型把这个过程倒着放电影,从纯噪声里一步步找回清晰的图像。
  1. 干净图像 $\boldsymbol{z}_0$没有被噪声污染的原图,对应你画布上的干净底稿。
    z0\boldsymbol{z}_0
  2. 加噪图像 $\boldsymbol{z}_t$第 $t$ 步时原图与噪声的混合结果,$t$ 越大越模糊。
    zt=αˉt z0+1−αˉt ε\boldsymbol{z}_t = \sqrt{\bar{\alpha}_t}\,\boldsymbol{z}_0 + \sqrt{1-\bar{\alpha}_t}\,\boldsymbol{\varepsilon}
  3. 信号保留率 $\bar{\alpha}_t$从 1 逐渐衰减到 0,控制每一步保留多少原图信息。
    αˉt=∏i=1tαi\bar{\alpha}_t = \prod_{i=1}^{t}\alpha_i
  4. 高斯噪声 $\boldsymbol{\varepsilon}$标准正态分布的随机扰动,是“混乱”的来源。生成时模型负责把它一点点擦掉。
    ε∼N(0,I)\boldsymbol{\varepsilon} \sim \mathcal{N}(0, I)

ComfyUI后端:中央画材库

学徒背后有一个“中央画材库”,在 Krita AI 插件体系中,它通常就是 ComfyUI。ComfyUI 是一个节点式工作流引擎:模型加载、提示词编码、采样器去噪、VAE 解码、图像保存,每一个环节都是一个可拖拽的节点,节点之间用连线串联成流水线。就像画室里有一排柜子:左边放画纸,中间放颜料,右边放画笔,学徒画画时按流水线取用,井井有条。

Krita 插件通过 ComfyUI 的 API 端口对接。你在 ComfyUI 里预先搭好一张工作流(比如“文生图”或“图生图+局部重绘”),保存成 JSON 模板;插件端把这张模板加载进来,只替换其中的提示词、蒙版图片和随机种子,然后向后端发起请求。ComfyUI 收到请求后按节点顺序执行,最后把生成的图像通过 API 返回。桌面端部署时,你需要一张足够显存的显卡——通常 8GB 以上跑 512 分辨率比较流畅;如果你只想远程调用别人搭好的服务,也可以只配置 API 地址,不让本机参与计算。

从概率的角度看,后端做的是条件去噪:每一步,它都在“提示词、参考图、蒙版”等条件的引导下,猜测上一步更清晰的图像长什么样。

好的后端就像靠谱的库房管理员:你只需在 Krita 面板里说一句“要什么画材”,它就能按流水线把画材备齐。ComfyUI 的节点化设计还带来一个额外好处——工作流模板可以在团队里共享,新人拿到模板就能复现同样的画风。

pθ(xt−1∣xt,c)p_\theta(\boldsymbol{x}_{t-1} \mid \boldsymbol{x}_t, \boldsymbol{c})
这行公式可以读作“在已知当前模糊图 $\boldsymbol{x}_t$ 和条件 $\boldsymbol{c}$ 时,模型认为上一步清晰图是 $\boldsymbol{x}_{t-1}$ 的概率”。条件 $\boldsymbol{c}$ 越明确,它猜得越准。
  1. 当前步图像 $\boldsymbol{x}_t$正在被去噪处理的中间画面。
    xt\boldsymbol{x}_t
  2. 上一步图像 $\boldsymbol{x}_{t-1}$比当前更清晰一步的画面,模型每次只往前推一小步。
    xt−1∼pθ(⋅∣xt,c)\boldsymbol{x}_{t-1} \sim p_\theta(\cdot \mid \boldsymbol{x}_t, \boldsymbol{c})
  3. 条件 $\boldsymbol{c}$提示词、参考图、蒙版等“创作指令”的集合。
    c=Enc(prompt,Iref,M)\boldsymbol{c} = \text{Enc}(\text{prompt}, I_{\text{ref}}, M)

局部重绘:只改画面上的一块

你正在画一幅风景,右下角的房子怎么看都不顺眼。重画整幅?太浪费。这时候你需要一卷“纸胶带”——把不想动的区域遮起来,只让学徒在露出的那块地方重画。Krita 插件里的做法是:用选区工具框出房子,点击“蒙版”按钮,选区就变成了一张黑白蒙版;在提示词里输入“一栋带烟囱的石头小屋”,调好参数点击生成。结果只有蒙版内的像素被替换,周围的树和天空保持原样。

蒙版是局部重绘的灵魂。它在数学上是一个与画布同尺寸的 0/1 矩阵:1 的位置代表“请 AI 重画”,0 的位置代表“保持原稿”。合成公式非常直观:

实际操作里,去噪强度(Denoising Strength)是新手最容易忽略的旋钮。这个值越低,AI 越忠实于蒙版区域里原有的轮廓;越高,AI 发挥空间越大,但可能把原有结构改得面目全非。局部重绘就像给学徒划了块“责任田”——你告诉它田里种什么、多大自由度,它就不会越界碰你的菜园。

I′=M⊙Igen+(1−M)⊙IorigI' = M \odot I_{\text{gen}} + (1 - M) \odot I_{\text{orig}}
用大白话说:最终画面 = 蒙版盖住的区域用 AI 新画的内容,其余区域全部沿用原稿。$\odot$ 是“逐像素相乘”,就像按蒙版做二选一。
  1. 原图 $I_{\text{orig}}$你手绘的原始画面。
    IorigI_{\text{orig}}
  2. 生成图 $I_{\text{gen}}$AI 在蒙版区域内新生成的内容。
    Igen=SD(prompt,seed)I_{\text{gen}} = \text{SD}(\text{prompt}, \text{seed})
  3. 蒙版矩阵 $M$与画面同尺寸的 0/1 矩阵,1 表示重绘,0 表示保留。
    M∈{0,1}H×WM \in \{0, 1\}^{H \times W}
  4. 逐元素相乘 $\odot$让每个像素根据蒙版值选择来源。
    I′=M⊙Igen+(1−M)⊙IorigI' = M \odot I_{\text{gen}} + (1-M) \odot I_{\text{orig}}

图像扩图:给画纸接上一段白边

竖构图画完了,甲方却说要横版封面。传统做法是拉伸画布,结果画面被压变形。扩图(Outpainting)的思路是:在画布四周添加空白区域,让 AI 根据现有画面的边缘像素“顺着笔迹往外接续画”。就像你在一幅未完成的画卷边缘贴上新的空白纸,请学徒猜测画家会怎么继续落笔。

扩图的难点在于边缘过渡。Krita 插件通常把扩图拆成多次小步扩展:每次只往外扩一小段(比如 64 像素),生成后用边缘融合技术把新老画面无缝拼接,然后再次扩展。如果一次性扩出巨大区域,AI 会因为缺少参照而画出诡异的延伸。数学上,接缝融合可以看作一个位置相关的加权平均:

扩图还特别适合构图调整:把人物从画面中央移到黄金分割点,或者把特写镜头“拉远”变成全景。你只需要在扩展方向描述远景元素——“更多的天空、远山、湿地”——AI 就会沿着你的提示词继续讲这个故事。

Iseam(x)=(1−w(x)) Ileft(x)+w(x) Iright(x)I_{\text{seam}}(x) = (1 - w(x))\, I_{\text{left}}(x) + w(x)\, I_{\text{right}}(x)
其中 $x$ 是接缝附近的像素位置,$w(x)$ 是一个从 0 平滑长到 1 的权重。离旧画越近越信任旧画,离新画越近越信任新画,中间地带则两边各取一半。
  1. 左侧旧图与右侧新图$I_{\text{left}}$ 是原始画面边界处的像素,$I_{\text{right}}$ 是 AI 新扩展出的像素。
    Ileft(x),Iright(x)I_{\text{left}}(x), \quad I_{\text{right}}(x)
  2. 权重函数 $w(x)$随位置从 0 线性过渡到 1,决定新旧像素的信任比例。
    w(x)=x−x1x2−x1w(x) = \frac{x - x_1}{x_2 - x_1}
  3. 融合结果 $I_{\text{seam}}$加权混合后的接缝像素,过渡自然无断层。
    Iseam(x)=(1−w(x)) Ileft(x)+w(x) Iright(x)I_{\text{seam}}(x) = (1-w(x))\,I_{\text{left}}(x) + w(x)\,I_{\text{right}}(x)

风格迁移:让学徒换一种笔触

线稿画好了,但你纠结:是厚涂油画的质感,还是水彩的轻盈?风格迁移就是请一位“风格大师”借用你的构图重新画一遍。在 Krita 插件中,你可以加载一张风格参考图(比如莫奈的睡莲),设置风格强度,然后基于当前画布生成新版本。构图骨架保持不变,但笔触、配色、纹理都向参考风格靠拢。

风格迁移的本质是在“内容”和“风格”之间找平衡。模型一边希望输出保留原图的结构布局,一边希望输出模仿参考图的纹理色彩。用损失函数来衡量这两项目标:

风格强度调低,相当于对大师说“你稍微带一点自己的味道就行”;调高,则是“这幅画你说了算”。在 Krita 插件里,建议先给一个中等强度看看效果,再逐步微调——毕竟学徒学得快,你喊停也要喊得快。

Ltotal=αLcontent+βLstyleL_{\text{total}} = \alpha L_{\text{content}} + \beta L_{\text{style}}
$\alpha$ 控制“内容像不像原图”,$\beta$ 控制“风格像不像参考图”。把 $\beta$ 调大,风格更浓烈;把 $\alpha$ 调大,内容更忠实。
  1. 内容损失 $L_{\text{content}}$衡量输出图与原图在结构、轮廓上的差异,差异越小越像。
    Lcontent=∥Fout−Forig∥2L_{\text{content}} = \lVert F_{\text{out}} - F_{\text{orig}} \rVert^2
  2. 风格损失 $L_{\text{style}}$衡量输出图与风格参考图在色彩、纹理统计上的差异。
    Lstyle=∥ϕ(Iout)−ϕ(Iref)∥2L_{\text{style}} = \lVert \phi(I_{\text{out}}) - \phi(I_{\text{ref}}) \rVert^2
  3. 权重系数 $\alpha, \beta$调节天平倾斜方向的旋钮。
    Ltotal=αLcontent+βLstyleL_{\text{total}} = \alpha L_{\text{content}} + \beta L_{\text{style}}

图层式工作流:透明描图纸上的大胆尝试

传统上,画手想把一个元素画坏了重画,常常要动用橡皮擦和撤销历史,代价高昂。图层式 AI 生成给出了更优雅的答案:让学徒在独立的“透明描图纸”上作画。Krita 插件支持把生成结果放到一个新图层——AI 生成图层——它和你的手绘基层完全分离。不满意?双击图层,修改提示词,重新生成,描图纸换一张,底下的铅笔稿毫发无伤。这就是“非破坏性编辑”的精髓。

图层混合时,唯一需要关心的数字是透明度。AI 生成图层可以像普通图层一样调节不透明度,让 AI 画面与手绘基层按比例融合。一张半透明的 AI 草稿铺在手绘稿上面,既能提供参考,又不遮挡你原有的线条。标准 alpha 混合公式描述了这个过程:

“画不好就换一张描图纸”,这句话听起来简单,却是专业工作流的重要护栏。AI 生成图层让创作变成了“可控的冒险”:你可以放心大胆地让学徒尝试各种离谱的方案,只要它画在独立图层上,你就永远保有拒绝的权利。

Cout=αlayerCAI+(1−αlayer)CbaseC_{\text{out}} = \alpha_{\text{layer}} C_{\text{AI}} + (1 - \alpha_{\text{layer}}) C_{\text{base}}
$\alpha_{\text{layer}}$ 是 AI 图层的不透明度:1 表示完全显示 AI 画面,0 表示完全显示手绘基层。中间值让两层画面“叠着看”。
  1. 基层颜色 $C_{\text{base}}$手绘草稿在当前像素的颜色值。
    CbaseC_{\text{base}}
  2. AI 层颜色 $C_{\text{AI}}$AI 生成图层在当前像素的颜色值。
    CAIC_{\text{AI}}
  3. 透明度 $\alpha_{\text{layer}}$取值 0 到 1,控制 AI 层的显隐程度。
    αlayer∈[0,1]\alpha_{\text{layer}} \in [0, 1]
  4. 合成输出 $C_{\text{out}}$两层按比例混合后的最终像素。
    Cout=αlayerCAI+(1−αlayer)CbaseC_{\text{out}} = \alpha_{\text{layer}} C_{\text{AI}} + (1 - \alpha_{\text{layer}}) C_{\text{base}}

专业实战:从草稿到出品

当所有工具都上手,真正的价值在于把它们串成一条工作流。一位概念设计师的典型日常可能是:先在 Krita 里用硬笔刷画出 5 分钟速涂,确定构图;然后用 AI 插件局部重绘,把最粗糙的天空换成有氛围的云层;再用扩图把画布从竖版变横版,补充两侧场景;最后新建 AI 生成图层做风格迁移,尝试“写实厚涂”和“哑光动画”两种风格——全程只花了传统流程三分之一的时间。

选方案时,你其实在不断地做“相似度判断”:哪张草图最贴近脑中的构想?这个判断可以用特征向量相似度来表达。SD 的编码器会把图像压缩成一个向量,比较两个向量的余弦夹角,就能量化“两张图像不像”:

对于 AI 美术师和独立创作者,学徒不取代画家,它把“闷头试错”的时间省下来,让画家把精力留给构图、叙事与情感表达。Krita + SD 这套开源组合,让专业绘画软件真正长出了 AI 的翅膀——而你,始终握着方向盘。

S=eq⋅ei∥eq∥∥ei∥S = \frac{\boldsymbol{e}_q \cdot \boldsymbol{e}_i}{\lVert \boldsymbol{e}_q \rVert \lVert \boldsymbol{e}_i \rVert}
$S$ 接近 1 表示候选方案与你的构想高度一致,接近 0 表示跑偏了。这就像是把“感觉对不对”变成一把可以读取的尺子。
  1. 查询向量 $\boldsymbol{e}_q$你脑中构想经编码器换算成的向量。
    eq\boldsymbol{e}_q
  2. 候选向量 $\boldsymbol{e}_i$AI 生成的第 $i$ 张草图对应的向量。
    ei\boldsymbol{e}_i
  3. 余弦相似度 $S$两个向量夹角的余弦值,衡量方向一致性。
    S=eq⋅ei∥eq∥∥ei∥S = \frac{\boldsymbol{e}_q \cdot \boldsymbol{e}_i}{\lVert \boldsymbol{e}_q \rVert \lVert \boldsymbol{e}_i \rVert}

AI 应用场景

场景一:游戏概念美术的批量氛围图

阶段:概念生成与风格探索阶段

解决的问题:传统流程中,一组 3-4 张场景氛围图需要约两周手绘时间,改成 AI 辅助后只需 2 天。利用 Krita 插件,先画 5 分钟速涂确定构图,再用风格迁移一次生成多个氛围版本,最后局部重绘微调细节。

具体案例:某独立游戏工作室要为一个奇幻世界制作 40 张地点设定图。美术组在 Krita 中统一使用同一套 ComfyUI 后端与模型,把地点描述写成提示词模板,批量生成“清晨/黄昏/雨夜”三种氛围变体,再手工挑选和精修,最终按时交付。

场景二:漫画工作室的背景修正流程

阶段:后期修图与重绘

解决的问题:漫画扫描稿中经常出现背景杂乱、建筑透视错误等问题,整页重画成本太高。用 Krita 插件的局部重绘,框出问题区域,输入“干净的现代街道背景”并调低去噪强度,AI 只替换蒙版内的像素。

具体案例:一家漫画工作室在连载页修改中,用局部重绘把 30 多页的背景统一成相近风格;又用扩图把竖版分镜页改为横版发布图,边缘由 AI 自动补画,省去大量手绘工作量。

场景三:独立插画师的多风格探索

阶段:创意发散与风格定稿

解决的问题:插画师接了封面委托,但客户在“厚涂”“水彩”“赛璐璐”三种风格间犹豫。传统方法要画三张完整稿,而 AI 图层 + 风格迁移可以在同一张线稿上快速产出三种候选。

具体案例:插画师在 Krita 中保留手绘线稿,复制三个 AI 生成图层,分别加载三种风格参考图并调节风格强度,输出三张风格样稿供客户选择。定稿后再在 AI 图层上直接细化,基层线稿始终可复用。

Python 演示

python52 行
# -*- coding: utf-8 -*-"""用字符画布模拟 Krita AI 插件的局部重绘流程"""import hashlib ORIG = [    "...^^^^^...",    "..^.^^.^...",    "~~....~~~~~",    "T.T.....TT."]  def build_mask(rows, left, top, width, height):    """返回蒙版矩阵: True 表示需要重绘"""    mask = []    for r in range(len(rows)):        mask.append([left <= c < left + width and top <= r < top + height                     for c in range(len(rows[r]))])    return mask  def generate_region(prompt, row, col):    """根据提示词决定该像素的新字符, 模拟 AI 绘制"""    digest = hashlib.md5((prompt + str(row) + str(col)).encode()).hexdigest()    candidates = "&#@%+*="    return candidates[int(digest, 16) % len(candidates)]  def local_repaint(canvas, mask, prompt):    new = [list(row) for row in canvas]    for r in range(len(canvas)):        for c in range(len(canvas[r])):            if mask[r][c]:                new[r][c] = generate_region(prompt, r, c)    return ["".join(row) for row in new]  def show(title, canvas):    print(title)    for row in canvas:        print(row)  def main():    mask = build_mask(ORIG, 3, 0, 5, 3)    show("重绘前:", ORIG)    repainted = local_repaint(ORIG, mask, "holographic castle")    show("重绘后:", repainted)  if __name__ == "__main__":    main()
目的:用字符画布直观演示“蒙版决定局部重绘范围”的核心逻辑,替换区域内的像素,其余像素保持不变。
  1. def build_mask(rows, left, top, width, height):用矩形四元组圈出蒙版区域,对应 Krita 里手绘的选区蒙版。
  2. mask.append([left <= c < left + width and top <= r < top + height ...])逐像素判断是否落在蒙版内,生成 0/1 矩阵。
  3. digest = hashlib.md5(...)用提示词和坐标算哈希,模拟“AI 根据提示词决定画什么”。
  4. if mask[r][c]:只有蒙版为 True 的像素才被替换,这正是 $M \odot I_{\text{gen}}$ 的体现。
  5. local_repaint(ORIG, mask, "holographic castle")传入画布、蒙版和提示词,执行一次局部重绘。
  6. if __name__ == "__main__":提供可执行入口,运行后直接打印重绘前后的字符画布。

常见误区

误区很多新手以为 Krita 插件是一个“一键出图”的独立软件,装完插件打开就能生成,不需要装任何别的。

正解插件只是“遥控器”,它本身不包含生成能力。真正计算扩散过程的是后端的 Stable Diffusion 引擎,通常由 ComfyUI 提供。没接后端就像遥控器买回家才发现没插座,画室请了学徒却不给他发工资。正确流程是:先搭好 ComfyUI 并确认它能在浏览器里出图,再到 Krita 插件里配置后端地址。

为何常见:插件安装包看起来是完整的一体程序,新手容易把它误解成“Photoshop 里的 AI 滤镜”。

误区许多人第一次用局部重绘,快速框选区域、填个提示词、直接点生成,结果得到一块与周围风格脱节、边缘生硬的“补丁”。

正解局部重绘不是简单的“橡皮擦换图”。要让新老画面自然融合,需要调节去噪强度,让 AI 遵循蒙版区域原有的轮廓;提示词中也要描述周围语境(例如“黄昏天空,柔和光晕”);必要时先生成一次看效果,再微调蒙版边缘做羽化。就像请学徒补一块墙,你得告诉他周围墙纸的花纹,他才能补得不露痕迹。

为何常见:大家把“框选+生成”理解成 PS 里的内容识别填充,忽视了扩散模型对条件和参数的高度敏感。

误区看到社区分享的各种 checkpoint 和 LoRA 就忍不住下载,模型目录几百个文件,插件切换时卡到怀疑人生。

正解模型文件动辄几个 GB,占硬盘更占显存。每次加载都会消耗时间和显存,模型过多还会让 ComfyUI 工作流难以维护。正确做法是按项目需求精选 2-3 个主模型和少量 LoRA,分目录管理并记录每个模型的风格特点。就像画室不会把全世界所有颜料都堆在台面上,常用的那几支顺手就够了。

为何常见:收集模型有一种“收集素材”的满足感,加上社区不断发布新品,让人产生“越多越专业”的错觉。

误区有人把 AI 生成图层当成普通位图图层,生成后直接在上面擦画,关掉重开再也无法改参数重新生成。

正解AI 生成图层的价值在于“参数可回溯”。它记录了你当时用的提示词、种子、采样参数,双击图层就能改词重新生成;而普通位图图层一旦擦除就永久丢失。正确的打开方式是:AI 图层放在手绘基层上方,把它当作可再生的“试验层”,满意后再合并或雕琢。

为何常见:Krita 面板里 AI 图层显示为普通图层缩略图,用户自然按习惯当像素图层使用。

误区新手扩图时直接把画布分辨率调大,以为 AI 会自动补全四周,结果得到一张“被糊开”的拉伸图。

正解扩图(Outpainting)是让 AI 基于现有边缘像素推断新的画面内容,不是简单缩放或填充。分辨率拉大只会让像素密度改变,不会无中生有地创造新细节。正确做法是:从画布四周添加空白,设置合适的扩展尺寸,让 AI 逐段生成,并配合提示词描述延伸方向的内容。

为何常见:图像编辑软件里“拉伸画布”太常见,大家容易把“画布变大”和“内容变多”混为一谈。

面试题

Q1. Krita AI 插件的核心作用是?

单选题 · easy

  • A.独立的图像生成引擎
  • B.连接绘画软件与SD后端← 正确答案
  • C.一款新型智能绘画笔刷
  • D.一种本地模型训练工具

答案:B。Krita 插件本身不生成图像,也不训练模型,它的角色是桥梁:把 Krita 的图层、蒙版和提示词传给 SD 后端,再把生成结果接回来。选 B。

Q2. Krita AI 插件生成时真正计算扩散过程的“后台大脑”是什么?

单选题 · easy

  • A.本地运行的后端引擎← 正确答案
  • B.在线文档协作平台
  • C.系统安全防护规则
  • D.桌面日程提醒小工具

答案:A。插件是遥控器,真正执行扩散采样的是后端引擎,通常指 ComfyUI。其余选项完全不涉及图像计算。

Q3. 局部重绘公式得 $I' = M \odot I_{\text{gen}} + (1-M) \odot I_{\text{orig}}$ 中,$M=1$ 的像素最终取什么?

单选题 · mid

  • A.完全保留原图像素
  • B.使用AI生成新像素← 正确答案
  • C.变为半透明灰色
  • D.直接删除该像素

答案:B。$M=1$ 时,公式变成 $I'=I_{\text{gen}}$,也就是该像素被 AI 生成内容替换;$M=0$ 时才是保留原图。这就像胶带掀开的位置由 AI 重画,盖住的位置保持原样。

Q4. 局部重绘时,为了让新生成区域与原图过渡自然,关键要控制什么?

单选题 · mid

  • A.去噪强度参数← 正确答案
  • B.画布像素大小
  • C.图层数量多少
  • D.快捷键位设置

答案:A。去噪强度决定 AI 在蒙版区域有多少发挥空间,强度太高会脱离原轮廓,太低则变化不明显。这是局部重绘的核心旋钮。

Q5. 图像扩图与简单拉伸画布的核心区别是?

单选题 · mid

  • A.AI推断新画面内容← 正确答案
  • B.等比放大所有像素
  • C.压缩图像文件体积
  • D.增加图层混合模式

答案:A。扩图让 AI 根据边缘像素“接着画”,产生新的画面内容;拉伸画布只是把已有像素拉扁拉长,不会创造任何新细节。

Q6. 使用 ComfyUI 作为 Krita AI 插件后端有哪些好处?

多选题 · mid

  • A.节点管线可视化← 正确答案
  • B.模板复用效率高← 正确答案
  • C.完全免显卡支持
  • D.自由组合采样模型← 正确答案

答案:ABD。ComfyUI 的核心优势是节点式可视化和工作流模板复用,还能自由组合采样器与模型。但扩散计算依然需要显卡(GPU),“完全免显卡”是错误的。

Q7. 在使用 AI 生成图层的工作流中,“非破坏性编辑”体现在?

多选题 · mid

  • A.原画层始终保留← 正确答案
  • B.参数可改后重生成← 正确答案
  • C.删除全部历史记录
  • D.像素被永久覆盖

答案:AB。AI 生成图层独立于手绘基层,原画层不会被动到;提示词、种子等参数记录在图层上,可修改后重新生成。C、D 恰好是非破坏性编辑的反面。

Q8. 风格迁移损失 $L_{\text{total}} = \alpha L_{\text{content}} + \beta L_{\text{style}}$ 中,增大 $\beta$ 会导致?

单选题 · hard

  • A.内容结构更清晰
  • B.风格化程度更强烈← 正确答案
  • C.生成速度显著加快
  • D.显存占用自动减少

答案:B。$\beta$ 是风格损失的权重,调大意味着提升风格在总损失中的占比,输出会更贴近参考图的纹理笔触,同时可能削弱内容保真度。它不影响速度和显存。

Q9. 关于 Krita AI 插件的工作流,正确的说法有?

多选题 · hard

  • A.提示词控制生成内容← 正确答案
  • B.固定种子可复现结果← 正确答案
  • C.采样步数影响细节质量← 正确答案
  • D.插件自动训练所有模型

答案:ABC。提示词决定生成方向,固定 seed 使随机噪声起点一致从而复现结果,采样步数越多细节通常越精细。插件是推理工具,不负责训练模型。

Q10. 使用 AI 扩图时,一次性扩很大的区域往往效果不好,正确做法是?

单选题 · hard

  • A.分次扩展逐步生成← 正确答案
  • B.一次拉伸二十倍
  • C.禁止使用任何提示词
  • D.关闭所有模型文件

答案:A。扩图缺少参照时,AI 越远越容易画出诡异内容。正确做法是每次扩展一小段(如 64 像素),让模型始终有充分的边缘像素作参考,分多次迭代完成大幅扩展。