# TVAI Library API Documentation

## Overview

The TVAI library provides a comprehensive Rust interface for Topaz Video AI, enabling video and image enhancement through AI-powered super-resolution and frame interpolation.

## Core Components

### TvaiProcessor

The main processor for all video and image operations.

```rust
use tvai::*;

// Create configuration
let config = TvaiConfig::builder()
    .topaz_path("/path/to/topaz")
    .use_gpu(true)
    .build()?;

// Create processor
let mut processor = TvaiProcessor::new(config)?;
```

#### Video Processing Methods

- `upscale_video()` - AI-powered video super-resolution
- `interpolate_video()` - Frame interpolation for slow motion
- `enhance_video()` - Combined upscaling and interpolation
- `images_to_video()` - Convert image sequence to video
- `video_to_images()` - Extract frames from video

#### Image Processing Methods

- `upscale_image()` - AI-powered image super-resolution
- `batch_upscale_images()` - Process multiple images
- `upscale_directory()` - Process entire directories
- `convert_image_format()` - Format conversion
- `resize_image()` - Traditional geometric scaling

### Configuration Management

#### TvaiConfig

Main configuration for the processor.

```rust
let config = TvaiConfig::builder()
    .topaz_path("/path/to/topaz")
    .use_gpu(true)
    .temp_dir("/custom/temp")
    .force_topaz_ffmpeg(true)
    .build()?;
```

#### Global Settings

Persistent global configuration.

```rust
use tvai::config::global_settings;

let settings = global_settings();
settings.set_default_use_gpu(true)?;
settings.set_max_concurrent_jobs(2)?;
```

### AI Models

#### Upscaling Models

- `Iris3` - Best general purpose model
- `Nyx3` - Optimized for portraits
- `Thf4` - Old content restoration
- `Ghq5` - Game/CG content
- `Prob4` - Problem footage repair
- And 11 more specialized models

#### Interpolation Models

- `Apo8` - High quality interpolation
- `Chr2` - Animation content
- `Apf1` - Fast processing
- `Chf3` - Fast animation

### Parameter Presets

#### Video Presets

```rust
// Built-in presets
let old_video = VideoUpscaleParams::for_old_video();
let game_content = VideoUpscaleParams::for_game_content();
let animation = VideoUpscaleParams::for_animation();
let portrait = VideoUpscaleParams::for_portrait();

// Interpolation presets
let slow_motion = InterpolationParams::for_slow_motion(30, 2.0);
let animation_interp = InterpolationParams::for_animation(24, 2.0);
```

#### Image Presets

```rust
// Built-in presets
let photo = ImageUpscaleParams::for_photo();
let artwork = ImageUpscaleParams::for_artwork();
let screenshot = ImageUpscaleParams::for_screenshot();
let portrait = ImageUpscaleParams::for_portrait();
```

### Preset Management

```rust
use tvai::config::global_presets;

let presets = global_presets();
let preset_manager = presets.lock().unwrap();

// Get preset
if let Some(preset) = preset_manager.get_video_preset("general_2x") {
    // Use preset parameters
}

// List all presets
let video_presets = preset_manager.list_video_presets();
let image_presets = preset_manager.list_image_presets();
```

## Quick Start Functions

### Video Processing

```rust
// Quick 2x upscaling
quick_upscale_video(
    Path::new("input.mp4"),
    Path::new("output.mp4"),
    2.0
).await?;

// Automatic enhancement
auto_enhance_video(
    Path::new("input.mp4"),
    Path::new("enhanced.mp4")
).await?;
```

### Image Processing

```rust
// Quick 2x upscaling
quick_upscale_image(
    Path::new("photo.jpg"),
    Path::new("photo_2x.png"),
    2.0
).await?;

// Automatic enhancement
auto_enhance_image(
    Path::new("photo.jpg"),
    Path::new("enhanced.png")
).await?;

// Batch directory processing
batch_upscale_directory(
    Path::new("input_dir"),
    Path::new("output_dir"),
    2.0,
    true // recursive
).await?;
```

