325 lines
7.5 KiB
Markdown
325 lines
7.5 KiB
Markdown
# 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
|