Files
abdullahceylan-ac-comfyui-q…/docs/API_DOCUMENTATION.md
T

763 lines
15 KiB
Markdown

# ComfyUI Queue Manager - API Documentation
## Overview
The ComfyUI Queue Manager provides a comprehensive REST API for programmatic access to queue management functionality. The API follows RESTful conventions and returns JSON responses.
**Base URL**: `http://localhost:5000/api/queue/`
**Content Type**: All requests should use `application/json`
## Authentication
Currently, the API does not require authentication as it runs locally. In future versions, authentication may be added for remote access.
## Response Format
All API responses follow a consistent format:
### Success Response
```json
{
"status": "success",
"data": { ... },
"message": "Operation completed successfully",
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
### Error Response
```json
{
"status": "error",
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request data",
"details": { ... }
},
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
## Endpoints
### Health Check
#### GET /health
Check API health status.
**Response**:
```json
{
"status": "healthy",
"timestamp": "2025-09-27T16:52:03.302158Z",
"queue_state": "running",
"version": "1.0.0"
}
```
### Queue Items
#### GET /api/queue/items
Get all queue items with optional filtering.
**Query Parameters**:
- `status` (optional): Filter by status (`pending`, `running`, `completed`, `failed`, `archived`)
**Example**:
```bash
curl "http://localhost:5000/api/queue/items?status=pending"
```
**Response**:
```json
{
"items": [
{
"id": "uuid-string",
"workflow_name": "My Workflow",
"workflow_data": { ... },
"status": "pending",
"created_at": "2025-09-27T16:52:03.302158Z",
"updated_at": "2025-09-27T16:52:03.302158Z",
"started_at": null,
"completed_at": null,
"error_message": null,
"result_data": null
}
],
"count": 1,
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### POST /api/queue/items
Add a new workflow to the queue.
**Request Body**:
```json
{
"workflow_name": "My New Workflow",
"workflow_data": {
"nodes": [ ... ],
"links": [ ... ],
"workflow": { ... }
}
}
```
**Response**:
```json
{
"item": {
"id": "new-uuid-string",
"workflow_name": "My New Workflow",
"status": "pending",
...
},
"message": "Workflow added to queue successfully",
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### GET /api/queue/items/{item_id}
Get a specific queue item by ID.
**Parameters**:
- `item_id`: UUID of the queue item
**Response**:
```json
{
"item": {
"id": "uuid-string",
"workflow_name": "My Workflow",
...
},
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### PUT /api/queue/items/{item_id}
Update a queue item's status and related fields.
**Request Body**:
```json
{
"status": "completed",
"result_data": {
"output": "success",
"execution_time": 45.2
},
"error_message": null
}
```
**Response**:
```json
{
"item": {
"id": "uuid-string",
"status": "completed",
"result_data": { ... },
...
},
"message": "Queue item updated successfully",
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### DELETE /api/queue/items/{item_id}
Delete a specific queue item.
**Response**:
```json
{
"message": "Queue item uuid-string deleted successfully",
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### DELETE /api/queue/items/bulk
Delete multiple queue items.
**Request Body**:
```json
{
"item_ids": ["uuid-1", "uuid-2", "uuid-3"]
}
```
**Response**:
```json
{
"message": "Successfully deleted 3 queue items",
"deleted_count": 3,
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
### Filtering and Search
#### POST /api/queue/items/filter
Filter queue items based on criteria.
**Request Body**:
```json
{
"status": ["pending", "running"],
"workflow_name": "My Workflow",
"date_from": "2025-09-01T00:00:00Z",
"date_to": "2025-09-30T23:59:59Z",
"search": "keyword"
}
```
**Response**:
```json
{
"items": [ ... ],
"count": 5,
"filter": {
"status": ["pending", "running"],
"workflow_name": "My Workflow",
"date_range": ["2025-09-01T00:00:00Z", "2025-09-30T23:59:59Z"],
"search_term": "keyword"
},
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### GET /api/queue/search
Search queue items using a query string.
**Query Parameters**:
- `q`: Search query string
**Example**:
```bash
curl "http://localhost:5000/api/queue/search?q=my%20workflow"
```
**Response**:
```json
{
"items": [ ... ],
"count": 3,
"query": "my workflow",
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
### Queue Control
#### GET /api/queue/status
Get the current queue processing status.
**Response**:
```json
{
"queue_state": "running",
"total_items": 25,
"pending_items": 5,
"running_items": 2,
"completed_items": 15,
"failed_items": 2,
"archived_items": 1,
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### POST /api/queue/pause
Pause queue processing.
**Response**:
```json
{
"message": "Queue paused successfully",
"queue_state": "paused",
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### POST /api/queue/resume
Resume queue processing.
**Response**:
```json
{
"message": "Queue resumed successfully",
"queue_state": "running",
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
### Archive Operations
#### POST /api/queue/archive
Archive selected queue items.
**Request Body**:
```json
{
"item_ids": ["uuid-1", "uuid-2"]
}
```
**Response**:
```json
{
"message": "Successfully archived 2 items",
"archived_count": 2,
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### POST /api/queue/restore
Restore archived queue items.
**Request Body**:
```json
{
"item_ids": ["uuid-1", "uuid-2"]
}
```
**Response**:
```json
{
"message": "Successfully restored 2 items",
"restored_count": 2,
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
### Import/Export
#### POST /api/queue/export
Export queue data.
**Request Body**:
```json
{
"item_ids": ["uuid-1", "uuid-2"], // Optional: specific items
"include_archived": true, // Optional: include archived items
"format": "json" // Optional: export format
}
```
**Response**:
```json
{
"export_data": {
"version": "1.0",
"exported_at": "2025-09-27T16:52:03.302158Z",
"items": [ ... ],
"config": { ... }
},
"message": "Queue exported successfully",
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### POST /api/queue/import
Import queue data.
**Request Body**:
```json
{
"queue_data": {
"version": "1.0",
"items": [ ... ],
"config": { ... }
},
"merge": true, // Optional: merge with existing queue
"overwrite_duplicates": false // Optional: overwrite duplicate items
}
```
**Response**:
```json
{
"message": "Queue imported successfully",
"imported_count": 5,
"skipped_count": 2,
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
### Configuration
#### GET /api/queue/config
Get queue configuration.
**Response**:
```json
{
"config": {
"max_concurrent_workflows": 1,
"auto_archive_completed": false,
"auto_archive_days": 30,
"queue_state": "running"
},
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
#### PUT /api/queue/config
Update queue configuration.
**Request Body**:
```json
{
"max_concurrent_workflows": 2,
"auto_archive_completed": true,
"auto_archive_days": 7
}
```
**Response**:
```json
{
"config": {
"max_concurrent_workflows": 2,
"auto_archive_completed": true,
"auto_archive_days": 7,
"queue_state": "running"
},
"message": "Configuration updated successfully",
"timestamp": "2025-09-27T16:52:03.302158Z"
}
```
## Data Models
### QueueItem
```json
{
"id": "string (UUID)",
"workflow_name": "string",
"workflow_data": "object",
"status": "string (pending|running|completed|failed|archived)",
"created_at": "string (ISO 8601)",
"updated_at": "string (ISO 8601)",
"started_at": "string (ISO 8601) | null",
"completed_at": "string (ISO 8601) | null",
"error_message": "string | null",
"result_data": "object | null"
}
```
### QueueFilter
```json
{
"status": ["string"],
"workflow_name": "string",
"date_range": ["string", "string"],
"search_term": "string"
}
```
### QueueConfig
```json
{
"max_concurrent_workflows": "integer",
"auto_archive_completed": "boolean",
"auto_archive_days": "integer",
"queue_state": "string (running|paused)"
}
```
## Error Codes
### HTTP Status Codes
- `200 OK`: Request successful
- `201 Created`: Resource created successfully
- `400 Bad Request`: Invalid request data
- `404 Not Found`: Resource not found
- `500 Internal Server Error`: Server error
### Application Error Codes
- `VALIDATION_ERROR`: Request validation failed
- `NOT_FOUND_ERROR`: Requested resource not found
- `QUEUE_SERVICE_ERROR`: Queue operation failed
- `DATABASE_ERROR`: Database operation failed
- `ARCHIVE_ERROR`: Archive operation failed
- `IMPORT_EXPORT_ERROR`: Import/export operation failed
## Rate Limiting
Currently, no rate limiting is implemented. In production environments, consider implementing rate limiting based on your needs.
## Examples
### Python Examples
#### Basic Queue Operations
```python
import requests
import json
BASE_URL = "http://localhost:5000/api/queue"
# Get all queue items
response = requests.get(f"{BASE_URL}/items")
items = response.json()["items"]
# Add new workflow
workflow_data = {
"workflow_name": "My API Workflow",
"workflow_data": {
"nodes": [
{"id": "1", "type": "LoadImage", "inputs": {}},
{"id": "2", "type": "SaveImage", "inputs": {"images": ["1", 0]}}
],
"links": [["1", 0, "2", 0]]
}
}
response = requests.post(
f"{BASE_URL}/items",
headers={"Content-Type": "application/json"},
data=json.dumps(workflow_data)
)
new_item = response.json()["item"]
print(f"Created item: {new_item['id']}")
# Update item status
update_data = {
"status": "completed",
"result_data": {"output": "success"}
}
response = requests.put(
f"{BASE_URL}/items/{new_item['id']}",
headers={"Content-Type": "application/json"},
data=json.dumps(update_data)
)
print("Item updated successfully")
```
#### Filtering and Search
```python
# Filter by status
filter_data = {
"status": ["pending", "running"]
}
response = requests.post(
f"{BASE_URL}/items/filter",
headers={"Content-Type": "application/json"},
data=json.dumps(filter_data)
)
filtered_items = response.json()["items"]
# Search workflows
response = requests.get(f"{BASE_URL}/search?q=my workflow")
search_results = response.json()["items"]
```
#### Export and Import
```python
# Export queue
export_data = {
"include_archived": True
}
response = requests.post(
f"{BASE_URL}/export",
headers={"Content-Type": "application/json"},
data=json.dumps(export_data)
)
exported_queue = response.json()["export_data"]
# Save to file
with open("queue_backup.json", "w") as f:
json.dump(exported_queue, f, indent=2)
# Import queue
with open("queue_backup.json", "r") as f:
queue_data = json.load(f)
import_data = {
"queue_data": queue_data,
"merge": True
}
response = requests.post(
f"{BASE_URL}/import",
headers={"Content-Type": "application/json"},
data=json.dumps(import_data)
)
print(f"Imported {response.json()['imported_count']} items")
```
### JavaScript Examples
#### Using Fetch API
```javascript
const BASE_URL = "http://localhost:5000/api/queue";
// Get queue status
async function getQueueStatus() {
const response = await fetch(`${BASE_URL}/status`);
const data = await response.json();
console.log("Queue status:", data.queue_state);
return data;
}
// Add workflow
async function addWorkflow(workflowName, workflowData) {
const response = await fetch(`${BASE_URL}/items`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
workflow_name: workflowName,
workflow_data: workflowData
})
});
const data = await response.json();
return data.item;
}
// Filter items
async function filterItems(filters) {
const response = await fetch(`${BASE_URL}/items/filter`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(filters)
});
const data = await response.json();
return data.items;
}
// Usage
getQueueStatus().then(status => {
console.log(`Queue has ${status.total_items} items`);
});
const workflow = {
nodes: [
{id: "1", type: "LoadImage", inputs: {}},
{id: "2", type: "SaveImage", inputs: {images: ["1", 0]}}
],
links: [["1", 0, "2", 0]]
};
addWorkflow("JS API Test", workflow).then(item => {
console.log(`Created item: ${item.id}`);
});
```
### cURL Examples
#### Basic Operations
```bash
# Get all items
curl -X GET "http://localhost:5000/api/queue/items"
# Get pending items only
curl -X GET "http://localhost:5000/api/queue/items?status=pending"
# Add new workflow
curl -X POST "http://localhost:5000/api/queue/items" \
-H "Content-Type: application/json" \
-d '{
"workflow_name": "cURL Test Workflow",
"workflow_data": {
"nodes": [{"id": "1", "type": "LoadImage", "inputs": {}}],
"links": []
}
}'
# Update item status
curl -X PUT "http://localhost:5000/api/queue/items/ITEM_ID" \
-H "Content-Type: application/json" \
-d '{
"status": "completed",
"result_data": {"output": "success"}
}'
# Delete item
curl -X DELETE "http://localhost:5000/api/queue/items/ITEM_ID"
```
#### Advanced Operations
```bash
# Filter items
curl -X POST "http://localhost:5000/api/queue/items/filter" \
-H "Content-Type: application/json" \
-d '{
"status": ["completed"],
"date_from": "2025-09-01T00:00:00Z"
}'
# Search items
curl -X GET "http://localhost:5000/api/queue/search?q=test"
# Archive items
curl -X POST "http://localhost:5000/api/queue/archive" \
-H "Content-Type: application/json" \
-d '{
"item_ids": ["uuid-1", "uuid-2"]
}'
# Export queue
curl -X POST "http://localhost:5000/api/queue/export" \
-H "Content-Type: application/json" \
-d '{
"include_archived": true
}'
# Pause queue
curl -X POST "http://localhost:5000/api/queue/pause"
# Resume queue
curl -X POST "http://localhost:5000/api/queue/resume"
```
## WebSocket Support
Currently, the API does not support WebSocket connections. Real-time updates are handled through polling. WebSocket support may be added in future versions for real-time queue updates.
## Versioning
The API follows semantic versioning. The current version is included in health check responses. Breaking changes will increment the major version number.
## Support
For API-related issues:
1. Check this documentation
2. Verify request format and required fields
3. Check HTTP status codes and error messages
4. Report bugs on GitHub with request/response examples
---
**Related Documentation**:
- [User Guide](USER_GUIDE.md) - General usage instructions
- [Installation Guide](INSTALLATION.md) - Setup instructions
- [Developer Guide](DEVELOPER_GUIDE.md) - Development information