File size: 4,724 Bytes
cc8f276
748425c
cc8f276
748425c
cc8f276
 
 
 
 
748425c
cc8f276
748425c
cc8f276
748425c
27f8934
cc8f276
27f8934
 
748425c
 
 
 
27f8934
 
cc8f276
748425c
27f8934
748425c
 
 
 
 
27f8934
cc8f276
748425c
 
 
 
 
 
 
cc8f276
748425c
cc8f276
 
27f8934
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
748425c
 
 
 
 
 
cc8f276
748425c
cc8f276
 
27f8934
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
748425c
 
 
 
 
 
cc8f276
 
 
27f8934
 
 
 
 
 
 
 
 
748425c
cc8f276
 
748425c
27f8934
 
 
 
 
 
 
748425c
 
 
 
 
 
 
 
 
cc8f276
748425c
 
cc8f276
 
 
748425c
cc8f276
748425c
 
cc8f276
 
 
 
748425c
27f8934
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
from pathlib import Path

import gradio as gr

from tools import (
    change_color_objects_hsv,
    change_color_objects_lab,
    privacy_preserve_image,
)

gr.set_static_paths(paths=[Path.cwd().absolute() / "assets"])

icon = """<link rel="icon" type="image/x-icon" href="https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/icons/ImageAlfredIcon.png">"""

title = """Image Alfred - Recolor and Privacy Preserving Image MCP Tools
<img src="https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/icons/ImageAlfredIcon.png" alt="Image Alfred Logo" style="width: 120px; height: auto; margin: 0 auto;">
<h4 style="text-align: center;"></h4>
"""  # noqa: E501

hsv_df_input = gr.Dataframe(
    headers=["Object", "Hue", "Saturation Scale"],
    datatype=["str", "number", "number"],
    col_count=(3, "fixed"),
    show_row_numbers=True,
    label="Target Objects and New Settings",
    type="array",
    # row_count=(1, "dynamic"),
)

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",
    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 hue and saturation scale for each object.""",  # noqa: E501
    examples=[
        [
            "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_1.jpg",
            [["pants", 128, 1]],
        ],
        [
            "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_4.jpg",
            [["desk", 15, 0.5], ["left cup", 40, 1.1]],
        ],
        [
            "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_5.jpg",
            [["suits", 60, 1.5], ["pants", 10, 0.8]],
        ],
    ],
)

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", 128, 1]],
        ],
        [
            "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_4.jpg",
            [["desk", 15, 0.5], ["left cup", 40, 1.1]],
        ],
        [
            "https://raw.githubusercontent.com/mahan-ym/ImageAlfred/main/src/assets/examples/test_5.jpg",
            [["suits", 60, 1.5], ["pants", 10, 0.8]],
        ],
    ],
)

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.",
        ),
    ],
    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,
        ],
    ],
)

demo = gr.TabbedInterface(
    [
        change_color_objects_hsv_tool,
        change_color_objects_lab_tool,
        privacy_preserve_tool,
    ],
    ["Change Color Objects HSV", "Change Color Objects LAB", "Privacy Preserving Tool"],
    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")