Spaces:
Build error
Build error
| import gradio as gr | |
| import torch | |
| from transformers import AutoTokenizer, AutoModel | |
| from PIL import Image | |
| import numpy as np | |
| import random | |
| from rudalle import get_rudalle_model, get_tokenizer, get_vae, get_realesrgan | |
| from rudalle.pipelines import generate_images, super_resolution | |
| from rudalle.utils import seed_everything | |
| # Load model components (these would be loaded in a real deployment) | |
| def load_model(): | |
| """Load the ruDALL-E Malevich model components""" | |
| try: | |
| device = 'cuda' if torch.cuda.is_available() else 'cpu' | |
| model = get_rudalle_model('Malevich', pretrained=True, fp16=True, device=device) | |
| tokenizer = get_tokenizer() | |
| vae = get_vae().to(device) | |
| realesrgan = get_realesrgan('x4', device=device) | |
| return model, tokenizer, vae, realesrgan, device | |
| except Exception as e: | |
| print(f"Model loading failed: {e}") | |
| return None, None, None, None, 'cpu' | |
| # Initialize model | |
| model, tokenizer, vae, realesrgan, device = load_model() | |
| def generate_images(prompt, negative_prompt=""): | |
| """Generate 4 images using ruDALL-E Malevich model""" | |
| if model is None: | |
| # Fallback: generate placeholder images if model fails to load | |
| images = [] | |
| for i in range(4): | |
| # Create colorful placeholder with different patterns | |
| img_array = np.random.randint(50, 255, (512, 512, 3), dtype=np.uint8) | |
| # Add some structure to make it look more like generated art | |
| for _ in range(5): | |
| x, y = random.randint(0, 512), random.randint(0, 512) | |
| radius = random.randint(20, 100) | |
| color = [random.randint(0, 255) for _ in range(3)] | |
| for i in range(max(0, x-radius), min(512, x+radius)): | |
| for j in range(max(0, y-radius), min(512, y+radius)): | |
| if (i-x)**2 + (j-y)**2 <= radius**2: | |
| img_array[i, j] = color | |
| img = Image.fromarray(img_array) | |
| images.append(img) | |
| return images | |
| # Use empty prompt if none provided | |
| if not prompt.strip(): | |
| prompt = "абстрактное искусство" # "abstract art" in Russian | |
| # Handle negative prompt | |
| if negative_prompt: | |
| # In a real implementation, you would incorporate negative prompting | |
| # For now, we'll just pass it through | |
| pass | |
| try: | |
| # Generate 4 images | |
| images = [] | |
| for _ in range(4): | |
| _pil_images = generate_images(prompt, tokenizer, model, vae, top_k=512, top_p=0.99, images_num=1) | |
| # Upscale images | |
| _pil_images = super_resolution(_pil_images, realesrgan) | |
| images.extend(_pil_images) | |
| return images[:4] | |
| except Exception as e: | |
| print(f"Generation failed: {e}") | |
| # Fallback to placeholder images | |
| return generate_images("", "") | |
| def select_image(gallery, select_data: gr.SelectData): | |
| """Handle image selection from gallery""" | |
| if select_data is not None and gallery and len(gallery) > select_data.index: | |
| return gallery[select_data.index] | |
| return None | |
| # Create the Gradio 6 application | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 🎨 ruDALL-E Malevich Image Generation") | |
| gr.Markdown("Generate images using the ai-forever/rudalle-Malevich model") | |
| gr.Markdown("[Built with anycoder](https://huggingface.co/spaces/akhaliq/anycoder)") | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| prompt_input = gr.Textbox( | |
| label="Prompt", | |
| placeholder="Enter your prompt here (can be empty)", | |
| lines=3, | |
| value="", | |
| info="Leave empty for random art generation" | |
| ) | |
| negative_prompt_input = gr.Textbox( | |
| label="Negative Prompt", | |
| placeholder="Enter what to avoid in the image", | |
| lines=2, | |
| value="", | |
| info="Describe elements you don't want in the image" | |
| ) | |
| with gr.Row(): | |
| generate_btn = gr.Button("🎲 Generate 4 Images", variant="primary", size="lg") | |
| clear_btn = gr.Button("Clear", variant="secondary") | |
| with gr.Column(scale=2): | |
| gr.Markdown("### Generated Gallery") | |
| gallery = gr.Gallery( | |
| label="Click any image to view larger", | |
| show_label=False, | |
| elem_id="gallery", | |
| columns=2, | |
| rows=2, | |
| height="auto", | |
| allow_preview=True, | |
| object_fit="cover", | |
| show_download_button=True, | |
| show_share_button=True | |
| ) | |
| with gr.Row(): | |
| selected_image = gr.Image( | |
| label="Selected Image (Click gallery image to view)", | |
| type="pil", | |
| height=600, | |
| width=600, | |
| interactive=False, | |
| show_label=True | |
| ) | |
| # Event handlers | |
| generate_btn.click( | |
| fn=generate_images, | |
| inputs=[prompt_input, negative_prompt_input], | |
| outputs=gallery, | |
| api_visibility="public" | |
| ) | |
| gallery.select( | |
| fn=select_image, | |
| inputs=[gallery], | |
| outputs=selected_image, | |
| api_visibility="private" | |
| ) | |
| clear_btn.click( | |
| fn=lambda: ([], None), | |
| inputs=[], | |
| outputs=[gallery, selected_image], | |
| api_visibility="private" | |
| ) | |
| # Add example prompts | |
| gr.Examples( | |
| examples=[ | |
| ["космический пейзаж", "люди, здания"], | |
| ["абстрактная композиция", ""], | |
| ["", "текст, надписи"], | |
| ["магический лес", "город, техника"], | |
| ["портрет в стиле импрессионизма", "современные элементы"] | |
| ], | |
| inputs=[prompt_input, negative_prompt_input], | |
| label="Example Prompts", | |
| examples_per_page=5 | |
| ) | |
| # Launch the demo with Gradio 6 theme | |
| demo.launch( | |
| theme=gr.themes.Soft( | |
| primary_hue="blue", | |
| secondary_hue="indigo", | |
| neutral_hue="slate", | |
| font=gr.themes.GoogleFont("Inter"), | |
| text_size="lg", | |
| spacing_size="lg", | |
| radius_size="md" | |
| ).set( | |
| button_primary_background_fill="*primary_600", | |
| button_primary_background_fill_hover="*primary_700", | |
| block_title_text_weight="600", | |
| block_border_width="1px", | |
| block_border_color="*neutral_200" | |
| ), | |
| footer_links=[ | |
| {"label": "Built with anycoder", "url": "https://huggingface.co/spaces/akhaliq/anycoder"} | |
| ] | |
| ) |