from pathlib import Path import gradio as gr from tools import ( change_color_objects_hsv, change_color_objects_lab, privacy_preserve_image, remove_background, ) gr.set_static_paths(paths=[Path.cwd().absolute() / "assets"]) icon = """""" title = """Image Alfred - Recolor and Privacy Preserving Image MCP Tools Image Alfred Logo

""" # noqa: E501 hsv_df_input = gr.Dataframe( headers=["Object", "Red", "Green", "Blue"], datatype=["str", "number", "number", "number"], col_count=(4, "fixed"), show_row_numbers=True, label="Target Objects and Their new RGB Colors", type="array", ) lab_df_input = gr.Dataframe( headers=["Object", "New A", "New B"], datatype=["str", "number", "number"], col_count=(3, "fixed"), label="Target Objects and New Settings.(0-255 -- 128 = Neutral)", type="array", ) change_color_objects_hsv_tool = gr.Interface( fn=change_color_objects_hsv, inputs=[ gr.Image(label="Input Image", type="pil"), hsv_df_input, ], outputs=gr.Image(label="Output Image"), title="Image Recolor Tool (HSV)", description=""" This tool allows you to recolor objects in an image using the HSV color space. You can specify the RGB values for each object.""", # noqa: E501 examples=[ [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_1.jpg", [ ["pants", 255, 178, 102], ], ], [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_8.jpg", [ ["pants", 114, 117, 34], ["shirt", 51, 51, 37], ], ], ], ) change_color_objects_lab_tool = gr.Interface( fn=change_color_objects_lab, inputs=[ gr.Image(label="Input Image", type="pil"), lab_df_input, ], outputs=gr.Image(label="Output Image"), title="Image Recolor Tool (LAB)", description=""" Recolor an image based on user input using the LAB color space. You can specify the new A and new B values for each object. """, # noqa: E501 examples=[ [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_1.jpg", [["pants", 112, 128]], ], [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_4.jpg", [["desk", 166, 193]], ], [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_5.jpg", [["suits coat", 110, 133]], ], ], ) privacy_preserve_tool = gr.Interface( fn=privacy_preserve_image, inputs=[ gr.Image(label="Input Image", type="pil"), gr.Textbox( label="Objects to Mask (dot-separated)", placeholder="e.g., person. car. license plate", ), gr.Slider( label="Privacy Strength", minimum=1, maximum=50, value=15, step=1, info="Higher values result in stronger blurring.", ), gr.Slider( label="Detection Threshold", minimum=0.01, maximum=0.99, value=0.2, step=0.01, info="Model threshold for detecting objects.", ), ], outputs=gr.Image(label="Output Image"), title="Privacy Preserving Tool", description="Upload an image and provide a prompt for the object to enforce privacy. The tool will use blurring to obscure the specified objects in the image.", # noqa: E501 examples=[ [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_3.jpg", "license plate", 10, 0.5, ], [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_8.jpg", "face", 15, 0.1, ], [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_6.jpg", "face", 20, 0.1, ], ], ) remove_background_tool = gr.Interface( fn=remove_background, inputs=[ gr.Image(label="Input Image", type="pil"), ], outputs=gr.Image(label="Output Image"), title="Remove Image Background Tool", description="Upload an image to remove the background.", examples=[ [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_5.jpg", ], [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_6.jpg", ], [ "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_8.jpg", ], ], ) demo = gr.TabbedInterface( [ privacy_preserve_tool, remove_background_tool, change_color_objects_hsv_tool, change_color_objects_lab_tool, ], [ "Privacy Preserving Tool", "Remove Background Tool", "Change Color Objects HSV", "Change Color Objects LAB", ], title=title, theme=gr.themes.Default( primary_hue="blue", secondary_hue="green", # font="Inter", # font_mono="Courier New", ), head=icon, ) # with gr.Blocks(title="Image Alfred", head=test) as demo: # gr.HTML(header) # tabs_interface.render() if __name__ == "__main__": demo.launch(mcp_server=True, max_file_size="15mb")