import gradio as gr import os import sys from pathlib import Path from PIL import Image import re from PIL import Image import numpy as np # Coder: Create directories if they don't exist if not os.path.exists('saved_prompts'): os.makedirs('saved_prompts') if not os.path.exists('saved_images'): os.makedirs('saved_images') # Humanities: Elegant function to generate a safe filename 📝 def generate_safe_filename(text): return re.sub('[^a-zA-Z0-9]', '_', text) def load_models_from_file(filename): with open(filename, 'r') as f: return [line.strip() for line in f] if __name__ == "__main__": models = load_models_from_file('models.txt') print(models) #removed to removed.txt current_model = models[0] #text_gen1=gr.Interface.load("spaces/Omnibus/MagicPrompt-Stable-Diffusion_link") #text_gen1=gr.Interface.load("awacke1/MagicPrompt-Stable-Diffusion", src="spaces") text_gen1=gr.Interface.load("awacke1/MagicPrompt-Stable-Diffusion", live=True, src="spaces") models2 = [gr.Interface.load(f"models/{model}", live=True, preprocess=False, src="models") for model in models] def text_it1(inputs,text_gen1=text_gen1): go_t1=text_gen1(inputs) return(go_t1) def set_model(current_model): current_model = models[current_model] return gr.update(label=(f"{current_model}")) # Analysis: Function to list saved prompts and images 📊 def list_saved_prompts_and_images(): saved_prompts = os.listdir('saved_prompts') saved_images = os.listdir('saved_images') html_str = "

Saved Prompts and Images:

" return html_str # Coder: Modified function to save the prompt and image 🖼️ def send_it1(inputs, model_choice): proc1 = models2[model_choice] output1 = proc1(inputs) safe_filename = generate_safe_filename(inputs[0]) image_path = f"saved_images/{safe_filename}.png" prompt_path = f"saved_prompts/{safe_filename}.txt" with open(prompt_path, 'w') as f: f.write(inputs[0]) # Check the type of output1 before saving if isinstance(output1, np.ndarray): # If it's a numpy array Image.fromarray(np.uint8(output1)).save(image_path) elif isinstance(output1, Image.Image): # If it's already a PIL Image output1.save(image_path) elif isinstance(output1, str): # If it's a string (this should not happen in ideal conditions) print(f"Warning: output1 is a string. Cannot save as image. Value: {output1}") else: print(f"Warning: Unexpected type {type(output1)} for output1.") #Image.fromarray(output1).save(image_path) saved_output.update(list_saved_prompts_and_images()) return output1 css="""""" with gr.Blocks(css=css) as myface: gr.HTML(""" """) with gr.Row(): with gr.Column(scale=100): saved_output = gr.HTML(label="Saved Prompts and Images") with gr.Row(): with gr.Tab("Title"): gr.HTML("""Prompt to Generate Image

Enter a Prompt in Textbox then click Generate Image

""") with gr.Tab("Tools"): with gr.Tab("View"): with gr.Row(): with gr.Column(style="width=50%, height=70%"): gr.Pil(label="Crop") with gr.Column(style="width=50%, height=70%"): gr.Pil(label="Crop") with gr.Tab("Draw"): with gr.Column(style="width=50%, height=70%"): gr.Pil(label="Crop") with gr.Column(style="width=50%, height=70%"): gr.Pil(label="Draw") gr.ImagePaint(label="Draw") with gr.Tab("Text"): with gr.Row(): with gr.Column(scale=50): gr.Textbox(label="", lines=8, interactive=True) with gr.Column(scale=50): gr.Textbox(label="", lines=8, interactive=True) with gr.Tab("Color Picker"): with gr.Row(): with gr.Column(scale=50): gr.ColorPicker(label="Color", interactive=True) with gr.Column(scale=50): gr.ImagePaint(label="Draw", interactive=True) with gr.Row(): with gr.Column(scale=100): magic1=gr.Textbox(lines=4) run=gr.Button("Generate Image") with gr.Row(): with gr.Column(scale=100): model_name1 = gr.Dropdown(label="Select Model", choices=[m for m in models], type="index", value=current_model, interactive=True) with gr.Row(): with gr.Column(style="width=800px"): output1=gr.Image(label=(f"{current_model}")) # Check the type before attempting to save the image if isinstance(output1, Image.Image): # Check if it's a PIL Image object output1.save(image_path) elif isinstance(output1, np.ndarray): # Check if it's a NumPy array Image.fromarray(np.array(output1, dtype=np.uint8)).save(image_path) else: print(f"Warning: Unexpected type {type(output1)} for output1.") with gr.Row(): with gr.Column(scale=50): input_text=gr.Textbox(label="Prompt Idea",lines=2) use_short=gr.Button("Use Short Prompt") see_prompts=gr.Button("Extend Idea") with gr.Row(): with gr.Column(scale=100): saved_output = gr.HTML(label=list_saved_prompts_and_images(), live=True) def short_prompt(inputs): return(inputs) use_short.click(short_prompt,inputs=[input_text],outputs=magic1) see_prompts.click(text_it1,inputs=[input_text],outputs=magic1) # Reasoning: Link functions to Gradio components 🎛️ model_name1.change(set_model, inputs=model_name1, outputs=[output1]) run.click(send_it1, inputs=[magic1, model_name1], outputs=[output1]) myface.queue(concurrency_count=200) myface.launch(inline=True, show_api=False, max_threads=400)