import os from typing import Iterable import gradio as gr from gradio.themes.base import Base from gradio.themes.utils import colors, fonts, sizes import time class Frosted(Base): def __init__( self, *, primary_hue: colors.Color | str = colors.emerald, secondary_hue: colors.Color | str = colors.blue, neutral_hue: colors.Color | str = colors.blue, spacing_size: sizes.Size | str = sizes.spacing_md, radius_size: sizes.Size | str = sizes.radius_md, text_size: sizes.Size | str = sizes.text_lg, font: fonts.Font | str | Iterable[fonts.Font | str] = ( fonts.GoogleFont("Quicksand"), "ui-sans-serif", "sans-serif", ), font_mono: fonts.Font | str | Iterable[fonts.Font | str] = ( fonts.GoogleFont("IBM Plex Mono"), "ui-monospace", "monospace", ), ): super().__init__( primary_hue=primary_hue, secondary_hue=secondary_hue, neutral_hue=neutral_hue, spacing_size=spacing_size, radius_size=radius_size, text_size=text_size, font=font, font_mono=font_mono, ) super().set( body_background_fill="rgba(255, 255, 255, 0.8)", body_background_fill_dark="rgba(0, 0, 0, 0.8)", button_primary_background_fill="rgba(255, 255, 255, 0.6)", button_primary_background_fill_hover="rgba(255, 255, 255, 0.8)", button_primary_text_color="black", button_primary_background_fill_dark="rgba(0, 0, 0, 0.6)", slider_color="rgba(0, 0, 0, 0.3)", slider_color_dark="rgba(255, 255, 255, 0.3)", block_title_text_weight="600", block_border_width="1px", block_shadow="0 4px 30px rgba(0, 0, 0, 0.1)", button_shadow="0 4px 30px rgba(0, 0, 0, 0.1)", button_large_padding="32px", ) def apply_custom_css(self): custom_css = """ .gradio-container { backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.3); background: rgba(255, 255, 255, 0.3); background-image: url('static/back.png'); background-size: cover; color: black; } .gr-button { backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); background: rgba(255, 255, 255, 0.4); color: black; } """ # Create the directory if it doesn't exist os.makedirs("static", exist_ok=True) # Write the CSS to the file with open("static/custom.css", "w") as f: f.write(custom_css) # Ensure the CSS file is included in your Gradio app # This might involve serving the file and referencing it in your Gradio interface # Create an instance of the Frosted theme and apply the custom CSS frosted = Frosted() frosted.apply_custom_css() with gr.Blocks(theme=frosted, css_file="static/custom.css") as demo: textbox = gr.Textbox(label="Name") slider = gr.Slider(label="Count", minimum=0, maximum=100, step=1) with gr.Row(): button = gr.Button("Submit", variant="primary") clear = gr.Button("Clear") output = gr.Textbox(label="Output") def repeat(name, count): time.sleep(3) return name * count button.click(repeat, [textbox, slider], output) demo.launch()