技术支持与商务合作
如需定制开发、获取 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. 图片尺寸控制

您可以通过两种方式指定尺寸。如果指定的尺寸不在支持列表中,将返回错误。

方式一:使用 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 请求参数 > 默认值。

支持的参数键:

示例:

"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) 事件流。主要包含三个阶段:

  1. 排队/进度:通过 reasoning_content 字段返回进度文本。
  2. 结果:通过 content 字段返回 Markdown 格式图片链接。
  3. 结束:发送 [DONE]
// 阶段 1: 进度更新
data: {"choices":[{"delta":{"reasoning_content":"🎨 正在生成图片,进度 30%"}}]}

// 阶段 2: 返回图片
data: {"choices":[{"delta":{"content":"![image](http://url.com/img.png)\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 服务器内部错误或上游生成失败。