CoolFace
Apppublic

Niketjain2002/AI-Editing-Proto

sourceHugging Facemitupdated 8mo agoView on Hugging Face
0likes
app.py389 linesDownload Raw Back to root
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