Health check endpoint.
Response:
- If
serve_html_pathconfigured: Returns HTML content - Otherwise: Plain text "Stable Diffusion Server is running"
Lists available models.
Response:
{
"data": [
{
"id": "sd-cpp-local",
"object": "model",
"owned_by": "local"
}
]
}Generate images from text prompts.
Request Body (JSON):
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt |
string | Yes | - | Text description of desired image |
n |
integer | No | 1 | Number of images (1-8) |
size |
string | No | "512x512" | Image dimensions (format: {width}x{height}) |
output_format |
string | No | "png" | Output format: "png" or "jpeg" |
output_compression |
integer | No | 100 | Compression quality (0-100) |
Special Feature - sd_cpp_extra_args: You can embed additional parameters in the prompt using XML tags:
<sd_cpp_extra_args>{"sample_steps": 30, "cfg_scale": 8.5}</sd_cpp_extra_args>
These parameters follow the SDGenerationParams structure and are automatically extracted from the prompt.
Response (JSON):
{
"created": 1234567890,
"output_format": "png",
"data": [
{
"b64_json": "base64_encoded_image_data"
}
]
}Error Responses:
400: Missing/invalid prompt, invalid output_format, invalid sd_cpp_extra_args, invalid params500: Server error with details inerrorandmessagefields
Edit or generate images using reference images and optional masks.
Request (multipart/form-data):
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
prompt |
string | Yes | - | Text description |
image[] |
file(s) | Yes | - | One or more reference images |
mask |
file | No | - | Optional mask image (1-channel) |
n |
string | No | "1" | Number of images (1-8) |
size |
string | No | "512x512" | Output dimensions |
output_format |
string | No | "png" | "png" or "jpeg" |
output_compression |
string | No | "100" | Compression quality (0-100) |
Special Feature - sd_cpp_extra_args:
Same as /v1/images/generations - embed extra parameters in the prompt.
Response (JSON):
{
"created": 1234567890,
"output_format": "png",
"data": [
{
"b64_json": "base64_encoded_image_data"
}
]
}Error Responses:
400: Not multipart/form-data, missing prompt/images, invalid format500: Server error
Text-to-image generation (A1111 compatible).
Request Body (JSON):
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt |
string | Yes | - | Positive prompt |
negative_prompt |
string | No | "" | Negative prompt |
width |
integer | No | 512 | Image width (must be positive) |
height |
integer | No | 512 | Image height (must be positive) |
steps |
integer | No | - | Sampling steps (1-150) |
cfg_scale |
float | No | 7.0 | CFG scale (must be positive) |
seed |
integer | No | -1 | Random seed (-1 for random) |
batch_size |
integer | No | 1 | Number of images (1-8) |
clip_skip |
integer | No | -1 | CLIP skip layers |
sampler_name |
string | No | "" | Sampler name (see /sdapi/v1/samplers) |
scheduler |
string | No | "" | Scheduler name (see /sdapi/v1/schedulers) |
LoRA Support:
LoRA tags are extracted from the prompt using format: <lora:name:weight> or <lora:name:weight:weight2>
Response (JSON):
{
"images": ["base64_png_1", "base64_png_2"],
"parameters": { /* echoes input parameters */ },
"info": ""
}Error Responses:
400: Invalid dimensions, steps out of range, invalid batch_size, missing prompt500: Server error
Image-to-image generation (A1111 compatible).
Request Body (JSON):
All parameters from /sdapi/v1/txt2img plus:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
init_images |
array | Yes* | - | Array of base64-encoded images (with/without data URI prefix) |
mask |
string | No | - | Base64-encoded mask image |
inpainting_mask_invert |
integer | No | 0 | Invert mask (0 or 1) |
extra_images |
array | No | [] | Additional base64-encoded reference images |
denoising_strength |
float | No | -1 | Denoising strength (0.0-1.0) |
*At least one of init_images required for img2img mode
Mask Behavior:
- If no mask provided, generates full white mask (entire image editable)
- Mask is inverted if
inpainting_mask_invertis non-zero
Response: Same format as /sdapi/v1/txt2img
List available sampling methods.
Response (JSON):
[
{
"name": "default",
"aliases": ["default"],
"options": {}
},
{
"name": "euler_a",
"aliases": ["euler_a"],
"options": {}
}
// ... more samplers
]Supported Samplers:
- Default
- euler_a / k_euler_a
- euler / k_euler
- heun / k_heun
- dpm2 / k_dpm_2
- lcm
- ddim
- dpm++ 2m / k_dpmpp_2m
List available schedulers.
Response (JSON):
[
{
"name": "default",
"label": "default"
},
{
"name": "discrete",
"label": "discrete"
}
// ... more schedulers
]Get currently loaded model information.
Response (JSON):
[
{
"title": "model_name",
"model_name": "model_name",
"filename": "model.safetensors",
"hash": "8888888888",
"sha256": "8888888888888888888888888888888888888888888888888888888888888888",
"config": null
}
]Get server options.
Response (JSON):
{
"samples_format": "png",
"sd_model_checkpoint": "model_name"
}All endpoints support CORS with the following headers:
Access-Control-Allow-Origin: Reflects request origin or*Access-Control-Allow-Credentials:trueAccess-Control-Allow-Methods:*Access-Control-Allow-Headers:*
OPTIONS requests return status 204.
Command Line Options:
Server Options:
-l, --listen-ip: Server IP address (default: 127.0.0.1)--listen-port: Server port (default: 1234)--serve-html-path: Optional HTML file to serve at root-v, --verbose: Enable verbose logging--color: Enable colored logging
Context and generation options are also available (see SDContextParams and SDGenerationParams).
All endpoints follow this error format:
{
"error": "error_type",
"message": "Detailed error message"
}Common HTTP status codes:
200: Success204: No content (OPTIONS)400: Bad request (validation errors)500: Internal server error