import gradio as gr import threading import os import torch os.environ["OMP_NUM_THREADS"] = str(os.cpu_count()) torch.set_num_threads(os.cpu_count()) model1 = gr.load("models/prithivMLmods/SD3.5-Turbo-Realism-2.0-LoRA") model2 = gr.load("models/Purz/face-projection") stop_event = threading.Event() def generate_images(text, selected_model): stop_event.clear() if selected_model == "Turbo Realism": model = model1 elif selected_model == "Face Projection": model = model2 else: return ["Invalid model selection."] * 3 results = [] for i in range(3): if stop_event.is_set(): return ["Image generation stopped by user."] * 3 modified_text = f"{text} variation {i+1}" result = model(modified_text) results.append(result) return results def stop_generation(): """Stops the ongoing image generation by setting the stop_event flag.""" stop_event.set() return ["Generation stopped."] * 3 css = """ .container { max-width: 1200px; margin: auto; padding: 20px; } .main-title { text-align: center; color: #1a73e8; font-size: 2.5em; margin-bottom: 1em; font-weight: 700; } .notice { background-color: #fef3c7; border-left: 4px solid #f59e0b; padding: 1em; margin: 1em 0; border-radius: 4px; } .input-group { background-color: #f8fafc; padding: 2em; border-radius: 12px; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1); margin: 1em 0; } .button-primary { background-color: #1a73e8 !important; } .button-secondary { background-color: #dc2626 !important; } .output-images { gap: 1em; margin-top: 2em; } .output-image { border-radius: 8px; overflow: hidden; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1); } """ with gr.Blocks(css=css, theme=gr.themes.Soft()) as interface: with gr.Column(elem_classes="container"): gr.Markdown("# AI Image Generator 🎨", elem_classes="main-title") gr.Markdown( "⚠️ Note: Currently running on CPU mode which may affect performance.", elem_classes="notice" ) with gr.Group(elem_classes="input-group"): text_input = gr.Textbox( label="Describe your imagination", placeholder="Enter a detailed description of the image you want to generate...", lines=3 ) model_selector = gr.Radio( ["Turbo Realism", "Face Projection"], label="Select Model", value="Turbo Realism", container=False ) with gr.Row(): generate_button = gr.Button( "✨ Generate Images", elem_classes="button-primary" ) stop_button = gr.Button( "🛑 Stop Generation", elem_classes="button-secondary" ) with gr.Row(elem_classes="output-images"): output1 = gr.Image(label="Variation 1", elem_classes="output-image") output2 = gr.Image(label="Variation 2", elem_classes="output-image") output3 = gr.Image(label="Variation 3", elem_classes="output-image") gr.Markdown( """ ### Tips for better results: - Be specific in your descriptions - Include details about style, mood, and lighting - Experiment with different models for varied results """, ) generate_button.click( generate_images, inputs=[text_input, model_selector], outputs=[output1, output2, output3] ) stop_button.click( stop_generation, inputs=[], outputs=[output1, output2, output3] ) interface.launch()