mixvideo-v2/cargos/tvai/examples/integrated_api_demo.rs

160 lines
6.4 KiB
Rust

//! Demo of integrated template API
//!
//! This example demonstrates how to use the integrated template API
//! for convenient video processing with predefined templates.
use tvai::*;
#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("=== Integrated Template API Demo ===\n");
// List all available templates
println!("Available templates:");
let templates = list_available_templates();
for (i, template_name) in templates.iter().enumerate() {
if let Some((name, description)) = get_template_info(template_name) {
println!(" {}. {} - {}", i + 1, name, description);
}
}
println!("Total: {} templates\n", templates.len());
// Demonstrate template information retrieval
println!("=== Template Information ===");
let sample_templates = ["upscale_to_4k", "convert_to_60fps", "remove_noise", "4x_slow_motion"];
for template_name in &sample_templates {
if let Some((name, description)) = get_template_info(template_name) {
println!("Template: {}", name);
println!(" ID: {}", template_name);
println!(" Description: {}", description);
println!();
}
}
// Demonstrate template application (without actual processing)
println!("=== Template Application Demo ===");
// Get template manager to show applied parameters
let manager = global_topaz_templates().lock().unwrap();
for template_name in &sample_templates {
match manager.apply_template(template_name) {
Ok(applied) => {
println!("✓ Template '{}' applied successfully:", applied.name);
println!(" Description: {}", applied.description);
if let Some(upscale) = &applied.enhance_params.upscale {
println!(" Upscale parameters:");
println!(" Scale factor: {}x", upscale.scale_factor);
println!(" Model: {:?}", upscale.model);
println!(" Compression: {}", upscale.compression);
println!(" Quality preset: {:?}", upscale.quality_preset);
if upscale.noise > 0.0 {
println!(" Noise reduction: {}", upscale.noise);
}
if upscale.details > 0.0 {
println!(" Detail enhancement: {}", upscale.details);
}
if upscale.halo > 0.0 {
println!(" Halo reduction: {}", upscale.halo);
}
if upscale.blur > 0.0 {
println!(" Blur reduction: {}", upscale.blur);
}
}
if let Some(interpolation) = &applied.enhance_params.interpolation {
println!(" Interpolation parameters:");
println!(" Multiplier: {}x", interpolation.multiplier);
println!(" Model: {:?}", interpolation.model);
println!(" Input FPS: {}", interpolation.input_fps);
if let Some(target_fps) = interpolation.target_fps {
println!(" Target FPS: {}", target_fps);
}
}
if applied.stabilization_enabled {
println!(" ✓ Stabilization enabled");
}
if applied.grain_enabled {
println!(" ✓ Grain effect enabled");
}
if let Some(fps) = applied.output_fps {
println!(" Output FPS: {}", fps);
}
println!();
}
Err(e) => {
println!("✗ Failed to apply template '{}': {}", template_name, e);
}
}
}
drop(manager); // Release lock
// Show how to use the convenient API functions
println!("=== Convenient API Functions ===");
println!("The following functions are available for easy video processing:");
println!();
println!("// General template processing");
println!("process_with_template(input, output, \"upscale_to_4k\").await?;");
println!();
println!("// Specific template shortcuts");
println!("upscale_to_4k(input, output).await?;");
println!("convert_to_60fps(input, output).await?;");
println!("remove_noise(input, output).await?;");
println!("slow_motion_4x(input, output).await?;");
println!("auto_crop_stabilization(input, output).await?;");
println!();
// Example usage patterns
println!("=== Example Usage Patterns ===");
println!();
println!("1. Simple 4K upscaling:");
println!(" let result = upscale_to_4k(Path::new(\"input.mp4\"), Path::new(\"output_4k.mp4\")).await?;");
println!();
println!("2. Convert to 60fps:");
println!(" let result = convert_to_60fps(Path::new(\"input.mp4\"), Path::new(\"output_60fps.mp4\")).await?;");
println!();
println!("3. Remove noise:");
println!(" let result = remove_noise(Path::new(\"noisy_input.mp4\"), Path::new(\"clean_output.mp4\")).await?;");
println!();
println!("4. Create slow motion:");
println!(" let result = slow_motion_4x(Path::new(\"input.mp4\"), Path::new(\"slow_motion.mp4\")).await?;");
println!();
println!("5. Stabilize shaky video:");
println!(" let result = auto_crop_stabilization(Path::new(\"shaky.mp4\"), Path::new(\"stable.mp4\")).await?;");
println!();
println!("=== Custom Template Usage ===");
println!();
println!("You can also load custom templates:");
println!("let mut manager = TopazTemplateManager::new();");
println!("manager.load_from_file(\"my_template\".to_string(), \"path/to/template.json\")?;");
println!("let result = process_with_template(input, output, \"my_template\").await?;");
println!();
println!("Or load all templates from a directory:");
println!("let count = manager.load_examples_templates(\"templates/\")?;");
println!("println!(\"Loaded {{}} templates\", count);");
println!();
println!("=== Demo Complete ===");
println!("The template system is now fully integrated into the tvai library!");
println!("You can use any of the convenient functions shown above for video processing.");
Ok(())
}