强大的图片生成 API,兼容 OpenAI 格式,轻松集成到您的应用中
当前支持以下 NovelAI 模型,每个模型都有其独特的风格和特点:
nai-diffusion-furry-3
nai-diffusion-3
nai-diffusion-4-full
nai-diffusion-4-curated-preview
nai-diffusion-4-5-full
nai-diffusion-4-5-curated
获取所有可用的模型列表。
{
"object": "list",
"data": [
{
"id": "nai-diffusion-4-5-full",
"object": "model",
"created": 0,
"owned_by": "novelai"
}
]
}
生成图片。兼容 OpenAI Chat Completions API 格式,支持流式和非流式响应。
兼容官方 NovelAI 图片接口格式,接受 input/model/action/parameters 等字段,请求完成后返回图片地址(JSON 中包含 url)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
input 或 tag |
string | 必填 | 图片生成的提示词 |
model |
string | 可选 | 模型名称,默认为 nai-diffusion-4-5-full |
action |
string | 可选 | 操作类型,固定为 generate |
parameters.return_base64 或 return_base64 |
boolean | 可选 | 是否返回 base64 格式(true/false),默认为 false。设置为 true 时,返回的 url 字段将是 base64 编码的 data URI。 |
parameters.width / parameters.height |
number | 可选 | 图片宽度和高度 |
parameters.scale / parameters.cfg |
number | 可选 | CFG Scale,默认为 5 |
parameters.steps |
number | 可选 | 采样步数,默认为 28 |
parameters.sampler |
string | 可选 | 采样器名称,默认为 k_euler_ancestral |
parameters.negative_prompt |
string | 可选 | 反向提示词 |
默认返回 URL:
{
"status": "success",
"url": "/img/xxxxxxxxxxxxxxxx.png"
}
返回 base64 格式(当 return_base64: true 时):
{
"status": "success",
"url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 必填 | 要使用的模型 ID,从 /v1/models 获取 |
messages |
array | 必填 | 消息数组,最后一条 role: "user" 的消息内容将作为图片生成的提示词(prompt) |
stream |
boolean | 可选 | 是否使用流式响应,默认为 false 推荐 |
size 或 image_size |
string | 可选 | 图片尺寸,支持:832:1216、1216:832、1024:1024。如果不提供,将从提示词中解析或使用默认尺寸 1216x832 |
negative_prompt |
string | 可选 | 反向提示词(负面提示词),用于指定不希望出现在图片中的内容。如果不提供,将使用默认的反向提示词 |
sampler |
string | 可选 | 采样器,支持:Euler Ancestral(默认)、Euler、DPM++ 2S Ancestral、DPM++ 2M SDE、DPM++ 2M、DPM++ SDE |
您可以直接在提示词中指定图片尺寸,系统会自动识别并应用。如果不指定尺寸,将使用默认尺寸 1216x832。
832:1216 - 竖版图片(宽 832px,高 1216px)1216:832 - 横版图片(宽 1216px,高 832px)1024:1024 - 正方形图片(宽 1024px,高 1024px)尺寸格式说明:
: 或 * 作为分隔符// 示例 1: 直接连接
"content": "美女1024:1024"
// 示例 2: 带空格
"content": "美女 1024:1024"
// 示例 3: 使用 * 号
"content": "landscape 832*1216"
// 示例 4: 尺寸在中间
"content": "1024:1024 beautiful sunset"
// 示例 5: 不指定尺寸(使用默认 1216x832)
"content": "a beautiful landscape"
宽度:高度 或 宽度*高度1216x832POST /v1/chat/completions
Content-Type: application/json
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "a beautiful landscape with mountains and lakes"
}
]
}
POST /v1/chat/completions
Content-Type: application/json
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "a beautiful landscape"
}
],
"size": "1024:1024"
}
POST /v1/chat/completions
Content-Type: application/json
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "a beautiful landscape"
}
],
"negative_prompt": "blurry, lowres, bad quality, worst quality, ugly, deformed"
}
POST /v1/chat/completions
Content-Type: application/json
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "a beautiful landscape"
}
],
"size": "1024:1024",
"negative_prompt": "blurry, lowres, bad quality",
"stream": true
}
{
"id": "nai-img-1234567890",
"object": "chat.completion",
"created": 1234567890,
"model": "nai-diffusion-4-5-full",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "http://your-domain.com/img/abc123.png"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 0,
"completion_tokens": 0,
"total_tokens": 0
}
}
当 stream: true 时,API 会返回 Server-Sent Events (SSE) 格式的流式响应,提供实时的生成进度反馈。
POST /v1/chat/completions
Content-Type: application/json
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "a beautiful landscape with mountains and lakes"
}
],
"stream": true
}
流式响应会发送多个事件:
[DONE]data: {"id":"","object":"chat.completion.chunk","created":1234567890,"model":"nai-diffusion-4-5-full","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":"🎨 正在生成图片,进度 30%"},"finish_reason":null}]}
data: {"id":"","object":"chat.completion.chunk","created":1234567890,"model":"nai-diffusion-4-5-full","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"},"finish_reason":"stop"}]}
data: {"id":"","object":"chat.completion.chunk","created":1234567890,"model":"nai-diffusion-4-5-full","choices":[{"index":0,"delta":{"role":"assistant","content":"✅ 图片生成完成!"},"finish_reason":null}]}
data: [DONE]
本节介绍如何使用高级功能来获得更好的图片生成效果。
您可以通过两种方式指定图片尺寸:
size 或 image_size 参数支持的三种预设尺寸:
832:1216 - 竖版图片(适合人像、全身照)1216:832 - 横版图片(适合风景、场景)1024:1024 - 正方形图片(适合头像、特写){
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "beautiful portrait"
}
],
"size": "1024:1024"
}
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "beautiful portrait 1024:1024"
}
]
}
size 参数,这样提示词更清晰,不会被尺寸信息干扰size 参数和在提示词中指定尺寸,优先使用 size 参数: 或 * 作为分隔符1216x832使用反向提示词可以排除不希望出现在图片中的元素,提高生成质量。
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "a beautiful sunset over the ocean"
}
],
"negative_prompt": "blurry, lowres, bad quality, worst quality, ugly, deformed, low quality, jpeg artifacts"
}
negative_prompt,系统会使用默认的反向提示词blurry、lowres、bad quality、worst quality、ugly、deformed 等将尺寸控制和反向提示词结合使用,可以获得最佳效果:
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "beautiful anime girl, best quality, very aesthetic"
}
],
"size": "832:1216",
"negative_prompt": "blurry, lowres, bad quality, worst quality, ugly, deformed, low quality, jpeg artifacts, watermark, signature, text",
"stream": true
}
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "beautiful anime girl, best quality, very aesthetic 832:1216"
}
],
"negative_prompt": "blurry, lowres, bad quality, worst quality, ugly, deformed, low quality, jpeg artifacts, watermark, signature, text",
"stream": true
}
使用流式响应可以获得实时的生成进度反馈,提升用户体验:
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "epic fantasy landscape"
}
],
"size": "1216:832",
"negative_prompt": "blurry, lowres, bad quality",
"stream": true
}
流式响应会返回以下事件:
[DONE]不同的采样器会产生不同的生成效果和风格:
Euler Ancestral - 默认采样器,平衡质量和速度Euler - 经典采样器,速度快DPM++ 2S Ancestral - 高质量采样器,适合细节丰富的图片DPM++ 2M SDE - 高质量采样器,适合复杂场景DPM++ 2M - 高质量采样器,平衡效果DPM++ SDE - 高质量采样器,适合艺术风格{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "detailed fantasy landscape"
}
],
"size": "1216:832",
"sampler": "DPM++ 2M SDE",
"negative_prompt": "blurry, lowres, bad quality"
}
"Euler Ancestral")或代码名称(如 "k_euler_ancestral")Euler Ancestral您可以在提示词中使用 Parameter{...} 语法来指定多个图片生成参数,这样可以在一个提示词中同时设置图片大小、反向提示词、采样器等所有参数。
Parameter{参数名1:值1,参数名2:值2,...}
| 参数名 | 说明 | 示例值 |
|---|---|---|
size 或 image_size |
图片尺寸 | 1024:1024, 832:1216, 1216:832 |
width |
图片宽度 | 1024 |
height |
图片高度 | 1024 |
negative_prompt 或 negative |
反向提示词 | low quality, blurry |
sampler |
采样器名称 | Euler Ancestral, k_euler_ancestral |
scale 或 cfg 或 cfg_scale |
CFG Scale(引导强度) | 7.0 |
steps |
采样步数 | 28, 50 |
seed |
随机种子 | 12345 |
model |
模型名称 | nai-diffusion-4-5-full |
return_base64 或 base64 |
是否返回 base64 格式(true/false) | true, false |
示例 1:基本用法
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "beautiful landscape Parameter{size:1024:1024,negative_prompt:low quality,steps:50}"
}
]
}
示例 2:多个参数组合
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "anime girl Parameter{size:832:1216,sampler:Euler Ancestral,scale:7,steps:28,negative_prompt:blurry,low quality}"
}
]
}
示例 3:使用 width 和 height
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "portrait Parameter{width:1024,height:1024,scale:7.5,steps:40}"
}
]
}
示例 4:在 Parameter{...} 中指定模型
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "artistic portrait Parameter{model:nai-diffusion-4-5-curated,size:1024:1024,scale:7.5}"
}
]
}
在这个例子中,虽然请求中指定了 nai-diffusion-4-5-full,但实际会使用 nai-diffusion-4-5-curated(Parameter{...} 中的模型)。
示例 5:完整参数(包含模型)
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "fantasy scene Parameter{model:nai-diffusion-4-5-curated,size:1216:832,sampler:DPM++ 2M SDE,scale:8,steps:50,negative_prompt:blurry,lowres,bad quality,seed:12345}"
}
]
}
示例 6:不指定模型(使用请求中的模型)
{
"model": "nai-diffusion-4-5-curated",
"messages": [
{
"role": "user",
"content": "beautiful landscape Parameter{size:1024:1024,steps:50,negative_prompt:low quality}"
}
]
}
在这个例子中,Parameter{...} 中没有指定模型,所以会使用请求中的 nai-diffusion-4-5-curated。
示例 7:返回 base64 格式(进阶玩法)
{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "anime girl Parameter{size:832:1216,return_base64:true}"
}
]
}
或者直接在请求参数中指定:
{
"model": "nai-diffusion-4-5-full",
"return_base64": true,
"messages": [
{
"role": "user",
"content": "anime girl Parameter{size:832:1216}"
}
]
}
当 return_base64 设置为 true 时,返回的图片内容将是 base64 编码的 data URI 格式(data:image/png;base64,...),而不是 URL。这样可以避免下载图片时的延迟,直接在前端显示图片。
model,会优先使用它;如果没有指定,则使用请求中的 model 参数。true 时,返回 base64 编码的图片(data URI 格式),而不是 URL。这样可以避免下载延迟,直接在前端显示图片。默认值为 false。: 分隔,多个参数之间使用逗号 , 分隔。1024:1024)。不同模型适合不同的场景:
nai-diffusion-4-5-full - 最新版本,质量最高,支持流式响应nai-diffusion-4-5-curated - 精选版本,适合特定风格nai-diffusion-4-full - 稳定版本,兼容性好nai-diffusion-3 - 经典版本,风格独特nai-diffusion-furry-3 - 专门优化的模型{
"model": "nai-diffusion-4-5-curated",
"messages": [
{
"role": "user",
"content": "artistic painting style portrait"
}
],
"size": "1024:1024",
"negative_prompt": "photorealistic, photo, photograph"
}
nai-diffusion-4-5-full 和 nai-diffusion-4-5-curated 支持流式响应import requests
url = "http://your-domain.com/v1/chat/completions"
headers = {
"Content-Type": "application/json"
}
data = {
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "a beautiful sunset over the ocean"
}
]
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
image_url = result["choices"][0]["message"]["content"]
print(f"生成的图片: {image_url}")
import requests
url = "http://your-domain.com/v1/chat/completions"
headers = {
"Content-Type": "application/json"
}
data = {
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "beautiful landscape 1024:1024" # 指定生成 1024x1024 的正方形图片
}
]
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
image_url = result["choices"][0]["message"]["content"]
print(f"生成的图片: {image_url}")
import requests
url = "http://your-domain.com/v1/chat/completions"
headers = {
"Content-Type": "application/json"
}
data = {
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "beautiful sunset over the ocean"
}
],
"negative_prompt": "blurry, lowres, bad quality, worst quality, ugly, deformed, low quality"
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
image_url = result["choices"][0]["message"]["content"]
print(f"生成的图片: {image_url}")
import requests
import json
url = "http://your-domain.com/v1/chat/completions"
headers = {
"Content-Type": "application/json"
}
data = {
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "a beautiful sunset over the ocean"
}
],
"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: '):
data_str = line_str[6:] # 移除 "data: " 前缀
if data_str == '[DONE]':
break
try:
chunk = json.loads(data_str)
delta = chunk.get('choices', [{}])[0].get('delta', {})
if 'content' in delta:
print(delta['content'], end='', flush=True)
elif 'reasoning_content' in delta:
print(delta['reasoning_content'])
except json.JSONDecodeError:
pass
curl -X POST http://your-domain.com/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "a beautiful landscape"
}
]
}'
curl -X POST http://your-domain.com/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "nai-diffusion-4-5-full",
"messages": [
{
"role": "user",
"content": "portrait 832:1216"
}
]
}'
fetch('http://your-domain.com/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'nai-diffusion-4-5-full',
messages: [
{
role: 'user',
content: 'a beautiful landscape'
}
],
stream: true
})
})
.then(response => {
const reader = response.body.getReader();
const decoder = new TextDecoder();
function readStream() {
reader.read().then(({ done, value }) => {
if (done) return;
const chunk = decoder.decode(value);
const lines = chunk.split('\n');
for (const line of lines) {
if (line.startsWith('data: ')) {
const data = line.slice(6);
if (data === '[DONE]') return;
try {
const json = JSON.parse(data);
const delta = json.choices?.[0]?.delta;
if (delta?.content) {
console.log(delta.content);
}
} catch (e) {}
}
}
readStream();
});
}
readStream();
});
832:1216、1216:832、1024:1024),不指定则使用默认尺寸 1216x832"不支持的图片尺寸。支持的尺寸:832:1216, 1216:832, 1024:1024"API 可能返回以下错误:
| 状态码 | 错误类型 | 说明 |
|---|---|---|
400 |
invalid_request_error |
缺少必需参数(如 model 或 messages),或指定的图片尺寸不在支持列表中 |
429 |
rate_limit_error |
当前没有可用的 Token(全部已禁用、过期或正在冷却) |
500 |
server_error |
服务器内部错误或图片生成失败 |
{
"error": {
"message": "错误描述信息",
"type": "error_type"
}
}