主题
NovelAI OpenAI 兼容 API
先确认 Key 可访问所需模型;统一 Base URL 为 https://api.taleapi.asia/v1。模型、价格和通用限制只看 生成规则。
1. 请求头
http
Authorization: Bearer 你的本站APIKey
Content-Type: application/json2. 接口
| 路径 | 格式 |
|---|---|
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_schedule | karras 或 native;V5 出站统一 karras |
seed | 0~4294967295 整数;省略随机 |
n | 只能为 1 |
i2i / inpaint | 底图或遮罩,见下节 |
character_references | V4.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

<!-- 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 反馈,不据名称猜测账号状态。
