技术支持与商务合作
如需定制开发、获取 API Key 或遇到技术问题,请联系微信:yuho888
概览
本文档描述了基于 NovelAI 扩散模型的图像生成接口。接口协议完全兼容 OpenAI Chat Completions API 标准,支持流式 (SSE) 返回,并提供了原生的图片生成参数控制能力。
模型列表
当前支持以下模型 ID,每个模型都有其独特的风格:
| Model ID | 说明 |
|---|---|
nai-diffusion-4-5-full |
推荐。最新 V4.5 全量模型,画质细腻,支持流式响应。 |
nai-diffusion-4-5-curated |
V4.5 精选模型,风格化更强,支持流式响应。 |
nai-diffusion-4-full |
V4 稳定版本,兼容性好。 |
nai-diffusion-3 |
V3 经典版本,具有独特的厚涂与油画质感。 |
nai-diffusion-furry-3 |
专门优化的 Furry 风格模型。 |
API 端点
GET /v1/models
获取所有可用的模型列表。
POST /v1/chat/completions
核心接口。生成图片,兼容 OpenAI 格式,支持流式和非流式。
POST /generate
兼容官方 NovelAI 原生图片接口格式,返回包含图片 URL 的 JSON。
请求参数详解
以下参数适用于 /v1/chat/completions 接口。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
String | 是 | 模型 ID,例如 nai-diffusion-4-5-full。 |
messages |
Array | 是 |
消息数组。最后一条 role: "user" 的内容将作为正向提示词 (Prompt)。例:[{"role": "user", "content": "1girl, white hair"}] |
stream |
Boolean | 否 | 默认为 false。推荐设为 true 以获得实时进度反馈。 |
size |
String | 否 |
图片尺寸。支持:832:1216, 1216:832, 1024:1024。如果不传,默认使用 1216x832。 |
negative_prompt |
String | 否 | 反向提示词(不希望出现的内容)。不传则使用系统默认值。 |
sampler |
String | 否 | 采样器。支持:Euler Ancestral (默认), Euler, DPM++ 2M SDE 等。 |
进阶玩法
1. 图片尺寸控制
您可以通过两种方式指定尺寸。如果指定的尺寸不在支持列表中,将返回错误。
- 832:1216 - 竖版(适合人像、手机壁纸)
- 1216:832 - 横版(适合风景、桌面壁纸,默认值)
- 1024:1024 - 正方形(适合头像)
方式一:使用 size 参数(推荐)
{
"model": "nai-diffusion-4-5-full",
"size": "1024:1024",
"messages": [...]
}
方式二:在提示词中直接指定
支持使用 : 或 * 分隔。尺寸信息会自动从提示词中移除。
"content": "beautiful landscape 1024:1024"
"content": "portrait 832*1216"
2. 反向提示词 (Negative Prompt)
用于排除画面中的负面元素。支持在 JSON 顶层字段中设置。
{
"negative_prompt": "blurry, lowres, bad quality, worst quality, ugly, deformed, text, watermark"
}
3. Parameter{...} 高级语法
您可以在提示词内容中使用 Parameter{...} 语法一次性指定所有生成参数。这在某些无法修改 JSON 结构的客户端中非常有用。
语法格式: Parameter{key:value,key2:value}
优先级说明: Parameter{...} > JSON 请求参数 > 默认值。
支持的参数键:
size/width/heightnegative_promptsamplerscale(CFG Scale)steps(采样步数)seed(随机种子)model(可在此处覆盖请求体中的模型)
示例:
"content": "anime girl Parameter{size:832:1216,sampler:Euler Ancestral,scale:7,steps:28,negative_prompt:blurry,low quality}"
响应结构
1. 非流式响应 (Stream: false)
{
"id": "nai-img-123",
"object": "chat.completion",
"created": 1700000000,
"model": "nai-diffusion-4-5-full",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "/img/generated_image.png"
},
"finish_reason": "stop"
}
]
}
2. 流式响应 (Stream: true)
返回 SSE (Server-Sent Events) 事件流。主要包含三个阶段:
- 排队/进度:通过
reasoning_content字段返回进度文本。 - 结果:通过
content字段返回 Markdown 格式图片链接。 - 结束:发送
[DONE]。
// 阶段 1: 进度更新
data: {"choices":[{"delta":{"reasoning_content":"🎨 正在生成图片,进度 30%"}}]}
// 阶段 2: 返回图片
data: {"choices":[{"delta":{"content":"\n"},"finish_reason":"stop"}]}
// 阶段 3: 完成
data: {"choices":[{"delta":{"content":"✅ 图片生成完成!"}}]}
data: [DONE]
代码示例
Python (Requests)
import requests
import json
url = "/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer sk-your-key"
}
data = {
"model": "nai-diffusion-4-5-full",
"messages": [{"role": "user", "content": "beautiful landscape, best quality"}],
"size": "1216:832",
"stream": True
}
response = requests.post(url, json=data, headers=headers, stream=True)
for line in response.iter_lines():
if line:
line_str = line.decode('utf-8')
if line_str.startswith('data: '):
print(line_str)
cURL
curl -X POST /v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-your-key" \
-d '{
"model": "nai-diffusion-4-5-full",
"messages": [{"role": "user", "content": "1girl, solo, portrait"}],
"size": "832:1216",
"negative_prompt": "lowres, bad quality"
}'
错误处理
API 使用标准 HTTP 状态码和 JSON 错误对象。
| 状态码 | 错误类型 | 说明 |
|---|---|---|
| 400 | invalid_request_error |
缺少必填参数,或图片尺寸不支持 (仅支持 832:1216, 1216:832, 1024:1024)。 |
| 429 | rate_limit_error |
Token 额度不足、过期或请求频率过高。 |
| 500 | server_error |
服务器内部错误或上游生成失败。 |