在 Krita 中直接调用 NovelAI 云端生成 — 文生图 / 图生图 / 选区重绘,零 ComfyUI 依赖。
一个原生的 Krita Python 插件,直接用 urllib 调 NovelAI 官方 API,把生成结果作为新图层写回画布。不需要 ComfyUI,不需要本地显卡,不需要第三方 Python 库。
- 三种生成模式
- 文生图 — 纯 prompt 出图,支持 Opus 订阅免费额度
- 图生图 — 以当前画布为基底生成变体
- 选区重绘 — 像 NAI 官网一样:画选区 → 输入 prompt → 选区内被重绘,选区外逐字节等于原图
- 智能尺寸适配 — 画布任意尺寸都自动按比例缩放到 NAI 合法区间(64 像素倍数 + Opus 免费面积上限),横图/竖图/正方形对称处理
- 零畸变、零偏差重绘 — 客户端 mask 合成保证选区外像素 100% 保留
- Danbooru TAG 自动补全 — 内置 15 万条标签,前缀 + 别名匹配,按使用次数排序,带中文翻译
- 预设系统 — 前缀/后缀提示词 + 全套参数快照,一键切换
- Payload 预览 — 生成前可以看到将要发给 NAI 的完整 JSON
- Token 安全 — 密码模式输入,本地 JSON 存储,显/隐切换
- UI 设计 — 暗色基底 + 琥珀色强调 + 霞鹜文楷字体 + 磨砂玻璃质感
- 防误触 — 参数控件的鼠标滚轮需要先点击激活,杜绝无意间改值
- 状态持久化 — 关 Krita 再打开,prompts / 前后缀 / 模式自动恢复
- 纯原生 Python — 仅依赖 Krita 自带的 PyQt5 + Pillow,零第三方库
从 Releases 下载最新的 krita_nai-x.y.z.zip。
- 打开 Krita(≥ 5.2.0)
- 菜单 工具 → 脚本 → 从文件导入 Python 插件...
- 选择下载的 ZIP 文件
- 菜单 设置 → 配置 Krita → Python 插件管理器,勾选 NAI for Krita
- 重启 Krita(必须,新插件只在启动时加载)
- 菜单 设置 → 面板列表,勾选 NAI
- 访问 https://novelai.net/ 登录你的 NAI 账号
- 进入 Account 页,找到 Get Persistent API Token
- 复制显示的字符串(以
pst-开头) - 回到 Krita 的 NAI 面板,展开 账户 区块
- 把 token 粘贴到 API Token 输入框,按回车或点 验证 Token
- 看到
[Opus] Anlas: NNNN就说明配置成功
⚠ Token = 账号备用钥匙,别发到公开群或仓库。泄漏了去 Account 页重新生成即可立即作废旧的。
- 模式栏选 文生图
- 在正面提示词里输入 tag(输入 2 个以上字符会弹出补全列表)
- 调整参数(可选)
- 点 GENERATE → 新图层出现生成结果
- 打开/新建一个文档
- 模式栏选 图生图
- 输入 prompt,调 重绘幅度 (Strength)
- 点 GENERATE → 新图层出现变体
- 打开/画一张图
- 用 Krita 的选区工具(矩形 M / 套索 / 多边形)框出要重绘的区域
- 模式栏选 重绘
- 输入 prompt(描述选区内你想要的新内容),调 Strength
- 点 GENERATE
- 新图层出现:选区内被 NAI 重绘,选区外和原图像素级一致
- 在图层面板切换眼睛对比效果,不满意调参再生成,多个候选图层里挑最好的
- Mask 精度 = 8×8 像素块:NAI V4 API 会把 mask 量化到 8 像素网格,复杂选区的边缘会被轻微吸附到最近的 8 像素。这是 NAI 服务端的硬限制,无法绕过。
- 重绘不一定免费:只有 Opus 订阅的 Focused Inpainting 才在大图上免费,普通 inpaint 和 img2img 照常收 Anlas。具体收费请参考 NAI 官方定价文档。
- 画布 > 1024×1024 时会自动降采样:为了落在 NAI Normal 尺寸内,大画布会按比例缩到面积 ≤ 1,048,576 像素,生成后再放大回画布原尺寸。保持画布宽高比接近 NAI 标准尺寸(832×1216 / 1024×1024 / 1216×832)可以避免缩放损失。
- urllib 阻塞 I/O:取消按钮只能断开结果信号,无法真正中断正在进行的 HTTP 请求。后台线程会自行完成然后被 GC 回收。
git clone https://github.com/1756141021/krita-novelai.git
cd krita-novelai
# 同步到 Krita 的 pykrita 目录(Windows Git Bash)
bash sync.sh
# 打包发布 ZIP
python build_zip.py插件会被复制到 %APPDATA%/krita/pykrita/krita_nai/,每次改代码后运行 bash sync.sh 重新同步,然后重开 NAI 面板即可看到效果(大部分模块会热重载)。
┌──────────────────────────────────────────┐
│ UI 层 (ui/) │ 纯展示 + 交互
│ docker_panel + mode_bar + prompt + │
│ params + preset + config + styles │
└──────────────────────────────────────────┘
↓ 只调 controller
┌──────────────────────────────────────────┐
│ Controller (controller.py) │ 协调 UI ↔ Service
└──────────────────────────────────────────┘
↓ ↓ ↓ ↓
NaiApiClient CanvasBridge Config Preset
(纯 HTTP) (纯 Krita) (JSON) (JSON)
↓
┌──────────────────────────────────────────┐
│ Model (models.py) — pure dataclasses │
└──────────────────────────────────────────┘
依赖单向,服务层互不依赖。详见 CLAUDE.md 里的完整方案文档。
- NovelAI — 云端生成服务
- bedovyy/ComfyUI_NAIDGenerator + 1756141021 fork — NAI API 格式参考
- saltysalrua/nai-autocomplete + nai-discordbot — Danbooru 标签 CSV 数据源
- Acly/krita-ai-diffusion — Krita 插件开发模式参考
- 霞鹜文楷 LXGW WenKai — 内嵌字体(SIL Open Font License)
本插件基于 GNU General Public License v3.0 发布,详见 LICENSE。
内嵌资源使用各自的开源协议:
danbooru_tags.csv— 源自 nai-discordbot 的 Danbooru 公开数据LXGWWenKaiScreen.ttf— SIL Open Font License v1.1