File size: 3,115 Bytes
7e90676
 
6af34f3
 
 
7e90676
6af34f3
 
7e90676
6af34f3
 
7e90676
6af34f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7e90676
 
 
 
6af34f3
7e90676
 
 
6af34f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bc6f9ae
 
6af34f3
a12f055
6af34f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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()