|
|
3 달 전 | |
|---|---|---|
| .kdev4 | 3 달 전 | |
| .nanocoder | 3 달 전 | |
| .roo | 3 달 전 | |
| cmake | 3 달 전 | |
| include | 3 달 전 | |
| src | 3 달 전 | |
| webui | 3 달 전 | |
| .clang-format | 3 달 전 | |
| .clang-tidy | 3 달 전 | |
| .gitignore | 3 달 전 | |
| AGENTS.md | 3 달 전 | |
| CMakeLists.txt | 3 달 전 | |
| README.md | 3 달 전 | |
| install.sh | 3 달 전 | |
| stable-diffusion-rest.service.template | 3 달 전 | |
| uninstall.sh | 3 달 전 |
A C++ based REST API wrapper for the stable-diffusion.cpp library, providing HTTP endpoints for image generation with Stable Diffusion models.
The stable-diffusion.cpp-rest project aims to create a high-performance REST API server that wraps the functionality of the stable-diffusion.cpp library. This enables developers to integrate Stable Diffusion image generation capabilities into their applications through standard HTTP requests, rather than directly using the C++ library.
A modern, responsive web interface is included and automatically built with the server!
Features:
Quick Start:
# Build (automatically builds web UI)
mkdir build && cd build
cmake ..
cmake --build .
# Run server with web UI
./src/stable-diffusion-rest-server --models-dir /path/to/models --checkpoints checkpoints --ui-dir ../webui
# Access web UI
open http://localhost:8080/ui/
See WEBUI.md for detailed documentation.
The project is designed with a modular architecture consisting of three main components:
Provides type-based model organization
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ HTTP Server │───▶│ Generation Queue│───▶│ Model Manager │
│ │ │ │ │ │
│ - Request Parse │ │ - Job Queue │ │ - Model Loading │
│ - Response │ │ - Sequential │ │ - Type Detection│
│ Formatting │ │ Processing │ │ - Memory Mgmt │
└─────────────────┘ └─────────────────┘ └─────────────────┘
stable-diffusion.cpp-rest/
├── CMakeLists.txt # Main CMake configuration
├── README.md # This file
├── src/ # Source code directory
│ ├── main.cpp # Application entry point
│ ├── http/ # HTTP server implementation
│ │ ├── server.h/.cpp # HTTP server class
│ │ ├── handlers.h/.cpp # Request handlers
│ │ └── responses.h/.cpp # Response formatting
│ ├── generation/ # Generation queue implementation
│ │ ├── queue.h/.cpp # Job queue management
│ │ ├── worker.h/.cpp # Generation worker thread
│ │ └── job.h/.cpp # Job definition and status
│ ├── models/ # Model manager implementation
│ │ ├── manager.h/.cpp # Model manager class
│ │ ├── loader.h/.cpp # Model loading logic
│ │ └── types.h/.cpp # Model type definitions
│ └── utils/ # Utility functions
│ ├── config.h/.cpp # Configuration management
│ └── logger.h/.cpp # Logging utilities
├── include/ # Public header files
├── external/ # External dependencies (managed by CMake)
├── models/ # Default model storage directory
│ ├── lora/ # LoRA models
│ ├── checkpoints/ # Checkpoint models
│ ├── vae/ # VAE models
│ ├── presets/ # Preset files
│ ├── prompts/ # Prompt templates
│ ├── neg_prompts/ # Negative prompt templates
│ ├── taesd/ # TAESD models
│ ├── esrgan/ # ESRGAN models
│ ├── controlnet/ # ControlNet models
│ ├── upscaler/ # Upscaler models
│ └── embeddings/ # Textual embeddings
├── tests/ # Unit and integration tests
├── examples/ # Usage examples
└── docs/ # Additional documentation
The project supports various model types, each with specific file extensions:
| Model Type | Enum Value | Description | Supported Extensions |
|---|---|---|---|
| LORA | 1 | Low-Rank Adaptation models | .safetensors, .pt, .ckpt |
| CHECKPOINT | 2 | Main model checkpoints | .safetensors, .pt, .ckpt |
| VAE | 4 | Variational Autoencoder models | .safetensors, .pt, .ckpt |
| PRESETS | 8 | Generation preset files | .json, .yaml, .yml |
| PROMPTS | 16 | Prompt template files | .txt, .json |
| NEG_PROMPTS | 32 | Negative prompt templates | .txt, .json |
| TAESD | 64 | Tiny AutoEncoder for SD | .safetensors, .pt, .ckpt |
| ESRGAN | 128 | Super-resolution models | .pth, .pt |
| CONTROLNET | 256 | ControlNet models | .safetensors, .pt, .ckpt |
| UPSCALER | 512 | Image upscaler models | .pth, .pt |
| EMBEDDING | 1024 | Textual embeddings | .safetensors, .pt, .ckpt |
enum ModelType {
LORA = 1,
CHECKPOINT = 2,
VAE = 4,
PRESETS = 8,
PROMPTS = 16,
NEG_PROMPTS = 32,
TAESD = 64,
ESRGAN = 128,
CONTROLNET = 256,
UPSCALER = 512,
EMBEDDING = 1024
};
POST /api/v1/generate/text2img - Generate image from text promptPOST /api/v1/generate/img2img - Transform image with text promptPOST /api/v1/generate/inpainting - Inpaint image with maskGET /api/v1/generate/{job_id} - Get generation status and resultDELETE /api/v1/generate/{job_id} - Cancel a generation jobGET /api/v1/models - List available modelsGET /api/v1/models/{type} - List models of specific typePOST /api/v1/models/load - Load a modelPOST /api/v1/models/unload - Unload a modelGET /api/v1/models/{model_id} - Get model informationGET /api/v1/status - Get server status and statisticsGET /api/v1/system - Get system information (GPU, memory, etc.)POST /api/v1/generate
{
"prompt": "a beautiful landscape",
"negative_prompt": "blurry, low quality",
"model": "sd-v1-5",
"width": 512,
"height": 512,
"steps": 20,
"cfg_scale": 7.5,
"seed": -1,
"batch_size": 1
}
{
"job_id": "uuid-string",
"status": "completed",
"images": [
{
"data": "base64-encoded-image-data",
"seed": 12345,
"parameters": {
"prompt": "a beautiful landscape",
"negative_prompt": "blurry, low quality",
"model": "sd-v1-5",
"width": 512,
"height": 512,
"steps": 20,
"cfg_scale": 7.5,
"seed": 12345,
"batch_size": 1
}
}
],
"generation_time": 3.2
}
The server supports multiple authentication methods to secure API access:
No Authentication (Default)
JWT Token Authentication
API Key Authentication
PAM Authentication
Authentication can be configured via command-line arguments or configuration files:
# Enable PAM authentication
./stable-diffusion-rest-server --auth pam --models-dir /path/to/models --checkpoints checkpoints
# Enable JWT authentication
./stable-diffusion-rest-server --auth jwt --models-dir /path/to/models --checkpoints checkpoints
# Enable API key authentication
./stable-diffusion-rest-server --auth api-key --models-dir /path/to/models --checkpoints checkpoints
# Enable Unix authentication
./stable-diffusion-rest-server --auth unix --models-dir /path/to/models --checkpoints checkpoints
# No authentication (default)
./stable-diffusion-rest-server --auth none --models-dir /path/to/models --checkpoints checkpoints
none - No authentication required (default)jwt - JWT token authenticationapi-key - API key authenticationunix - Unix system authenticationpam - PAM authenticationoptional - Authentication optional (guest access allowed)The following options are deprecated and will be removed in a future version:
--enable-unix-auth - Use --auth unix instead--enable-pam-auth - Use --auth pam insteadPOST /api/v1/auth/login - Authenticate with username/password (PAM/JWT)POST /api/v1/auth/refresh - Refresh JWT tokenGET /api/v1/auth/profile - Get current user profilePOST /api/v1/auth/logout - Logout/invalidate tokenFor detailed authentication setup instructions, see PAM_AUTHENTICATION.md.
Clone the repository:
git clone https://github.com/your-username/stable-diffusion.cpp-rest.git
cd stable-diffusion.cpp-rest
Create a build directory:
mkdir build
cd build
Configure with CMake:
cmake ..
Build the project:
cmake --build . --parallel
(Optional) Install the binary:
cmake --install .
The project uses CMake's external project feature to automatically download and build the stable-diffusion.cpp library:
include(ExternalProject)
ExternalProject_Add(
stable-diffusion.cpp
GIT_REPOSITORY https://github.com/leejet/stable-diffusion.cpp.git
GIT_TAG master-334-d05e46c
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/stable-diffusion.cpp-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/stable-diffusion.cpp-build"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/stable-diffusion.cpp-install
INSTALL_COMMAND ""
)
PAM authentication support is enabled by default when PAM libraries are available. You can control this with CMake options:
# Build with PAM support (default when available)
cmake -DENABLE_PAM_AUTH=ON ..
# Build without PAM support
cmake -DENABLE_PAM_AUTH=OFF ..
# Check if PAM support will be built
cmake -LA | grep ENABLE_PAM_AUTH
Note: PAM authentication requires the PAM development libraries:
# Ubuntu/Debian
sudo apt-get install libpam0g-dev
# CentOS/RHEL/Fedora
sudo yum install pam-devel
# Basic usage
./stable-diffusion.cpp-rest
# With custom configuration
./stable-diffusion.cpp-rest --config config.json
# With custom model directory
./stable-diffusion.cpp-rest --model-dir /path/to/models
import requests
import base64
import json
# Generate an image
response = requests.post('http://localhost:8080/api/v1/generate', json={
'prompt': 'a beautiful landscape',
'width': 512,
'height': 512,
'steps': 20
})
result = response.json()
if result['status'] == 'completed':
# Decode and save the first image
image_data = base64.b64decode(result['images'][0]['data'])
with open('generated_image.png', 'wb') as f:
f.write(image_data)
async function generateImage() {
const response = await fetch('http://localhost:8080/api/v1/generate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
prompt: 'a beautiful landscape',
width: 512,
height: 512,
steps: 20
})
});
const result = await response.json();
if (result.status === 'completed') {
// Create an image element with the generated image
const img = document.createElement('img');
img.src = `data:image/png;base64,${result.images[0].data}`;
document.body.appendChild(img);
}
}
# Generate an image
curl -X POST http://localhost:8080/api/v1/generate \
-H "Content-Type: application/json" \
-d '{
"prompt": "a beautiful landscape",
"width": 512,
"height": 512,
"steps": 20
}'
# Check job status
curl http://localhost:8080/api/v1/generate/{job_id}
# List available models
curl http://localhost:8080/api/v1/models
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
This project is licensed under the MIT License - see the LICENSE file for details.