""" Image Enhancement Lab — Gradio (Spaces-ready, labeled sliders) """ import gradio as gr import numpy as np import tempfile from PIL import Image, ImageEnhance, ImageFilter def apply_enhancements(image, contrast, sharpness, brightness, saturation, upscale, blur_radius): if image is None: return None, None original = Image.fromarray(image).convert("RGB") # Prevent large image crashes max_size = 1024 if max(original.size) > max_size: original.thumbnail((max_size, max_size)) enhanced = original.copy() # Upscale if upscale != 1.0: w, h = enhanced.size enhanced = enhanced.resize((int(w * upscale), int(h * upscale)), Image.LANCZOS) # Enhancements enhanced = ImageEnhance.Contrast(enhanced).enhance(contrast) enhanced = ImageEnhance.Brightness(enhanced).enhance(brightness) enhanced = ImageEnhance.Color(enhanced).enhance(saturation) enhanced = ImageEnhance.Sharpness(enhanced).enhance(sharpness) # Blur if blur_radius > 0: enhanced = enhanced.filter(ImageFilter.GaussianBlur(radius=blur_radius)) return np.array(original), np.array(enhanced) def save_enhanced(image, contrast, sharpness, brightness, saturation, upscale, blur_radius): _, enh_np = apply_enhancements( image, contrast, sharpness, brightness, saturation, upscale, blur_radius ) if enh_np is None: return None tmp = tempfile.NamedTemporaryFile(suffix=".png", delete=False) tmp.close() Image.fromarray(enh_np).save(tmp.name) return tmp.name with gr.Blocks(title="Image Enhancement Lab") as demo: gr.Markdown("# 🖼️ Image Enhancement Lab") gr.Markdown("Upload an image and adjust sliders to enhance it.") with gr.Row(): with gr.Column(scale=1): image_input = gr.Image(label="Upload Image", type="numpy") gr.Markdown("### 🎨 Color Adjustments") contrast = gr.Slider(0.1, 3.0, 1.0, label="Contrast (1.0 = original)") brightness = gr.Slider(0.1, 3.0, 1.0, label="Brightness (1.0 = original)") saturation = gr.Slider(0.0, 3.0, 1.0, label="Saturation (0 = grayscale)") gr.Markdown("### 🔍 Detail Controls") sharpness = gr.Slider(0.0, 5.0, 1.0, label="Sharpness (0 = blurry)") blur = gr.Slider(0.0, 10.0, 0.0, label="Gaussian Blur Radius") gr.Markdown("### 📐 Size Control") upscale = gr.Slider(0.25, 4.0, 1.0, label="Upscale Factor") apply_btn = gr.Button("Apply Enhancements") save_btn = gr.Button("Download Enhanced Image") download = gr.File(label="Download File", visible=True) with gr.Column(scale=2): original_out = gr.Image(label="Original Image") enhanced_out = gr.Image(label="Enhanced Image") inputs = [image_input, contrast, sharpness, brightness, saturation, upscale, blur] apply_btn.click(apply_enhancements, inputs, [original_out, enhanced_out]) save_btn.click(save_enhanced, inputs, download) # Required for Hugging Face Spaces demo.queue() demo.launch()