import gradio as gr from PIL import Image import numpy as np from aura_sr import AuraSR import torch import os import time from pathlib import Path import argparse # Force CPU usage torch.set_default_tensor_type(torch.FloatTensor) # Override torch.load to always use CPU original_load = torch.load torch.load = lambda *args, **kwargs: original_load(*args, **kwargs, map_location=torch.device('cpu')) # Initialize the AuraSR model aura_sr = AuraSR.from_pretrained("fal/AuraSR-v2") # Restore original torch.load torch.load = original_load def process_single_image(input_image_path): if input_image_path is None: raise gr.Error("Please provide an image to upscale.") # Load the image pil_image = Image.open(input_image_path) # Upscale the image using AuraSR start_time = time.time() upscaled_image = aura_sr.upscale_4x(pil_image) processing_time = time.time() - start_time print(f"Processing time: {processing_time:.2f} seconds") # Save the upscaled image output_folder = "outputs" os.makedirs(output_folder, exist_ok=True) input_filename = os.path.basename(input_image_path) output_filename = os.path.splitext(input_filename)[0] output_path = os.path.join(output_folder, output_filename + ".png") counter = 1 while os.path.exists(output_path): output_path = os.path.join(output_folder, f"{output_filename}_{counter:04d}.png") counter += 1 upscaled_image.save(output_path) return [input_image_path, output_path] def process_batch(input_folder, output_folder=None): if not input_folder: raise gr.Error("Please provide an input folder path.") if not output_folder: output_folder = "outputs" os.makedirs(output_folder, exist_ok=True) input_files = [f for f in os.listdir(input_folder) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff'))] total_files = len(input_files) processed_files = 0 results = [] for filename in input_files: input_path = os.path.join(input_folder, filename) pil_image = Image.open(input_path) start_time = time.time() upscaled_image = aura_sr.upscale_4x(pil_image) processing_time = time.time() - start_time output_filename = os.path.splitext(filename)[0] + ".png" output_path = os.path.join(output_folder, output_filename) counter = 1 while os.path.exists(output_path): output_path = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}_{counter:04d}.png") counter += 1 upscaled_image.save(output_path) processed_files += 1 print(f"Processed {processed_files}/{total_files}: {filename} in {processing_time:.2f} seconds") results.append(output_path) print(f"Batch processing complete. {processed_files} images processed.") return results title = """