import gradio as gr import torch from diffusers import StableDiffusionPipeline import PIL import io # --- Configuration du modèle --- MODEL_ID = "Dipl0/pepe-diffuser" # Détection de l'appareil (GPU si disponible, sinon CPU) device = "cuda" if torch.cuda.is_available() else "cpu" # Chargement du pipeline Stable Diffusion # Utilisation de torch_dtype=torch.float16 pour la VRAM si vous avez une carte GPU compatible # Sinon, retirez-le ou changez-le pour torch.float32 pour le CPU ou les GPU moins performantes try: pipe = StableDiffusionPipeline.from_pretrained(MODEL_ID, torch_dtype=torch.float16) pipe = pipe.to(device) except Exception as e: print(f"Avertissement : Chargement en float16 a échoué ({e}). Tentative en float32.") pipe = StableDiffusionPipeline.from_pretrained(MODEL_ID, torch_dtype=torch.float32) pipe = pipe.to(device) # --- Fonction de génération d'image --- def generate_image(prompt: str, negative_prompt: str, num_inference_steps: int, guidance_scale: float, seed: int) -> PIL.Image.Image: """ Génère une image à partir du prompt en utilisant le modèle Dipl0/pepe-diffuser. """ # Configuration du générateur pour la reproductibilité si un seed est fourni generator = None if seed > 0: generator = torch.Generator(device=device).manual_seed(seed) # Exécution du pipeline image = pipe( prompt=prompt, negative_prompt=negative_prompt, num_inference_steps=num_inference_steps, guidance_scale=guidance_scale, generator=generator, ).images[0] return image # --- Création de l'interface Gradio --- # Définition des composants d'entrée prompt_input = gr.Textbox( label="Prompt (Description de l'image de Pepe)", placeholder="pepe the frog smoking a cigar, digital art, high resolution", lines=2 ) negative_prompt_input = gr.Textbox( label="Negative Prompt (Ce que vous ne voulez PAS dans l'image)", placeholder="blurry, low quality, deformed, text, watermark", lines=2 ) steps_slider = gr.Slider( minimum=1, maximum=10, step=5, value=1, label="Nombre d'étapes d'inférence (plus = meilleure qualité mais plus long)" ) guidance_slider = gr.Slider( minimum=1.0, maximum=15.0, step=0.5, value=7.5, label="Échelle de Guidance (plus = l'image suit plus le prompt)" ) seed_input = gr.Number( label="Seed (Graine) pour la reproductibilité (0 pour aléatoire)", value=0, minimum=0, step=1 ) # Définition du composant de sortie image_output = gr.Image( label="Image Générée", type="pil", height=512, width=512 ) # Création de l'interface complète gr.Interface( fn=generate_image, inputs=[ prompt_input, negative_prompt_input, steps_slider, guidance_slider, seed_input ], outputs=image_output, title="🐸 Pepe Diffuser - Text-to-Image", description=f"Générez des images personnalisées de Pepe la grenouille en utilisant le modèle Hugging Face **{MODEL_ID}**.", allow_flagging="never", ).launch()