freddyaboulton's picture
Upload folder using huggingface_hub
33454aa verified
import gradio as gr
with gr.Blocks() as demo:
with gr.Tab("Default ImageEditor"):
im = gr.ImageEditor(value="./cheetah.jpg", interactive=True, fixed_canvas=True)
with gr.Tab("Brush Options"):
with gr.Row():
with gr.Column():
image_editor = gr.ImageEditor(
value="./cheetah.jpg",
interactive=True,
fixed_canvas=True,
brush=gr.Brush(
default_size=10,
default_color="#000000",
colors=[
"#FFA50050",
"#FF0000",
("#00FF00", 0.5),
("rgba(255, 255, 0, 0.5)", 0.5),
"rgba(255, 0, 0, 0.5)",
"pink",
"hsla(300, 100%, 50%, 0.5)",
("hsl(300, 100%, 50%)", 0.8),
("crimson", 0.5),
("#000080", 1),
],
),
eraser=gr.Eraser(default_size=10),
)
image_editor.apply(fn=lambda x: print(x), inputs=[image_editor])
with gr.Column():
with gr.Group():
brush_size = gr.Slider(
minimum=1,
maximum=100,
value=10,
label="Brush Size",
)
brush_opacity = gr.Slider(
minimum=0,
maximum=100,
value=50,
label="Brush Opacity",
)
brush_color = gr.ColorPicker(value="#000000", label="Brush Color")
with gr.Group():
eraser_size = gr.Slider(
minimum=1,
maximum=100,
value=10,
label="Eraser Size",
)
update_btn = gr.Button("Apply Settings")
status_msg = gr.Markdown(
value="**Adjust settings and click Apply.**",
)
def update_editor_settings(size, opacity, color, e_size):
return (
gr.ImageEditor(
brush=gr.Brush(
default_size=size,
default_color=(color, opacity / 100),
colors=[
"#FFA50050",
"#FF0000",
("#00FF00", 0.5),
("rgba(255, 255, 0, 0.5)", 0.5),
"rgba(255, 0, 0, 0.5)",
"pink",
"hsla(300, 100%, 50%, 0.5)",
("hsl(300, 100%, 50%)", 0.8),
("crimson", 0.5),
("#000080", 1),
],
),
eraser=gr.Eraser(default_size=e_size),
),
f'### Settings applied:\n\n- `Brush.default_size={size}`\n- `Brush.default_color=("{color}", {opacity / 100})`\n- `Eraser.default_size={e_size}`',
)
update_btn.click(
update_editor_settings,
inputs=[brush_size, brush_opacity, brush_color, eraser_size],
outputs=[image_editor, status_msg],
)
def update_status(size=None, opacity=None, color=None, e_size=None):
changes = []
if size is not None:
changes.append(f"`Brush.default_size={size}`")
if opacity is not None:
changes.append(f"`Brush.default_color=('{color}', {opacity / 100})`")
if color is not None:
if opacity is not None:
changes.append(f"`Brush.default_color=('{color}', {opacity / 100})`")
else:
changes.append(f"`Brush.default_color='{color}'`")
if e_size is not None:
changes.append(f"`Eraser.default_size={e_size}`")
if changes:
return (
"Settings changed:\n\n"
+ "- "
+ "\n- ".join(changes)
+ "\n\n**Click Apply to update.**"
)
return ""
brush_size.change(
fn=update_status,
inputs=[brush_size, brush_opacity, brush_color, eraser_size],
outputs=status_msg,
)
brush_opacity.change(
fn=update_status,
inputs=[brush_size, brush_opacity, brush_color, eraser_size],
outputs=status_msg,
)
brush_color.change(
fn=update_status,
inputs=[brush_size, brush_opacity, brush_color, eraser_size],
outputs=status_msg,
)
eraser_size.change(
fn=update_status,
inputs=[brush_size, brush_opacity, brush_color, eraser_size],
outputs=status_msg,
)
with gr.Tab("Layer Options"):
with gr.Row():
with gr.Column():
im = gr.ImageEditor(
value="./cheetah.jpg",
interactive=True,
layers=gr.LayerOptions(
allow_additional_layers=False, layers=["Mask"]
),
)
with gr.Column():
disable_layers = gr.Checkbox(value=False, label="Disable Layers")
allow_additional_layers = gr.Checkbox(
value=True, label="Allow Additional Layers"
)
layer = gr.Dropdown(
choices=["Mask", "Mask 2"],
value="Mask",
label="Layer",
multiselect=True,
interactive=True,
allow_custom_value=True,
)
gr.Checkbox(value=True, label="Allow Additional Layers")
update_layer_btn = gr.Button("Update Layer Options")
status_msg = gr.Markdown(value="**Adjust settings and click Apply.**")
def update_layer_options(
disable_layers, allow_additional_layers, layer
):
print(
"update_layer_options",
disable_layers,
allow_additional_layers,
layer,
)
return (
gr.ImageEditor(
value="./cheetah.jpg",
interactive=True,
layers=(
False
if disable_layers
else gr.LayerOptions(
allow_additional_layers=allow_additional_layers,
layers=layer,
)
),
),
f"### Settings applied:\n\n- `LayerOptions=False`\n- `LayerOptions.allow_additional_layers={allow_additional_layers}`\n- `LayerOptions.layers={layer}`",
)
update_layer_btn.click(
update_layer_options,
inputs=[disable_layers, allow_additional_layers, layer],
outputs=[im, status_msg],
)
with gr.Tab("ImageEditor Templates"):
gr.ImageMask(value="./cheetah.jpg", interactive=True)
gr.Paint(interactive=True)
gr.Sketchpad(interactive=True)
if __name__ == "__main__":
demo.launch()