DiffuGen OpenAPI Integration Guide
April 2, 2025 ยท View on GitHub
This guide provides detailed instructions for setting up, configuring, and using DiffuGen's OpenAPI server capabilities, enabling integration with OpenWebUI and other OpenAPI-compatible tools.
Prerequisites
- Python 3.11 or newer
- NVIDIA GPU with CUDA support (recommended)
- DiffuGen base installation completed
Installation
- Install DiffuGen and its dependencies:
git clone https://github.com/CLOUDWERX-DEV/diffugen.git
cd DiffuGen
chmod +x setup_diffugen.sh
./setup_diffugen.sh
- Start the OpenAPI server:
python diffugen_openapi.py --port 5199
The server will be available at http://0.0.0.0:5199 with interactive documentation at http://0.0.0.0:5199/docs
Configuration
Configuration File Location
The OpenAPI server looks for configuration in the following locations:
openapi_config.jsonin the DiffuGen root directory- Custom config file path specified with
--configcommand line option - Environment variables for specific settings
Configuration Structure
The openapi_config.json file has the following structure:
{
"server": {
"host": "0.0.0.0",
"port": 5199,
"debug": false
},
"paths": {
"sd_cpp_path": "stable-diffusion.cpp",
"models_dir": "stable-diffusion.cpp/models",
"output_dir": "outputs"
},
"hardware": {
"vram_usage": "adaptive",
"gpu_layers": -1,
"cuda_device": "0"
},
"env": {
"CUDA_VISIBLE_DEVICES": "0"
},
"cors": {
"allow_origins": ["*"],
"allow_methods": ["GET", "POST", "OPTIONS"],
"allow_headers": ["*"]
},
"rate_limiting": {
"rate": "60/minute",
"enabled": true
},
"models": {
"flux": ["flux-schnell", "flux-dev"],
"stable_diffusion": ["sdxl", "sd3", "sd15"]
},
"default_model": "flux-schnell",
"default_params": {
"width": 512,
"height": 512,
"steps": {
"flux-schnell": 8,
"flux-dev": 20,
"sdxl": 20,
"sd3": 20,
"sd15": 20
},
"cfg_scale": {
"flux-schnell": 1.0,
"flux-dev": 1.0,
"sdxl": 7.0,
"sd3": 7.0,
"sd15": 7.0
},
"sampling_method": {
"flux-schnell": "euler",
"flux-dev": "euler",
"sdxl": "euler",
"sd3": "euler",
"sd15": "euler"
}
},
"images": {
"serve_path": "/images",
"cache_control": "max-age=3600"
},
"security": {
"api_key_required": false,
"api_keys": []
}
}
Configuration Sections
Server Configuration
"server": {
"host": "0.0.0.0",
"port": 5199,
"debug": false
}
host: The IP address the server will bind to (default:"0.0.0.0"to listen on all interfaces)port: The port the server will listen on (default:5199)debug: Whether to run in debug mode (default:false)
Path Configuration
"paths": {
"sd_cpp_path": "stable-diffusion.cpp",
"models_dir": "stable-diffusion.cpp/models",
"output_dir": "outputs"
}
sd_cpp_path: Path to the stable-diffusion.cpp directorymodels_dir: Path to the directory containing model files (if not set, defaults to{sd_cpp_path}/models)output_dir: Directory where generated images will be saved
Hardware Configuration
"hardware": {
"vram_usage": "adaptive",
"gpu_layers": -1,
"cuda_device": "0"
}
vram_usage: VRAM usage strategy (options:"adaptive","minimal","balanced","maximum")gpu_layers: Number of layers to offload to GPU (-1 for auto-detect)cuda_device: CUDA device to use for generation
Environment Variables
"env": {
"CUDA_VISIBLE_DEVICES": "0"
}
CUDA_VISIBLE_DEVICES: Controls which GPUs are visible to the application"0": Use only the first GPU"1": Use only the second GPU"0,1": Use both first and second GPUs"-1": Disable CUDA and use CPU only
CORS Configuration
"cors": {
"allow_origins": ["*"],
"allow_methods": ["GET", "POST", "OPTIONS"],
"allow_headers": ["*"]
}
allow_origins: List of allowed origins (default:["*"]to allow all origins)allow_methods: List of allowed HTTP methods (default:["GET", "POST", "OPTIONS"])allow_headers: List of allowed HTTP headers (default:["*"]to allow all headers)
Rate Limiting
"rate_limiting": {
"rate": "60/minute",
"enabled": true
}
rate: Maximum request rate in formatnumber/timeunit(default:"60/minute")enabled: Whether rate limiting is enabled (default:true)
Models Configuration
"models": {
"flux": ["flux-schnell", "flux-dev"],
"stable_diffusion": ["sdxl", "sd3", "sd15"]
}
flux: List of available Flux modelsstable_diffusion: List of available Stable Diffusion models
Default Model
"default_model": "flux-schnell"
- Specifies which model to use when no model is explicitly requested
Default Parameters
"default_params": {
"width": 512,
"height": 512,
"steps": {
"flux-schnell": 8,
"flux-dev": 20,
"sdxl": 20,
"sd3": 20,
"sd15": 20
},
"cfg_scale": {
"flux-schnell": 1.0,
"flux-dev": 1.0,
"sdxl": 7.0,
"sd3": 7.0,
"sd15": 7.0
},
"sampling_method": {
"flux-schnell": "euler",
"flux-dev": "euler",
"sdxl": "euler",
"sd3": "euler",
"sd15": "euler"
}
}
This section defines default parameters for generation:
width: Default image width in pixelsheight: Default image height in pixelssteps: Default number of diffusion steps for each modelcfg_scale: Default classifier-free guidance scale for each modelsampling_method: Default sampling method for each model
Images Configuration
"images": {
"serve_path": "/images",
"cache_control": "max-age=3600"
}
serve_path: URL path where images will be served (default:"/images")cache_control: Cache-Control header for served images (default:"max-age=3600")
Security Configuration
"security": {
"api_key_required": false,
"api_keys": []
}
api_key_required: Whether API key authentication is required (default:false)api_keys: List of valid API keys for authentication (default:[])
Environment Variable Overrides
You can override configuration settings with environment variables:
DIFFUGEN_OPENAPI_PORT: Override the server portSD_CPP_PATH: Path to the stable-diffusion.cpp directoryDIFFUGEN_OUTPUT_DIR: Directory where generated images will be savedDIFFUGEN_CORS_ORIGINS: Comma-separated list of allowed originsDIFFUGEN_RATE_LIMIT: Rate limit in formatnumber/timeunitCUDA_VISIBLE_DEVICES: Control which GPUs are usedVRAM_USAGE: VRAM usage strategyGPU_LAYERS: Number of layers to offload to GPU
Command Line Options
You can also specify some configuration options via command line:
python diffugen_openapi.py --host 127.0.0.1 --port 8080 --config custom_config.json
--host: Host address to bind to--port: Port to listen on--config: Path to a custom configuration file
OpenWebUI Integration
- Open OpenWebUI Settings (gear icon)
- Navigate to the "Tools" section
- Click the "+" button to add a new tool server
- Enter the following details:
- URL: http://0.0.0.0:5199
- API Key: (leave empty)
- Click "Save"
Once added, DiffuGen will appear in the available tools list when clicking the tools icon in the chat interface. The following endpoints will be available:
generate_stable_image_generate_stable_post: Generate with Stable Diffusiongenerate_flux_image_endpoint_generate_flux_post: Generate with Flux Modelslist_models_models_get: List Available Models
API Endpoints Reference
1. Generate Image with Stable Diffusion Models
POST /generate/stable
Request body:
{
"prompt": "A beautiful sunset over mountains",
"model": "sdxl",
"width": 1024,
"height": 768,
"steps": 30,
"cfg_scale": 7.0,
"seed": -1,
"sampling_method": "dpm++2m",
"negative_prompt": "blurry, low quality"
}
Response:
{
"file_path": "path/to/generated/image.png",
"metadata": {
"model": "sdxl",
"prompt": "A beautiful sunset over mountains",
"generation_time": "1.23s",
"parameters": {
// Generation parameters used
}
}
}
2. Generate Image with Flux Models
POST /generate/flux
Request body:
{
"prompt": "A cyberpunk cityscape",
"model": "flux-schnell",
"width": 512,
"height": 512,
"steps": 8,
"cfg_scale": 1.0,
"seed": -1,
"sampling_method": "euler"
}
Response: Same structure as Stable Diffusion endpoint
3. List Available Models
GET /models
Response:
{
"models": {
"flux": ["flux-schnell", "flux-dev"],
"stable_diffusion": ["sdxl", "sd3", "sd15"],
"default_parameters": {
// Model-specific default parameters
}
}
}
Advanced Configuration Examples
Basic Configuration
{
"server": {
"host": "127.0.0.1",
"port": 8080
},
"paths": {
"output_dir": "/var/diffugen/images"
},
"default_model": "flux-schnell"
}
High-Performance Configuration
{
"hardware": {
"vram_usage": "maximum",
"gpu_layers": -1,
"cuda_device": "0"
},
"env": {
"CUDA_VISIBLE_DEVICES": "0,1"
},
"default_params": {
"steps": {
"flux-schnell": 12,
"sdxl": 30
}
}
}
Production Configuration with Security
{
"server": {
"host": "0.0.0.0",
"port": 5199,
"debug": false
},
"cors": {
"allow_origins": ["https://example.com", "https://api.example.com"],
"allow_methods": ["GET", "POST"]
},
"rate_limiting": {
"rate": "30/minute",
"enabled": true
},
"security": {
"api_key_required": true,
"api_keys": ["your-secret-api-key-1", "your-secret-api-key-2"]
}
}
Model-Specific Recommendations
Flux Models
-
flux-schnell: Best for rapid prototyping
- Default steps: 8
- Default cfg_scale: 1.0
- Sampling method: euler
- Best for: Quick iterations, concept testing
-
flux-dev: Better quality, slower generation
- Default steps: 20
- Default cfg_scale: 1.0
- Sampling method: euler
- Best for: Higher quality generations
Stable Diffusion Models
-
sdxl: Highest quality, largest model
- Default steps: 20-30
- Default cfg_scale: 7.0
- Sampling method: dpm++2m
- Best for: Professional quality images
-
sd3: Good balance of quality and speed
- Default steps: 20
- Default cfg_scale: 7.0
- Sampling method: euler_a
- Best for: General purpose generation
-
sd15: Classic model, reliable results
- Default steps: 20
- Default cfg_scale: 7.0
- Sampling method: euler_a
- Best for: Consistent, well-understood results
Error Handling
The API uses standard HTTP status codes:
- 200: Successful generation
- 400: Invalid request parameters
- 404: Model not found
- 500: Server error
Error responses include detailed messages:
{
"error": "Invalid parameters",
"detail": "Width must be between 256 and 2048",
"code": "INVALID_DIMENSIONS"
}
Output Directory Configuration
The server uses the following directory configuration:
- Default output directory:
/output - Environment variable:
DIFFUGEN_OUTPUT_DIR - Fallback: Creates an
outputdirectory in the current working directory if the specified directory is not accessible
Generated images are saved to this directory and served through the /images endpoint. The full URL for accessing generated images will be: http://your-server:port/images/filename.png
CORS Configuration
By default, CORS is enabled for OpenWebUI integration. You can configure CORS settings:
# In your environment or configuration
DIFFUGEN_CORS_ORIGINS="http://localhost:3000,http://localhost:8080"
DIFFUGEN_CORS_METHODS="GET,POST"
Troubleshooting
-
Server won't start
- Check if required models are downloaded
- Verify CUDA installation if using GPU
- Check port 5199 is available
- Verify Python environment is activated
-
Generation fails
- Check model paths in configuration
- Verify GPU memory availability
- Try reducing image dimensions or steps
- Check server logs for detailed error messages
-
Poor image quality
- Increase steps (20-30 for better quality)
- Adjust cfg_scale (7.0-9.0 for SD models)
- Use more detailed prompts
- Try different sampling methods
-
OpenWebUI Integration Issues
- Verify server is running and accessible
- Check CORS settings if using a different domain
- Ensure URL is correctly formatted in tool settings
- Check browser console for error messages
Support
For issues and questions:
- GitHub Issues: CLOUDWERX-DEV/diffugen
- Discord: Join our server
- Email: sysop@cloudwerx.dev