""" Image Upscaler App ------------------ Aplikasi AI berbasis Gradio yang memanfaatkan Stable Diffusion Upscaler untuk meningkatkan resolusi gambar. Tersedia juga fitur segmentasi & restorasi area tertentu pada gambar (misal: wajah). Aplikasi mendukung input prompt teks untuk conditioning hasil upscaling. Created by _drat | 2025 """ # Import library eksternal yang diperlukan import requests from PIL import Image from io import BytesIO from diffusers import StableDiffusionUpscalePipeline # Pipeline Stable Diffusion untuk upscaling gambar import torch import gradio as gr import time import spaces # Import fungsi segmentasi dan restorasi (definisi di segment_utils.py) from segment_utils import( segment_image, # Untuk segmentasi area penting pada gambar (misal: wajah) restore_result, # Untuk menggabungkan hasil upscaling dengan gambar asli ) # Setup device: gunakan CUDA (GPU) jika tersedia, jika tidak fallback ke CPU device = "cuda" if torch.cuda.is_available() else "cpu" print(f'{device} is available') # Debug: print device yang digunakan # Load model Stable Diffusion Upscaler dari HuggingFace model_id = "stabilityai/stable-diffusion-x4-upscaler" upscale_pipe = StableDiffusionUpscalePipeline.from_pretrained(model_id, torch_dtype=torch.float16) upscale_pipe = upscale_pipe.to(device) # Default prompt dan kategori (untuk input Gradio) DEFAULT_SRC_PROMPT = "a person with pefect face" DEFAULT_CATEGORY = "face" # Fungsi utama untuk membuat UI aplikasi Gradio def create_demo() -> gr.Blocks: # --- [ Function Definitions Tetap Seperti Asli Anda ] --- @spaces.GPU(duration=30) def upscale_image( input_image: Image, prompt: str, num_inference_steps: int = 10, ): time_cost_str = '' run_task_time = 0 run_task_time, time_cost_str = get_time_cost(run_task_time, time_cost_str) upscaled_image = upscale_pipe( prompt=prompt, image=input_image, num_inference_steps=num_inference_steps, ).images[0] run_task_time, time_cost_str = get_time_cost(run_task_time, time_cost_str) return upscaled_image, time_cost_str def get_time_cost(run_task_time, time_cost_str): now_time = int(time.time()*1000) if run_task_time == 0: time_cost_str = 'start' else: if time_cost_str != '': time_cost_str += f'-->' time_cost_str += f'{now_time - run_task_time}' run_task_time = now_time return run_task_time, time_cost_str # --- [ UI Section ] --- with gr.Blocks(css="creative_enhance.css") as demo: gr.HTML("""