Skip to content

1756141021/krita-novelai

Repository files navigation

NAI for Krita

在 Krita 中直接调用 NovelAI 云端生成 — 文生图 / 图生图 / 选区重绘,零 ComfyUI 依赖。

version license krita

一个原生的 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,零第三方库

安装

1. 获取插件 ZIP

Releases 下载最新的 krita_nai-x.y.z.zip

2. 导入到 Krita

  1. 打开 Krita(≥ 5.2.0)
  2. 菜单 工具 → 脚本 → 从文件导入 Python 插件...
  3. 选择下载的 ZIP 文件
  4. 菜单 设置 → 配置 Krita → Python 插件管理器,勾选 NAI for Krita
  5. 重启 Krita(必须,新插件只在启动时加载)
  6. 菜单 设置 → 面板列表,勾选 NAI

3. 配置 API Token

  1. 访问 https://novelai.net/ 登录你的 NAI 账号
  2. 进入 Account 页,找到 Get Persistent API Token
  3. 复制显示的字符串(以 pst- 开头)
  4. 回到 Krita 的 NAI 面板,展开 账户 区块
  5. 把 token 粘贴到 API Token 输入框,按回车或点 验证 Token
  6. 看到 [Opus] Anlas: NNNN 就说明配置成功

Token = 账号备用钥匙,别发到公开群或仓库。泄漏了去 Account 页重新生成即可立即作废旧的。


使用

文生图

  1. 模式栏选 文生图
  2. 在正面提示词里输入 tag(输入 2 个以上字符会弹出补全列表)
  3. 调整参数(可选)
  4. GENERATE → 新图层出现生成结果

图生图

  1. 打开/新建一个文档
  2. 模式栏选 图生图
  3. 输入 prompt,调 重绘幅度 (Strength)
  4. GENERATE → 新图层出现变体

选区重绘(主力功能)

  1. 打开/画一张图
  2. 用 Krita 的选区工具(矩形 M / 套索 / 多边形)框出要重绘的区域
  3. 模式栏选 重绘
  4. 输入 prompt(描述选区内你想要的新内容),调 Strength
  5. GENERATE
  6. 新图层出现:选区内被 NAI 重绘,选区外和原图像素级一致
  7. 在图层面板切换眼睛对比效果,不满意调参再生成,多个候选图层里挑最好的

已知限制

  • 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 里的完整方案文档。


致谢


协议

本插件基于 GNU General Public License v3.0 发布,详见 LICENSE

内嵌资源使用各自的开源协议:

  • danbooru_tags.csv — 源自 nai-discordbot 的 Danbooru 公开数据
  • LXGWWenKaiScreen.ttf — SIL Open Font License v1.1

About

Native Krita plugin for NovelAI — txt2img / img2img / inpaint with tag autocomplete. Zero ComfyUI dependency.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors