Spaces:
Paused
Paused
| """ | |
| Logo Creator - Generate professional logos using AI | |
| Self-contained app using FLUX.1-schnell with ZeroGPU on HuggingFace Spaces | |
| """ | |
| import os | |
| import random | |
| import gradio as gr | |
| import numpy as np | |
| MAX_SEED = np.iinfo(np.int32).max | |
| MODEL_ID = "black-forest-labs/FLUX.1-schnell" | |
| def generate_logo( | |
| prompt: str, | |
| style: str, | |
| color_scheme: str, | |
| background: str, | |
| seed: int, | |
| randomize_seed: bool, | |
| width: int, | |
| height: int, | |
| num_steps: int, | |
| progress=gr.Progress(track_tqdm=True), | |
| ): | |
| """Generate a logo based on user inputs.""" | |
| import torch | |
| from diffusers import FluxPipeline | |
| if not prompt.strip(): | |
| raise gr.Error("Please enter a description for your logo.") | |
| # Build enhanced prompt | |
| parts = [ | |
| f"A professional logo design: {prompt.strip()}", | |
| f"{style} style" if style != "Auto" else "", | |
| f"{color_scheme} color scheme" if color_scheme != "Auto" else "", | |
| f"{background} background" if background != "Auto" else "", | |
| "clean vector art, high quality, centered composition, professional logo design", | |
| ] | |
| full_prompt = ", ".join(p for p in parts if p) | |
| if randomize_seed: | |
| seed = random.randint(0, MAX_SEED) | |
| pipe = FluxPipeline.from_pretrained( | |
| MODEL_ID, | |
| torch_dtype=torch.bfloat16, | |
| ) | |
| pipe.to("cuda") | |
| generator = torch.Generator("cuda").manual_seed(seed) | |
| image = pipe( | |
| prompt=full_prompt, | |
| width=width, | |
| height=height, | |
| num_inference_steps=num_steps, | |
| generator=generator, | |
| guidance_scale=0.0, | |
| ).images[0] | |
| return image, seed | |
| # Apply ZeroGPU decorator if available | |
| try: | |
| import spaces | |
| generate_logo = spaces.GPU(duration=120)(generate_logo) | |
| print("ZeroGPU enabled") | |
| except ImportError: | |
| print("Running without ZeroGPU (local mode)") | |
| # --- UI --- | |
| STYLE_CHOICES = [ | |
| "Auto", "Minimalist", "Modern", "Vintage", "Geometric", "Abstract", | |
| "Flat", "3D", "Hand-drawn", "Corporate", "Playful", "Elegant", "Tech", "Nature", | |
| ] | |
| COLOR_CHOICES = [ | |
| "Auto", "Monochrome", "Blue tones", "Red tones", "Green tones", | |
| "Gold and black", "Pastel", "Vibrant", "Earth tones", "Gradient", "Neon", | |
| ] | |
| BG_CHOICES = ["Auto", "White", "Black", "Transparent-style", "Gradient"] | |
| EXAMPLES = [ | |
| ["A mountain peak with a rising sun for a travel company called Horizon", "Minimalist", "Blue tones", "White", 42, True, 1024, 1024, 4], | |
| ["A fox head for a tech startup called FoxByte", "Geometric", "Auto", "White", 42, True, 1024, 1024, 4], | |
| ["Coffee cup with steam forming a book for ReadBrew", "Modern", "Earth tones", "Auto", 42, True, 1024, 1024, 4], | |
| ["A rocket launching from a laptop for a SaaS company", "Flat", "Vibrant", "White", 42, True, 1024, 1024, 4], | |
| ["An elegant letter M with floral accents for a luxury brand", "Elegant", "Gold and black", "Black", 42, True, 1024, 1024, 4], | |
| ] | |
| with gr.Blocks( | |
| theme=gr.themes.Soft(), | |
| title="Logo Creator", | |
| css=".main-header { text-align: center; margin-bottom: 0.5em; } .generate-btn { min-height: 50px !important; }", | |
| ) as demo: | |
| gr.Markdown("# Logo Creator", elem_classes="main-header") | |
| gr.Markdown("Generate professional logos with AI. Describe your logo idea and customize the style.") | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| prompt = gr.Textbox( | |
| label="Logo Description", | |
| placeholder="Describe the logo you want to create...", | |
| lines=3, | |
| ) | |
| style = gr.Dropdown(choices=STYLE_CHOICES, value="Auto", label="Style") | |
| color_scheme = gr.Dropdown(choices=COLOR_CHOICES, value="Auto", label="Color Scheme") | |
| background = gr.Dropdown(choices=BG_CHOICES, value="Auto", label="Background") | |
| with gr.Accordion("Advanced Settings", open=False): | |
| seed = gr.Slider(minimum=0, maximum=MAX_SEED, step=1, value=42, label="Seed") | |
| randomize_seed = gr.Checkbox(value=True, label="Randomize Seed") | |
| with gr.Row(): | |
| width = gr.Slider(minimum=256, maximum=1024, step=64, value=1024, label="Width") | |
| height = gr.Slider(minimum=256, maximum=1024, step=64, value=1024, label="Height") | |
| num_steps = gr.Slider(minimum=1, maximum=8, step=1, value=4, label="Inference Steps") | |
| generate_btn = gr.Button("Generate Logo", variant="primary", elem_classes="generate-btn") | |
| with gr.Column(scale=1): | |
| output_image = gr.Image(label="Generated Logo", type="pil") | |
| output_seed = gr.Number(label="Seed Used", interactive=False) | |
| generate_btn.click( | |
| fn=generate_logo, | |
| inputs=[prompt, style, color_scheme, background, seed, randomize_seed, width, height, num_steps], | |
| outputs=[output_image, output_seed], | |
| ) | |
| gr.Examples( | |
| examples=EXAMPLES, | |
| inputs=[prompt, style, color_scheme, background, seed, randomize_seed, width, height, num_steps], | |
| outputs=[output_image, output_seed], | |
| fn=generate_logo, | |
| cache_examples=False, | |
| ) | |
| gr.Markdown("---\n*Powered by [FLUX.1-schnell](https://huggingface.co/black-forest-labs/FLUX.1-schnell) with ZeroGPU*") | |
| if __name__ == "__main__": | |
| demo.launch() | |