Gradio provides a theming system that allows you to customize the appearance of your applications.
Theme
The base Theme class that all Gradio themes inherit from. You can create custom themes by subclassing this class or by loading themes from the Hugging Face Hub.
Methods
from_hub
Theme.from_hub(repo_name, token=None)
Load a theme from the Hugging Face Hub. This does NOT require a HuggingFace account for downloading publicly available themes.
String of the form <author>/<theme-name>@<semantic-version-expression>. If a semantic version expression is omitted, the latest version will be fetched.
Hugging Face token. Only needed to download private themes.
A Theme instance loaded from the Hub.
Example
import gradio as gr
theme = gr.Theme.from_hub("gradio/monochrome")
with gr.Blocks(theme=theme) as demo:
gr.Textbox(label="Input")
gr.Button("Submit")
demo.launch()
load
Load a theme from a JSON file.
A Theme instance loaded from the file.
from_dict
Create a theme instance from a dictionary representation.
theme
dict[str, dict[str, str]]
required
The dictionary representation of the theme.
to_dict
Convert the theme into a Python dictionary.
Dictionary representation of the theme.
dump
Write the theme to a JSON file.
The path to write the theme to.
Built-in Themes
Gradio includes several built-in themes that you can use:
Base
The base theme that all other themes inherit from.
Default
The default Gradio theme.
Soft
A soft, rounded theme with pastel colors.
Monochrome
A minimalist black and white theme.
Glass
A theme with glassmorphism effects.
Origin
A theme inspired by the original Gradio design.
Citrus
A bright, citrus-colored theme.
Ocean
A calm, ocean-inspired theme.
Custom Themes
You can create custom themes by extending the base Theme class:
import gradio as gr
class MyTheme(gr.themes.Base):
def __init__(self):
super().__init__()
# Customize colors
self.primary_hue = "blue"
self.secondary_hue = "green"
self.neutral_hue = "slate"
# Customize sizes
self.text_size = "md"
self.spacing_size = "md"
self.radius_size = "md"
with gr.Blocks(theme=MyTheme()) as demo:
gr.Textbox(label="Input")
gr.Button("Submit")
demo.launch()
Theme Variables
Themes support the following customizable variables:
Color Variables
primary_hue: Primary color hue
secondary_hue: Secondary color hue
neutral_hue: Neutral color hue
Size Variables
text_size: Text size scale
spacing_size: Spacing size scale
radius_size: Border radius size scale
Font Variables
font: Main font family
font_mono: Monospace font family
Example: Using a Custom Theme
import gradio as gr
# Use a built-in theme
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# My App")
with gr.Row():
inp = gr.Textbox(placeholder="Enter text here")
out = gr.Textbox()
btn = gr.Button("Submit")
btn.click(lambda x: x.upper(), inp, out)
demo.launch()
Example: Loading from Hub
import gradio as gr
# Load a theme from the Hugging Face Hub
theme = gr.Theme.from_hub("gradio/seafoam")
with gr.Blocks(theme=theme) as demo:
gr.Markdown("# My Themed App")
gr.Textbox(label="Input")
gr.Button("Submit")
demo.launch()
Notes
- Themes are applied to the entire Blocks interface
- You can share custom themes on the Hugging Face Hub
- Theme variables use CSS custom properties under the hood
- Dark mode is automatically supported for all themes