# uni-comfyui-sdk

A Rust SDK for ComfyUI Workflow Service & Management API.

## Features

- **Status Management**: Get metrics, server status, and file listings
- **Workflow Management**: Create, retrieve, and delete workflows  
- **Workflow Execution**: Run workflows and monitor their status
- **Server Management**: Register, unregister, and manage ComfyUI servers
- **Monitoring**: Health checks, system stats, and task monitoring
- **Type Safety**: Strongly typed API with comprehensive error handling

## Installation

Add this to your `Cargo.toml`:

```toml
[dependencies]
uni-comfyui-sdk = "0.1.0"
```

## Quick Start

```rust
use uni_comfyui_sdk::{UniComfyUIClient, Result};
use std::collections::HashMap;

#[tokio::main]
async fn main() -> Result<()> {
    // Create a client
    let client = UniComfyUIClient::new("http://localhost:8000")?;

    // Get system metrics
    let metrics = client.get_metrics().await?;
    println!("Metrics: {:#?}", metrics);

    // Get all workflows
    let workflows = client.get_all_workflows().await?;
    println!("Found {} workflows", workflows.len());

    // Run a workflow
    let mut data = HashMap::new();
    data.insert("input".to_string(), serde_json::json!("test input"));
    let result = client.run_workflow("my_workflow", None, data).await?;
    println!("Workflow result: {:#?}", result);

    Ok(())
}
```

## API Coverage

### Status Endpoints
- `get_metrics()` - Get queue status overview
- `get_servers_status()` - Get all configured ComfyUI servers status
- `list_server_files(server_index)` - List files in server input/output folders

### Workflow Endpoints
- `get_all_workflows()` - Get all workflows
- `publish_workflow(data)` - Publish a new workflow
- `delete_workflow(workflow_name)` - Delete a workflow
- `get_one_workflow(base_name, version)` - Get workflow specification

### Run Endpoints
- `run_workflow(name, version, data)` - Execute workflow asynchronously
- `get_run_status(workflow_run_id)` - Get workflow execution status

### RunX Endpoints
- `model_with_multi_dress(version, data)` - Model with multiple dresses workflow
- `model_with_multi_dress_json_schema()` - Get workflow definition

### Monitor Endpoints
- `monitor_dashboard()` - Get monitoring dashboard HTML
- `get_system_stats()` - Get system statistics
- `get_task_stats()` - Get task statistics
- `get_monitor_server_status()` - Get server status information
- `get_recent_tasks(limit)` - Get recent tasks list
- `health_check()` - Health check endpoint

### ComfyUI Server Management Endpoints
- `register_server(request)` - Register ComfyUI server
- `update_heartbeat(request)` - Update server heartbeat
- `unregister_server(request)` - Unregister ComfyUI server
- `get_server_status(server_name)` - Get specific server status
- `list_all_servers()` - Get all servers list
- `get_system_health()` - Get system overall health status
- `force_health_check()` - Force health check execution

## Error Handling

The SDK provides comprehensive error handling through the `ComfyUIError` enum:

```rust
use uni_comfyui_sdk::{UniComfyUIClient, ComfyUIError};

match client.get_metrics().await {
    Ok(metrics) => println!("Success: {:#?}", metrics),
    Err(ComfyUIError::Http(e)) => println!("HTTP error: {}", e),
    Err(ComfyUIError::Api { status, message }) => {
        println!("API error {}: {}", status, message)
    }
    Err(e) => println!("Other error: {}", e),
}
```

## Data Models

The SDK includes strongly typed models for all API requests and responses:

- `ServerRegistrationRequest` - Server registration data
- `ServerHeartbeatRequest` - Server heartbeat data
- `ServerStatusResponse` - Server status information
- `ServerFiles` - Server file listings
- `FileDetails` - Individual file information
- And more...

## Examples

See the `examples/` directory for more usage examples.

## License

MIT