## Performance and Optimization

### GPU Detection

```rust
use tvai::utils::GpuManager;

// Detailed GPU information
let gpu_info = GpuManager::detect_detailed_gpu_info();
println!("CUDA available: {}", gpu_info.cuda_available);
println!("Devices: {}", gpu_info.devices.len());

// Check suitability for AI
let suitable = GpuManager::is_gpu_suitable_for_ai();

// Benchmark performance
let benchmark = GpuManager::benchmark_gpu_performance().await?;
```

### Performance Monitoring

```rust
use tvai::utils::{PerformanceMonitor, optimize_for_system};

// Create optimized settings
let settings = optimize_for_system();
let mut monitor = PerformanceMonitor::new(settings);

// Monitor operation
let _permit = monitor.acquire_slot().await?;
let operation_monitor = monitor.start_operation("upscale", 100.0);

// ... perform processing ...

let metrics = operation_monitor.finish(200.0);
monitor.record_metrics(metrics);

// Get performance summary
let summary = monitor.get_summary();
```

## Error Handling

### Error Types

The library provides comprehensive error handling with user-friendly messages:

```rust
match result {
    Ok(output) => println!("Success: {:?}", output),
    Err(error) => {
        println!("Error category: {}", error.category());
        println!("Recoverable: {}", error.is_recoverable());
        println!("User message:\n{}", error.user_friendly_message());
    }
}
```

### Error Categories

- `installation` - Topaz/FFmpeg not found
- `processing` - Processing failures
- `parameter` - Invalid parameters
- `gpu` - GPU-related errors
- `format` - Unsupported formats
- `resources` - Insufficient resources
- `permission` - Permission denied
- `io` - File I/O errors

## System Detection

### Automatic Detection

```rust
// Detect Topaz installation
let topaz_path = detect_topaz_installation();

// Detect FFmpeg availability
let ffmpeg_info = detect_ffmpeg();

// Detect GPU support
let gpu_info = detect_gpu_support();
```

### File Information

```rust
// Get video information
let video_info = get_video_info(Path::new("video.mp4")).await?;
println!("Duration: {:?}", video_info.duration);
println!("Resolution: {}x{}", video_info.width, video_info.height);

// Get image information
let image_info = get_image_info(Path::new("image.jpg"))?;
println!("Size: {}x{}", image_info.width, image_info.height);
```

## Progress Tracking

```rust
// Create progress callback
let progress_callback: ProgressCallback = Box::new(|progress| {
    println!("Progress: {:.1}%", progress * 100.0);
});

// Use with processing functions
processor.upscale_video(
    input,
    output,
    params,
    Some(&progress_callback)
).await?;
```

## Temporary File Management

```rust
use tvai::utils::TempFileManager;

let mut temp_manager = TempFileManager::new(None)?;

// Create temporary files
let temp_path = temp_manager.create_temp_path("operation", "temp.mp4");
let unique_path = temp_manager.create_unique_temp_path("output.png");

// Cleanup
temp_manager.cleanup_operation("operation")?;
temp_manager.cleanup_all()?;
```

## Best Practices

1. **Use presets** for common scenarios
2. **Enable GPU** for better performance
3. **Monitor progress** for long operations
4. **Handle errors** gracefully with user-friendly messages
5. **Use global settings** for consistent configuration
6. **Validate parameters** before processing
7. **Clean up** temporary files after processing
8. **Check system requirements** before starting

## Examples

See the `examples/` directory for complete working examples:

- `basic_usage.rs` - Simple getting started example
- `advanced_usage.rs` - Advanced features demonstration
- `video_processing.rs` - Comprehensive video processing
- `image_processing.rs` - Comprehensive image processing
- `convenience_and_optimization.rs` - Convenience features and optimization
