Skip to main content
Glama
OPENAPI_SETUP.md13 kB
# DiffuGen OpenAPI Integration Guide 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 1. Install DiffuGen and its dependencies: ```bash git clone https://github.com/CLOUDWERX-DEV/diffugen.git cd DiffuGen chmod +x setup_diffugen.sh ./setup_diffugen.sh ``` 2. Start the OpenAPI server: ```bash 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: 1. `openapi_config.json` in the DiffuGen root directory 2. Custom config file path specified with `--config` command line option 3. Environment variables for specific settings ### Configuration Structure The `openapi_config.json` file has the following structure: ```json { "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 ```json "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 ```json "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 directory - `models_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 ```json "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 ```json "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 ```json "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 ```json "rate_limiting": { "rate": "60/minute", "enabled": true } ``` - `rate`: Maximum request rate in format `number/timeunit` (default: `"60/minute"`) - `enabled`: Whether rate limiting is enabled (default: `true`) #### Models Configuration ```json "models": { "flux": ["flux-schnell", "flux-dev"], "stable_diffusion": ["sdxl", "sd3", "sd15"] } ``` - `flux`: List of available Flux models - `stable_diffusion`: List of available Stable Diffusion models #### Default Model ```json "default_model": "flux-schnell" ``` - Specifies which model to use when no model is explicitly requested #### Default Parameters ```json "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 pixels - `height`: Default image height in pixels - `steps`: Default number of diffusion steps for each model - `cfg_scale`: Default classifier-free guidance scale for each model - `sampling_method`: Default sampling method for each model #### Images Configuration ```json "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 ```json "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 port - `SD_CPP_PATH`: Path to the stable-diffusion.cpp directory - `DIFFUGEN_OUTPUT_DIR`: Directory where generated images will be saved - `DIFFUGEN_CORS_ORIGINS`: Comma-separated list of allowed origins - `DIFFUGEN_RATE_LIMIT`: Rate limit in format `number/timeunit` - `CUDA_VISIBLE_DEVICES`: Control which GPUs are used - `VRAM_USAGE`: VRAM usage strategy - `GPU_LAYERS`: Number of layers to offload to GPU ### Command Line Options You can also specify some configuration options via command line: ```bash 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 1. Open OpenWebUI Settings (gear icon) 2. Navigate to the "Tools" section 3. Click the "+" button to add a new tool server 4. Enter the following details: - URL: http://0.0.0.0:5199 - API Key: (leave empty) 5. 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 Diffusion - `generate_flux_image_endpoint_generate_flux_post`: Generate with Flux Models - `list_models_models_get`: List Available Models ## API Endpoints Reference ### 1. Generate Image with Stable Diffusion Models ```http POST /generate/stable ``` Request body: ```json { "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: ```json { "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 ```http POST /generate/flux ``` Request body: ```json { "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 ```http GET /models ``` Response: ```json { "models": { "flux": ["flux-schnell", "flux-dev"], "stable_diffusion": ["sdxl", "sd3", "sd15"], "default_parameters": { // Model-specific default parameters } } } ``` ## Advanced Configuration Examples ### Basic Configuration ```json { "server": { "host": "127.0.0.1", "port": 8080 }, "paths": { "output_dir": "/var/diffugen/images" }, "default_model": "flux-schnell" } ``` ### High-Performance Configuration ```json { "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 ```json { "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: ```json { "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 `output` directory 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: ```python # In your environment or configuration DIFFUGEN_CORS_ORIGINS="http://localhost:3000,http://localhost:8080" DIFFUGEN_CORS_METHODS="GET,POST" ``` ## Troubleshooting 1. **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 2. **Generation fails** - Check model paths in configuration - Verify GPU memory availability - Try reducing image dimensions or steps - Check server logs for detailed error messages 3. **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 4. **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](https://github.com/CLOUDWERX-DEV/diffugen/issues) - Discord: [Join our server](https://discord.gg/SvZFuufNTQ) - Email: sysop@cloudwerx.dev

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CLOUDWERX-DEV/DiffuGen'

If you have feedback or need assistance with the MCP directory API, please join our Discord server