Base code

This commit is contained in:
Kunthawat Greethong
2026-01-08 22:39:53 +07:00
parent 697115c61a
commit c35fa52117
2169 changed files with 626670 additions and 0 deletions

View File

@@ -0,0 +1,940 @@
# Image Studio API Reference
Complete API documentation for Image Studio, including all endpoints, request/response models, authentication, and usage examples.
## Base URL
All Image Studio endpoints are prefixed with `/api/image-studio`
## Authentication
All endpoints require authentication via Bearer token:
```http
Authorization: Bearer YOUR_ACCESS_TOKEN
```
The token is obtained through the standard ALwrity authentication flow. See [Authentication Guide](../api/authentication.md) for details.
## API Architecture
```mermaid
graph TB
Client[Client Application] --> API[Image Studio API]
API --> Create[Create Studio]
API --> Edit[Edit Studio]
API --> Upscale[Upscale Studio]
API --> Control[Control Studio]
API --> Social[Social Optimizer]
API --> Templates[Templates]
API --> Providers[Providers]
Create --> Manager[ImageStudioManager]
Edit --> Manager
Upscale --> Manager
Control --> Manager
Social --> Manager
Manager --> Stability[Stability AI]
Manager --> WaveSpeed[WaveSpeed AI]
Manager --> HuggingFace[HuggingFace]
Manager --> Gemini[Gemini]
style Client fill:#e3f2fd
style API fill:#e1f5fe
style Manager fill:#f3e5f5
```
## Endpoint Categories
### Create Studio
- [Generate Image](#generate-image)
- [Get Templates](#get-templates)
- [Search Templates](#search-templates)
- [Recommend Templates](#recommend-templates)
- [Get Providers](#get-providers)
- [Estimate Cost](#estimate-cost)
### Edit Studio
- [Process Edit](#process-edit)
- [Get Edit Operations](#get-edit-operations)
### Upscale Studio
- [Upscale Image](#upscale-image)
### Control Studio
- [Process Control](#process-control)
- [Get Control Operations](#get-control-operations)
### Social Optimizer
- [Optimize for Social](#optimize-for-social)
- [Get Platform Formats](#get-platform-formats)
### Platform Specifications
- [Get Platform Specs](#get-platform-specs)
### Health Check
- [Health Check](#health-check)
---
## Create Studio Endpoints
### Generate Image
Generate one or more images from text prompts.
**Endpoint**: `POST /api/image-studio/create`
**Request Body**:
```json
{
"prompt": "Modern minimalist workspace with laptop",
"template_id": "linkedin_post",
"provider": "auto",
"model": null,
"width": null,
"height": null,
"aspect_ratio": null,
"style_preset": "photographic",
"quality": "standard",
"negative_prompt": "blurry, low quality",
"guidance_scale": null,
"steps": null,
"seed": null,
"num_variations": 1,
"enhance_prompt": true,
"use_persona": false,
"persona_id": null
}
```
**Request Fields**:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `prompt` | string | Yes | Image generation prompt |
| `template_id` | string | No | Template ID to use |
| `provider` | string | No | Provider: auto, stability, wavespeed, huggingface, gemini |
| `model` | string | No | Specific model to use |
| `width` | integer | No | Image width in pixels |
| `height` | integer | No | Image height in pixels |
| `aspect_ratio` | string | No | Aspect ratio (e.g., '1:1', '16:9') |
| `style_preset` | string | No | Style preset |
| `quality` | string | No | Quality: draft, standard, premium (default: standard) |
| `negative_prompt` | string | No | Negative prompt |
| `guidance_scale` | float | No | Guidance scale |
| `steps` | integer | No | Number of inference steps |
| `seed` | integer | No | Random seed |
| `num_variations` | integer | No | Number of variations (1-10, default: 1) |
| `enhance_prompt` | boolean | No | Enhance prompt with AI (default: true) |
| `use_persona` | boolean | No | Use persona for brand consistency (default: false) |
| `persona_id` | string | No | Persona ID |
**Response**:
```json
{
"success": true,
"request": {
"prompt": "Modern minimalist workspace with laptop",
"enhanced_prompt": "Modern minimalist workspace with laptop, professional photography, high quality",
"template_id": "linkedin_post",
"template_name": "LinkedIn Post",
"provider": "wavespeed",
"model": "ideogram-v3-turbo",
"dimensions": "1200x628",
"quality": "standard"
},
"results": [
{
"image_base64": "iVBORw0KGgoAAAANS...",
"width": 1200,
"height": 628,
"provider": "wavespeed",
"model": "ideogram-v3-turbo",
"variation": 1
}
],
"total_generated": 1,
"total_failed": 0
}
```
**Response Fields**:
| Field | Type | Description |
|-------|------|-------------|
| `success` | boolean | Operation success status |
| `request` | object | Request details with applied settings |
| `results` | array | Generated images with base64 data |
| `total_generated` | integer | Number of successfully generated images |
| `total_failed` | integer | Number of failed generations |
**Error Responses**:
- `400 Bad Request`: Invalid request parameters
- `401 Unauthorized`: Authentication required
- `500 Internal Server Error`: Generation failed
---
### Get Templates
Get available image templates, optionally filtered by platform or category.
**Endpoint**: `GET /api/image-studio/templates`
**Query Parameters**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `platform` | string | No | Filter by platform (instagram, facebook, twitter, etc.) |
| `category` | string | No | Filter by category (social_media, blog_content, etc.) |
**Example Request**:
```http
GET /api/image-studio/templates?platform=instagram
```
**Response**:
```json
{
"templates": [
{
"id": "instagram_feed_square",
"name": "Instagram Feed Post (Square)",
"category": "social_media",
"platform": "instagram",
"aspect_ratio": {
"ratio": "1:1",
"width": 1080,
"height": 1080,
"label": "Square"
},
"description": "Perfect for Instagram feed posts",
"recommended_provider": "ideogram",
"style_preset": "photographic",
"quality": "premium",
"use_cases": ["Product showcase", "Lifestyle posts", "Brand content"]
}
],
"total": 4
}
```
---
### Search Templates
Search templates by query string.
**Endpoint**: `GET /api/image-studio/templates/search`
**Query Parameters**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | Search query |
**Example Request**:
```http
GET /api/image-studio/templates/search?query=linkedin
```
**Response**: Same format as Get Templates
---
### Recommend Templates
Get template recommendations based on use case.
**Endpoint**: `GET /api/image-studio/templates/recommend`
**Query Parameters**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `use_case` | string | Yes | Use case description |
| `platform` | string | No | Optional platform filter |
**Example Request**:
```http
GET /api/image-studio/templates/recommend?use_case=product+showcase&platform=instagram
```
**Response**: Same format as Get Templates
---
### Get Providers
Get available AI providers and their capabilities.
**Endpoint**: `GET /api/image-studio/providers`
**Response**:
```json
{
"providers": {
"stability": {
"name": "Stability AI",
"models": ["ultra", "core", "sd3.5-large"],
"capabilities": ["generation", "editing", "upscaling"],
"max_resolution": "2048x2048",
"cost_range": "3-8 credits"
},
"wavespeed": {
"name": "WaveSpeed AI",
"models": ["ideogram-v3-turbo", "qwen-image"],
"capabilities": ["generation"],
"max_resolution": "1024x1024",
"cost_range": "1-6 credits"
}
}
}
```
---
### Estimate Cost
Estimate cost for image generation operations.
**Endpoint**: `POST /api/image-studio/estimate-cost`
**Request Body**:
```json
{
"provider": "wavespeed",
"model": "ideogram-v3-turbo",
"operation": "generate",
"num_images": 1,
"width": 1200,
"height": 628
}
```
**Request Fields**:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `provider` | string | Yes | Provider name |
| `model` | string | No | Model name |
| `operation` | string | No | Operation type (default: generate) |
| `num_images` | integer | No | Number of images (default: 1) |
| `width` | integer | No | Image width |
| `height` | integer | No | Image height |
**Response**:
```json
{
"estimated_cost": 5,
"currency": "credits",
"provider": "wavespeed",
"model": "ideogram-v3-turbo",
"operation": "generate",
"num_images": 1
}
```
---
## Edit Studio Endpoints
### Process Edit
Perform Edit Studio operations on images.
**Endpoint**: `POST /api/image-studio/edit/process`
**Request Body**:
```json
{
"image_base64": "data:image/png;base64,iVBORw0KGgo...",
"operation": "remove_background",
"prompt": null,
"negative_prompt": null,
"mask_base64": null,
"search_prompt": null,
"select_prompt": null,
"background_image_base64": null,
"lighting_image_base64": null,
"expand_left": 0,
"expand_right": 0,
"expand_up": 0,
"expand_down": 0,
"provider": null,
"model": null,
"style_preset": null,
"guidance_scale": null,
"steps": null,
"seed": null,
"output_format": "png",
"options": {}
}
```
**Request Fields**:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `image_base64` | string | Yes | Primary image (base64 or data URL) |
| `operation` | string | Yes | Operation: remove_background, inpaint, outpaint, search_replace, search_recolor, general_edit |
| `prompt` | string | No | Primary prompt/instruction |
| `negative_prompt` | string | No | Negative prompt |
| `mask_base64` | string | No | Optional mask image (base64) |
| `search_prompt` | string | No | Search prompt for replace operations |
| `select_prompt` | string | No | Select prompt for recolor operations |
| `background_image_base64` | string | No | Reference background image |
| `lighting_image_base64` | string | No | Reference lighting image |
| `expand_left` | integer | No | Outpaint expansion left (pixels) |
| `expand_right` | integer | No | Outpaint expansion right (pixels) |
| `expand_up` | integer | No | Outpaint expansion up (pixels) |
| `expand_down` | integer | No | Outpaint expansion down (pixels) |
| `provider` | string | No | Explicit provider override |
| `model` | string | No | Explicit model override |
| `style_preset` | string | No | Style preset |
| `guidance_scale` | float | No | Guidance scale |
| `steps` | integer | No | Inference steps |
| `seed` | integer | No | Random seed |
| `output_format` | string | No | Output format (default: png) |
| `options` | object | No | Advanced provider-specific options |
**Response**:
```json
{
"success": true,
"operation": "remove_background",
"provider": "stability",
"image_base64": "data:image/png;base64,iVBORw0KGgo...",
"width": 1200,
"height": 628,
"metadata": {
"operation": "remove_background",
"processing_time": 2.5
}
}
```
---
### Get Edit Operations
Get metadata for all available Edit Studio operations.
**Endpoint**: `GET /api/image-studio/edit/operations`
**Response**:
```json
{
"operations": {
"remove_background": {
"label": "Remove Background",
"description": "Isolate the main subject",
"provider": "stability",
"fields": {
"prompt": false,
"mask": false,
"negative_prompt": false,
"search_prompt": false,
"select_prompt": false,
"background": false,
"lighting": false,
"expansion": false
}
},
"inpaint": {
"label": "Inpaint & Fix",
"description": "Edit specific regions using prompts and optional masks",
"provider": "stability",
"fields": {
"prompt": true,
"mask": true,
"negative_prompt": true,
"search_prompt": false,
"select_prompt": false,
"background": false,
"lighting": false,
"expansion": false
}
}
}
}
```
---
## Upscale Studio Endpoints
### Upscale Image
Upscale an image using AI-powered upscaling.
**Endpoint**: `POST /api/image-studio/upscale`
**Request Body**:
```json
{
"image_base64": "data:image/png;base64,iVBORw0KGgo...",
"mode": "conservative",
"target_width": null,
"target_height": null,
"preset": "print",
"prompt": "High fidelity upscale preserving original details"
}
```
**Request Fields**:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `image_base64` | string | Yes | Image to upscale (base64 or data URL) |
| `mode` | string | No | Mode: fast, conservative, creative, auto (default: auto) |
| `target_width` | integer | No | Target width in pixels |
| `target_height` | integer | No | Target height in pixels |
| `preset` | string | No | Named preset: web, print, social |
| `prompt` | string | No | Prompt for conservative/creative modes |
**Response**:
```json
{
"success": true,
"mode": "conservative",
"image_base64": "data:image/png;base64,iVBORw0KGgo...",
"width": 3072,
"height": 2048,
"metadata": {
"preset": "print",
"original_width": 768,
"original_height": 512,
"upscale_factor": 4.0
}
}
```
---
## Control Studio Endpoints
### Process Control
Perform Control Studio operations (sketch-to-image, style transfer, etc.).
**Endpoint**: `POST /api/image-studio/control/process`
**Request Body**:
```json
{
"control_image_base64": "data:image/png;base64,iVBORw0KGgo...",
"operation": "sketch",
"prompt": "Modern office interior",
"style_image_base64": null,
"negative_prompt": null,
"control_strength": 0.8,
"fidelity": null,
"style_strength": null,
"composition_fidelity": null,
"change_strength": null,
"aspect_ratio": null,
"style_preset": null,
"seed": null,
"output_format": "png"
}
```
**Request Fields**:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `control_image_base64` | string | Yes | Control image (sketch/structure/style) |
| `operation` | string | Yes | Operation: sketch, structure, style, style_transfer |
| `prompt` | string | Yes | Text prompt for generation |
| `style_image_base64` | string | No | Style reference image (for style_transfer) |
| `negative_prompt` | string | No | Negative prompt |
| `control_strength` | float | No | Control strength 0.0-1.0 (for sketch/structure) |
| `fidelity` | float | No | Style fidelity 0.0-1.0 (for style operation) |
| `style_strength` | float | No | Style strength 0.0-1.0 (for style_transfer) |
| `composition_fidelity` | float | No | Composition fidelity 0.0-1.0 (for style_transfer) |
| `change_strength` | float | No | Change strength 0.0-1.0 (for style_transfer) |
| `aspect_ratio` | string | No | Aspect ratio (for style operation) |
| `style_preset` | string | No | Style preset |
| `seed` | integer | No | Random seed |
| `output_format` | string | No | Output format (default: png) |
**Response**:
```json
{
"success": true,
"operation": "sketch",
"provider": "stability",
"image_base64": "data:image/png;base64,iVBORw0KGgo...",
"width": 1024,
"height": 1024,
"metadata": {
"operation": "sketch",
"control_strength": 0.8
}
}
```
---
### Get Control Operations
Get metadata for all available Control Studio operations.
**Endpoint**: `GET /api/image-studio/control/operations`
**Response**: Similar format to Edit Operations
---
## Social Optimizer Endpoints
### Optimize for Social
Optimize an image for multiple social media platforms.
**Endpoint**: `POST /api/image-studio/social/optimize`
**Request Body**:
```json
{
"image_base64": "data:image/png;base64,iVBORw0KGgo...",
"platforms": ["instagram", "facebook", "linkedin"],
"format_names": {
"instagram": "Feed Post (Square)",
"facebook": "Feed Post",
"linkedin": "Post"
},
"show_safe_zones": false,
"crop_mode": "smart",
"focal_point": null,
"output_format": "png"
}
```
**Request Fields**:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `image_base64` | string | Yes | Source image (base64 or data URL) |
| `platforms` | array | Yes | List of platforms to optimize for |
| `format_names` | object | No | Specific format per platform |
| `show_safe_zones` | boolean | No | Include safe zone overlay (default: false) |
| `crop_mode` | string | No | Crop mode: smart, center, fit (default: smart) |
| `focal_point` | object | No | Focal point for smart crop (x, y as 0-1) |
| `output_format` | string | No | Output format: png or jpg (default: png) |
**Response**:
```json
{
"success": true,
"results": [
{
"platform": "instagram",
"format": "Feed Post (Square)",
"image_base64": "data:image/png;base64,iVBORw0KGgo...",
"width": 1080,
"height": 1080
},
{
"platform": "facebook",
"format": "Feed Post",
"image_base64": "data:image/png;base64,iVBORw0KGgo...",
"width": 1200,
"height": 630
}
],
"total_optimized": 2
}
```
---
### Get Platform Formats
Get available formats for a specific social media platform.
**Endpoint**: `GET /api/image-studio/social/platforms/{platform}/formats`
**Path Parameters**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `platform` | string | Yes | Platform name (instagram, facebook, etc.) |
**Response**:
```json
{
"formats": [
{
"name": "Feed Post (Square)",
"width": 1080,
"height": 1080,
"ratio": "1:1",
"safe_zone": {
"top": 0.15,
"bottom": 0.15,
"left": 0.1,
"right": 0.1
},
"file_type": "PNG",
"max_size_mb": 5.0
}
]
}
```
---
## Platform Specifications Endpoints
### Get Platform Specs
Get specifications and requirements for a specific platform.
**Endpoint**: `GET /api/image-studio/platform-specs/{platform}`
**Path Parameters**:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `platform` | string | Yes | Platform name |
**Response**:
```json
{
"name": "Instagram",
"formats": [
{
"name": "Feed Post (Square)",
"ratio": "1:1",
"size": "1080x1080"
}
],
"file_types": ["JPG", "PNG"],
"max_file_size": "30MB"
}
```
---
## Health Check
### Health Check
Check Image Studio service health.
**Endpoint**: `GET /api/image-studio/health`
**Response**:
```json
{
"status": "healthy",
"service": "image_studio",
"version": "1.0.0",
"modules": {
"create_studio": "available",
"templates": "available",
"providers": "available"
}
}
```
---
## Error Handling
### Error Response Format
All errors follow this format:
```json
{
"detail": "Error message description"
}
```
### HTTP Status Codes
- `200 OK`: Successful request
- `400 Bad Request`: Invalid request parameters
- `401 Unauthorized`: Authentication required
- `404 Not Found`: Resource not found
- `500 Internal Server Error`: Server error
### Common Error Scenarios
**Invalid Image Format**:
```json
{
"detail": "Invalid base64 image payload"
}
```
**Missing Required Field**:
```json
{
"detail": "Prompt is required for inpainting"
}
```
**Provider Error**:
```json
{
"detail": "Image generation failed: Provider error message"
}
```
**Authentication Error**:
```json
{
"detail": "Authenticated user required for image operations."
}
```
---
## Rate Limiting
Image Studio API follows standard ALwrity rate limiting:
- **Rate Limits**: Based on subscription tier
- **Headers**: Rate limit information in response headers
- **Retry**: Use exponential backoff for rate limit errors
See [Rate Limiting Guide](../api/rate-limiting.md) for details.
---
## Best Practices
### Image Encoding
- **Base64 Format**: All images should be base64 encoded
- **Data URLs**: Support for `data:image/png;base64,...` format
- **Size Limits**: Recommended under 10MB for best performance
- **Format**: PNG or JPG supported
### Request Optimization
1. **Use Templates**: Templates optimize settings automatically
2. **Batch Operations**: Generate multiple variations in one request
3. **Estimate Costs**: Use cost estimation before large operations
4. **Error Handling**: Implement retry logic for transient errors
### Response Handling
1. **Base64 Images**: Decode base64 images in responses
2. **Metadata**: Use metadata for tracking and organization
3. **Error Messages**: Display user-friendly error messages
4. **Progress**: For long operations, implement polling if needed
---
## Code Examples
### Python Example
```python
import requests
import base64
# Generate Image
url = "https://api.alwrity.com/api/image-studio/create"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
data = {
"prompt": "Modern office workspace",
"template_id": "linkedin_post",
"quality": "standard"
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
# Decode image
image_data = base64.b64decode(result["results"][0]["image_base64"])
with open("generated_image.png", "wb") as f:
f.write(image_data)
```
### JavaScript Example
```javascript
// Generate Image
const response = await fetch('https://api.alwrity.com/api/image-studio/create', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
prompt: 'Modern office workspace',
template_id: 'linkedin_post',
quality: 'standard'
})
});
const result = await response.json();
// Display image
const img = document.createElement('img');
img.src = `data:image/png;base64,${result.results[0].image_base64}`;
document.body.appendChild(img);
```
### cURL Example
```bash
curl -X POST https://api.alwrity.com/api/image-studio/create \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Modern office workspace",
"template_id": "linkedin_post",
"quality": "standard"
}'
```
---
## Related Documentation
- [Create Studio Guide](create-studio.md) - User guide for image generation
- [Edit Studio Guide](edit-studio.md) - User guide for image editing
- [Upscale Studio Guide](upscale-studio.md) - User guide for upscaling
- [Social Optimizer Guide](social-optimizer.md) - User guide for social optimization
- [Providers Guide](providers.md) - Provider selection guide
- [Cost Guide](cost-guide.md) - Cost management guide
- [Implementation Overview](implementation-overview.md) - Technical architecture
---
*For authentication details, see the [API Authentication Guide](../api/authentication.md). For rate limiting, see the [Rate Limiting Guide](../api/rate-limiting.md).*