Niketjain2002/AI-Editing-Proto
0
1"""2AI Photo Edit - Hugging Face Spaces App3A web-based AI photo editing tool with Restyle, Enhance, and Fix capabilities4"""5 6import gradio as gr7import numpy as np8from PIL import Image, ImageEnhance, ImageFilter9from io import BytesIO10import base6411 12# Style configurations13RESTYLE_OPTIONS = {14 "Anime": "Transform into anime style with vibrant colors and expressive features",15 "Chibi Sticker": "Transform into cute chibi style with big head and small body",16 "Superhero": "Transform into superhero comic book style with dramatic lighting",17 "Graffiti": "Transform into urban graffiti street art style",18 "Watercolour": "Transform into watercolor painting with soft edges",19 "Comic": "Transform into comic book style with bold lines and halftone dots",20}21 22SEASON_OPTIONS = {23 "Summer": "Bright summer with warm golden sunlight and vibrant colors",24 "Winter": "Snowy winter with frost, cold blue tones",25 "Monsoon": "Rainy monsoon with wet surfaces and moody lighting",26}27 28ENHANCE_OPTIONS = {29 "Auto Enhance": "Improve colors, contrast, and sharpness",30 "HDR Effect": "Expand dynamic range for vivid details",31 "Sharpen": "Increase clarity and edge definition",32 "Reduce Noise": "Remove grain while preserving details",33}34 35FIX_OPTIONS = {36 "Blur Background": "Add portrait-style depth effect",37 "Relight": "Adjust lighting and shadows",38 "Fix Colors": "Correct white balance and color cast",39}40 41 42def apply_style(image, style_name, intensity=1.0):43 """Apply visual style filters to image"""44 if image is None:45 return None46 47 img = Image.fromarray(image)48 49 # Convert to RGB if needed50 if img.mode != 'RGB':51 img = img.convert('RGB')52 53 style_filters = {54 "Anime": lambda i: apply_anime(i, intensity),55 "Chibi Sticker": lambda i: apply_anime(i, intensity * 0.8),56 "Superhero": lambda i: apply_dramatic(i, intensity),57 "Graffiti": lambda i: apply_vibrant(i, intensity * 1.2),58 "Watercolour": lambda i: apply_watercolor(i, intensity),59 "Comic": lambda i: apply_comic(i, intensity),60 "Summer": lambda i: apply_summer(i, intensity),61 "Winter": lambda i: apply_winter(i, intensity),62 "Monsoon": lambda i: apply_monsoon(i, intensity),63 "Auto Enhance": lambda i: apply_enhance(i, intensity),64 "HDR Effect": lambda i: apply_hdr(i, intensity),65 "Sharpen": lambda i: apply_sharpen(i, intensity),66 "Reduce Noise": lambda i: apply_denoise(i, intensity),67 "Blur Background": lambda i: apply_blur_bg(i, intensity),68 "Relight": lambda i: apply_relight(i, intensity),69 "Fix Colors": lambda i: apply_fix_colors(i, intensity),70 }71 72 if style_name in style_filters:73 img = style_filters[style_name](img)74 75 return np.array(img)76 77 78def apply_anime(img, intensity):79 """Anime style: high saturation, contrast"""80 enhancer = ImageEnhance.Color(img)81 img = enhancer.enhance(1.0 + 0.5 * intensity)82 enhancer = ImageEnhance.Contrast(img)83 img = enhancer.enhance(1.0 + 0.25 * intensity)84 enhancer = ImageEnhance.Brightness(img)85 img = enhancer.enhance(1.0 + 0.05 * intensity)86 return img87 88 89def apply_dramatic(img, intensity):90 """Dramatic superhero style"""91 enhancer = ImageEnhance.Contrast(img)92 img = enhancer.enhance(1.0 + 0.5 * intensity)93 enhancer = ImageEnhance.Color(img)94 img = enhancer.enhance(1.0 + 0.3 * intensity)95 enhancer = ImageEnhance.Brightness(img)96 img = enhancer.enhance(1.0 - 0.05 * intensity)97 return img98 99 100def apply_vibrant(img, intensity):101 """Vibrant graffiti style"""102 enhancer = ImageEnhance.Color(img)103 img = enhancer.enhance(1.0 + 1.0 * intensity)104 enhancer = ImageEnhance.Contrast(img)105 img = enhancer.enhance(1.0 + 0.4 * intensity)106 return img107 108 109def apply_watercolor(img, intensity):110 """Watercolor painting effect"""111 img = img.filter(ImageFilter.GaussianBlur(radius=0.5 * intensity))112 enhancer = ImageEnhance.Color(img)113 img = enhancer.enhance(1.0 + 0.2 * intensity)114 return img115 116 117def apply_comic(img, intensity):118 """Comic book style"""119 enhancer = ImageEnhance.Contrast(img)120 img = enhancer.enhance(1.0 + 0.5 * intensity)121 enhancer = ImageEnhance.Color(img)122 img = enhancer.enhance(1.0 + 0.3 * intensity)123 return img124 125 126def apply_summer(img, intensity):127 """Warm summer tones"""128 enhancer = ImageEnhance.Color(img)129 img = enhancer.enhance(1.0 + 0.35 * intensity)130 enhancer = ImageEnhance.Brightness(img)131 img = enhancer.enhance(1.0 + 0.08 * intensity)132 # Add warm tint133 r, g, b = img.split()134 r = r.point(lambda x: min(255, x + int(10 * intensity)))135 img = Image.merge('RGB', (r, g, b))136 return img137 138 139def apply_winter(img, intensity):140 """Cool winter tones"""141 enhancer = ImageEnhance.Color(img)142 img = enhancer.enhance(1.0 - 0.25 * intensity)143 enhancer = ImageEnhance.Brightness(img)144 img = enhancer.enhance(1.0 + 0.12 * intensity)145 # Add cool tint146 r, g, b = img.split()147 b = b.point(lambda x: min(255, x + int(15 * intensity)))148 img = Image.merge('RGB', (r, g, b))149 return img150 151 152def apply_monsoon(img, intensity):153 """Moody monsoon effect"""154 enhancer = ImageEnhance.Color(img)155 img = enhancer.enhance(1.0 - 0.15 * intensity)156 enhancer = ImageEnhance.Brightness(img)157 img = enhancer.enhance(1.0 - 0.12 * intensity)158 enhancer = ImageEnhance.Contrast(img)159 img = enhancer.enhance(1.0 + 0.15 * intensity)160 return img161 162 163def apply_enhance(img, intensity):164 """Auto enhance"""165 enhancer = ImageEnhance.Contrast(img)166 img = enhancer.enhance(1.0 + 0.2 * intensity)167 enhancer = ImageEnhance.Color(img)168 img = enhancer.enhance(1.0 + 0.2 * intensity)169 enhancer = ImageEnhance.Sharpness(img)170 img = enhancer.enhance(1.0 + 0.1 * intensity)171 return img172 173 174def apply_hdr(img, intensity):175 """HDR effect"""176 enhancer = ImageEnhance.Contrast(img)177 img = enhancer.enhance(1.0 + 0.35 * intensity)178 enhancer = ImageEnhance.Color(img)179 img = enhancer.enhance(1.0 + 0.25 * intensity)180 return img181 182 183def apply_sharpen(img, intensity):184 """Sharpen image"""185 enhancer = ImageEnhance.Sharpness(img)186 img = enhancer.enhance(1.0 + 1.0 * intensity)187 return img188 189 190def apply_denoise(img, intensity):191 """Reduce noise (slight blur)"""192 img = img.filter(ImageFilter.GaussianBlur(radius=0.3 * intensity))193 enhancer = ImageEnhance.Sharpness(img)194 img = enhancer.enhance(1.0 + 0.2 * intensity)195 return img196 197 198def apply_blur_bg(img, intensity):199 """Blur background effect (simplified)"""200 img = img.filter(ImageFilter.GaussianBlur(radius=2 * intensity))201 return img202 203 204def apply_relight(img, intensity):205 """Adjust lighting"""206 enhancer = ImageEnhance.Brightness(img)207 img = enhancer.enhance(1.0 + 0.1 * intensity)208 enhancer = ImageEnhance.Contrast(img)209 img = enhancer.enhance(1.0 + 0.1 * intensity)210 return img211 212 213def apply_fix_colors(img, intensity):214 """Fix color cast"""215 enhancer = ImageEnhance.Color(img)216 img = enhancer.enhance(1.0 + 0.1 * intensity)217 enhancer = ImageEnhance.Contrast(img)218 img = enhancer.enhance(1.0 + 0.05 * intensity)219 return img220 221 222def apply_custom_prompt(image, prompt, intensity=1.0):223 """Apply style based on custom prompt keywords"""224 if image is None:225 return None226 227 prompt_lower = prompt.lower()228 229 # Detect style from prompt230 if any(word in prompt_lower for word in ['anime', 'cartoon', 'animated']):231 return apply_style(image, "Anime", intensity)232 elif any(word in prompt_lower for word in ['winter', 'snow', 'cold', 'frost']):233 return apply_style(image, "Winter", intensity)234 elif any(word in prompt_lower for word in ['summer', 'warm', 'sunny', 'bright']):235 return apply_style(image, "Summer", intensity)236 elif any(word in prompt_lower for word in ['vintage', 'sepia', 'old', 'retro']):237 img = Image.fromarray(image)238 if img.mode != 'RGB':239 img = img.convert('RGB')240 # Sepia effect241 enhancer = ImageEnhance.Color(img)242 img = enhancer.enhance(0.3)243 r, g, b = img.split()244 r = r.point(lambda x: min(255, x + 30))245 g = g.point(lambda x: min(255, x + 15))246 img = Image.merge('RGB', (r, g, b))247 return np.array(img)248 elif any(word in prompt_lower for word in ['black and white', 'grayscale', 'monochrome']):249 img = Image.fromarray(image)250 img = img.convert('L').convert('RGB')251 enhancer = ImageEnhance.Contrast(img)252 img = enhancer.enhance(1.1)253 return np.array(img)254 elif any(word in prompt_lower for word in ['comic', 'pop art']):255 return apply_style(image, "Comic", intensity)256 elif any(word in prompt_lower for word in ['watercolor', 'painting', 'artistic']):257 return apply_style(image, "Watercolour", intensity)258 elif any(word in prompt_lower for word in ['enhance', 'improve', 'better']):259 return apply_style(image, "Auto Enhance", intensity)260 else:261 # Default: subtle enhancement262 return apply_style(image, "Auto Enhance", intensity * 0.5)263 264 265# Create Gradio Interface266with gr.Blocks(267 title="AI Photo Edit",268 theme=gr.themes.Soft(269 primary_hue="blue",270 secondary_hue="slate",271 ),272 css="""273 .container { max-width: 1200px; margin: auto; }274 .title { text-align: center; margin-bottom: 1rem; }275 """276) as demo:277 278 gr.Markdown(279 """280 # AI Photo Edit281 Transform your photos with AI-powered styles, enhancements, and fixes.282 283 Upload an image and choose a style to apply!284 """285 )286 287 with gr.Row():288 with gr.Column(scale=2):289 input_image = gr.Image(label="Upload Image", type="numpy")290 output_image = gr.Image(label="Result", type="numpy")291 292 with gr.Column(scale=1):293 with gr.Tabs():294 with gr.TabItem("Restyle"):295 gr.Markdown("### Artistic Styles")296 restyle_dropdown = gr.Dropdown(297 choices=list(RESTYLE_OPTIONS.keys()),298 label="Choose Style",299 value="Anime"300 )301 restyle_btn = gr.Button("Apply Restyle", variant="primary")302 303 gr.Markdown("### Seasons")304 season_dropdown = gr.Dropdown(305 choices=list(SEASON_OPTIONS.keys()),306 label="Choose Season",307 value="Summer"308 )309 season_btn = gr.Button("Apply Season", variant="primary")310 311 gr.Markdown("### Custom Prompt")312 custom_prompt = gr.Textbox(313 label="Describe your style",314 placeholder="e.g., vintage sepia photograph from the 1920s"315 )316 custom_btn = gr.Button("Apply Custom", variant="primary")317 318 with gr.TabItem("Enhance"):319 enhance_dropdown = gr.Dropdown(320 choices=list(ENHANCE_OPTIONS.keys()),321 label="Enhancement Type",322 value="Auto Enhance"323 )324 enhance_btn = gr.Button("Apply Enhancement", variant="primary")325 326 with gr.TabItem("Fix"):327 fix_dropdown = gr.Dropdown(328 choices=list(FIX_OPTIONS.keys()),329 label="Fix Type",330 value="Relight"331 )332 fix_btn = gr.Button("Apply Fix", variant="primary")333 334 gr.Markdown("### Intensity")335 intensity_slider = gr.Slider(336 minimum=0.1,337 maximum=2.0,338 value=1.0,339 step=0.1,340 label="Effect Intensity"341 )342 343 # Event handlers344 restyle_btn.click(345 fn=apply_style,346 inputs=[input_image, restyle_dropdown, intensity_slider],347 outputs=output_image348 )349 350 season_btn.click(351 fn=apply_style,352 inputs=[input_image, season_dropdown, intensity_slider],353 outputs=output_image354 )355 356 custom_btn.click(357 fn=apply_custom_prompt,358 inputs=[input_image, custom_prompt, intensity_slider],359 outputs=output_image360 )361 362 enhance_btn.click(363 fn=apply_style,364 inputs=[input_image, enhance_dropdown, intensity_slider],365 outputs=output_image366 )367 368 fix_btn.click(369 fn=apply_style,370 inputs=[input_image, fix_dropdown, intensity_slider],371 outputs=output_image372 )373 374 gr.Markdown(375 """376 ---377 **Features:**378 - **Restyle**: Anime, Chibi, Superhero, Graffiti, Watercolour, Comic379 - **Seasons**: Summer, Winter, Monsoon380 - **Enhance**: Auto Enhance, HDR, Sharpen, Reduce Noise381 - **Fix**: Blur Background, Relight, Fix Colors382 383 Built with Gradio384 """385 )386 387if __name__ == "__main__":388 demo.launch()389 