Skip to content

NovelAI OpenAI 兼容 API ​

先确认 Key 可访问所需模型;统一 Base URL 为 https://api.taleapi.asia/v1。模型、价格和通用限制只看 生成规则。

1. 请求头 ​

http
Authorization: Bearer 你的本站APIKey
Content-Type: application/json

2. 接口 ​

路径格式
GET /v1/models当前 Key 可见模型
POST /v1/chat/completions最后 user 的 JSON 字符串,返回 Markdown 图片
POST /v1/images/generations直接 JSON,返回 data[].b64_json

当前只支持非流式生成。原生客户端另走 原生 API。

3. 模型列表 ​

从当前 Key 的模型列表选择五个 NovelAI 官方 ID。模型广场可展示的模型不一定都属于该 Key 的分组。

4. Chat 请求 ​

只读取最后一条 role=user,其 content 必须是 JSON 对象的字符串,不是普通聊天文本或图片数组。

json
{
  "model": "nai-diffusion-4-5-full",
  "stream": false,
  "messages": [
    {
      "role": "user",
      "content": "{\"prompt\":\"1girl, night city, anime illustration\",\"size\":[832,1216],\"steps\":23}"
    }
  ]
}

5. 常用参数 ​

以下字段放在 Chat 内层 JSON,或 Images 请求顶层。

字段用途
prompt必填正向提示词
negative_prompt可选负向提示词
size[宽,高] 或 "宽x高";也可用 width/height
steps步数;不填默认 23
scale引导强度 0~10;V5 默认 7,其余默认 5
sampler默认 k_euler_ancestral
noise_schedulekarras 或 native;V5 出站统一 karras
seed0~4294967295 整数;省略随机
n只能为 1
i2i / inpaint底图或遮罩,见下节
character_referencesV4.5 精准参考数组

不确定时省略可选参数。未知参数可能被忽略,不能凭请求成功判断已生效。Chat 不提供另一套 characters 多角色语法;需要结构化角色提示词时使用原生客户端。

6. 尺寸 ​

size: [832,1216] 与 size: "832x1216" 均可;portrait 等名字不是尺寸。默认 1024×1024,范围见 尺寸限制。

7. 多角色 ​

在普通提示词中描述多个角色,或使用原生接口的结构化提示词。不要照搬旧文档中未实现的 Chat characters 字段。

8. 图生图 ​

添加 i2i,image 使用 PNG/JPEG/WebP 的 Base64 或 Data URI:

json
{
  "i2i": {
    "image": "data:image/png;base64,替换为真实图片",
    "strength": 0.7,
    "noise": 0
  }
}

此片段须与 prompt 等字段合并,不能单独提交。strength/noise 范围为 0~1。

9. 局部重绘 ​

使用 inpaint: {"image":"底图Data URI","mask":"遮罩Data URI","strength":1};不能与 i2i 同时使用。网关会把底图和遮罩分别缩放到目标尺寸;为避免拉伸或错位,建议两者预先使用相同尺寸,并与目标尺寸一致。

10. 费用控制 ​

当前没有 max_tokens 点数预算功能。 不把客户端“最大输出 Token”当作本次生图金额上限;按 价格规则 选择参数。

Vibe Transfer ​

V4 / V4.5 支持最多 4 张氛围参考。controlnet 在本接口中是兼容字段名,仅代表 Vibe Transfer,不是 ControlNet 模型。与精准参考不能混用,V5 不支持。

json
{
  "controlnet": {
    "images": [
      {"image":"data:image/png;base64,真实图片", "info_extracted":1, "strength":0.6}
    ]
  }
}

将此对象与 prompt 等字段合并;info_extracted 和 strength 范围为 0~1。成功 Chat 响应含 <!-- vibe_cache_ids:[{"index":0,"cache_id":"..."}] -->;Images 响应提供 vibe_cache_ids 字段。后续同一模型请求可把该项改为 {"cache_id":"成功响应的ID","strength":0.6},复用编码。缓存失效时需重新上传;缓存 ID 请作为私有参考资料保管。价格与失效规则见通用生成规则。

精准参考 ​

仅 V4.5 Full/Curated,可传最多六项:

json
{
  "character_references": [
    {
      "image": "data:image/png;base64,替换为真实图片",
      "type": "character&style",
      "fidelity": 1,
      "strength": 1
    }
  ]
}

type 可为 character、style、character&style;fidelity 和 strength 为 0~1。单图解码后不超过 4 MiB,同时受总请求大小限制;每项都参与计费。

11. 采样器 ​

兼容入口允许 k_euler、k_euler_ancestral、k_dpmpp_2m、k_dpmpp_2m_sde、k_dpmpp_sde。通常保留默认即可。

12. 返回图片 ​

不提供图片托管 URL 或自定义输出格式。Chat 的 choices[0].message.content 含 Markdown Data URI,Images 使用 Base64。

13. Chat 响应 ​

text
![image](data:image/png;base64,...)
<!-- seeds:[123456] -->

Token 字段不能换算 Anlas 或用于证明扣费;查看主站使用日志。

14. 解析 Chat 图片 ​

提取 data:image/...;base64, 后的内容并 Base64 解码。客户端不支持 Data URI 时可自行保存,或改用 Images / 原生接口;不要把图像数据上传到公共日志。

15. 发送请求 ​

按第 4 节构造 JSON,通过 HTTP 客户端发送到 /v1/chat/completions。Key 放请求头,生成不是免费的连通性检查。

16. Python 构造方式 ​

python
import json

drawing = {"prompt": "1girl, night city", "size": [832, 1216], "steps": 23}
payload = {
    "model": "nai-diffusion-4-5-full",
    "stream": False,
    "messages": [{"role": "user", "content": json.dumps(drawing)}],
}

将 payload 作为 JSON 发送;避免手工拼接双层引号。

17. 流式限制 ​

Chat 生图使用 stream:false;等待最终图片,不支持中途预览或断点续传。超时后先查日志,不连续重发。

18. Images 请求 ​

json
{
  "model": "nai-diffusion-4-5-full",
  "prompt": "1girl, night city, anime illustration",
  "size": "832x1216",
  "n": 1,
  "response_format": "b64_json"
}

发送到 /v1/images/generations,解码 data[0].b64_json。服务按当前归一化逻辑接收上文参数,客户端未必暴露这些选项;/v1/images/edits 未开放。

19. 错误处理 ​

先读响应正文中的 error.code、error.message 与请求 ID。若返回 error.retryable,以该字段判断能否重试:false 时不要自动重试;true 也不代表重试免费。字段缺失时,先查本次使用日志或反馈,不仅凭错误码决定重发。鉴权、余额、路由错误可能使用另一种错误结构。

错误示例处理
MODEL_NOT_ALLOWED、SIZE_NOT_ALLOWED、INVALID_PROMPT_JSON修改模型、尺寸或 JSON
PAID_FEATURE_DISABLED、CHARACTER_REFERENCE_NOT_SUPPORTED移除不支持的功能或换支持的模型
QUEUE_FULL、QUEUE_TIMEOUT未开始生成的队列错误;确认 retryable: true 后降低并发、等待并有限重试
UPSTREAM_BUSY先看 retryable;带 Vibe 参考的生成错误可能明确禁止重试,不能只凭“繁忙”自动重发
UPSTREAM_TIMEOUT、INVALID_UPSTREAM_ARCHIVE先核对本次日志与扣费,再反馈

关闭 SDK 或客户端的自动重试,尤其是带 Vibe 参考的生图请求。错误码不在表中时,以实际正文和请求 ID 反馈,不据名称猜测账号状态。