Spaces:
Sleeping
Sleeping
import gradio as gr | |
import random | |
import time | |
from diffusers import StableDiffusionPipeline | |
import torch | |
from PIL import Image | |
import io | |
# Styles disponibles | |
STYLES = { | |
"signage": "Signalétique Professionnelle", | |
"poster": "Affiche Artistique", | |
"silhouette": "Silhouette Décorative" | |
} | |
# Formats disponibles | |
FORMATS = ["A4", "A3", "A2", "A1"] | |
# Matériaux disponibles | |
MATERIALS = ["Lisse", "Ondulé", "Kraft"] | |
# Suggestions de prompts par style | |
PROMPT_SUGGESTIONS = { | |
"signage": [ | |
"Panneau directionnel moderne en carton recyclé, style minimaliste", | |
"Présentoir écologique pour boutique, motifs naturels", | |
"Signalétique murale en carton kraft, design épuré" | |
], | |
"poster": [ | |
"Affiche artistique sur carton texturé, thème environnemental", | |
"Poster graphique moderne, motifs géométriques en relief", | |
"Design abstrait sur carton ondulé, couleurs naturelles" | |
], | |
"silhouette": [ | |
"Découpe décorative florale en carton, style organique", | |
"Silhouette architecturale moderne en carton recyclé", | |
"Motif géométrique découpé, effet d'ombre et lumière" | |
] | |
} | |
def generate_image(prompt, style, format_size, material): | |
""" | |
Génération d'image avec Stable Diffusion | |
""" | |
try: | |
# Construction du prompt enrichi | |
style_prompts = { | |
"signage": "professional signage, eco-friendly cardboard material, minimalist design", | |
"poster": "artistic poster, recycled cardboard texture, creative design", | |
"silhouette": "decorative silhouette, cardboard cutout, elegant design" | |
} | |
# Enrichir le prompt avec le style et le matériau | |
enhanced_prompt = f"{prompt}, {style_prompts[style]}, {material} cardboard material, sustainable design, high quality, detailed" | |
# Prompts négatifs pour améliorer la qualité | |
negative_prompt = "low quality, blurry, bad anatomy, ugly, distorted, pixelated" | |
# Initialiser le pipeline | |
model_id = "runwayml/stable-diffusion-v1-5" | |
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float32) | |
# Générer l'image | |
image = pipe( | |
prompt=enhanced_prompt, | |
negative_prompt=negative_prompt, | |
num_inference_steps=30, | |
guidance_scale=7.5 | |
).images[0] | |
return image | |
except Exception as e: | |
return f"Erreur lors de la génération : {str(e)}" | |
def update_suggestions(style): | |
""" | |
Mise à jour des suggestions de prompts selon le style | |
""" | |
return gr.Dropdown(choices=PROMPT_SUGGESTIONS.get(style, [])) | |
def get_example_prompt(style): | |
""" | |
Obtenir un prompt exemple du style sélectionné | |
""" | |
suggestions = PROMPT_SUGGESTIONS.get(style, []) | |
return random.choice(suggestions) if suggestions else "" | |
with gr.Blocks(css="footer {display: none}") as demo: | |
gr.Markdown( | |
""" | |
# 🎨 Equity Creation Studio | |
### Studio de Design Éco-responsable | |
Transformez vos idées en créations durables avec notre générateur d'images IA | |
""" | |
) | |
with gr.Row(): | |
# Panneau de gauche - Contrôles | |
with gr.Column(scale=1): | |
# Section Style | |
style = gr.Radio( | |
choices=list(STYLES.keys()), | |
value="signage", | |
label="Style de Création", | |
info="Choisissez le type de design souhaité" | |
) | |
# Section Format | |
format_size = gr.Radio( | |
choices=FORMATS, | |
value="A4", | |
label="Format", | |
info="Sélectionnez la taille de votre création" | |
) | |
# Section Matériau | |
material = gr.Radio( | |
choices=MATERIALS, | |
value="Lisse", | |
label="Type de Carton", | |
info="Choisissez votre matériau" | |
) | |
# Section Prompt | |
prompt = gr.Textbox( | |
lines=3, | |
label="Description", | |
placeholder="Décrivez votre vision..." | |
) | |
# Suggestions de prompts | |
suggestions = gr.Dropdown( | |
choices=PROMPT_SUGGESTIONS["signage"], | |
label="Suggestions de prompts", | |
info="Sélectionnez une suggestion ou écrivez votre propre description" | |
) | |
# Bouton de génération | |
generate_btn = gr.Button("🪄 Générer", variant="primary") | |
# Panneau de droite - Prévisualisation | |
with gr.Column(scale=2): | |
output = gr.Image(label="Image générée") | |
# Interactions | |
style.change( | |
fn=update_suggestions, | |
inputs=[style], | |
outputs=[suggestions] | |
) | |
suggestions.change( | |
fn=lambda x: x, | |
inputs=[suggestions], | |
outputs=[prompt] | |
) | |
generate_btn.click( | |
fn=generate_image, | |
inputs=[prompt, style, format_size, material], | |
outputs=[output] | |
) | |
gr.Markdown( | |
""" | |
### 🌿 Design Éco-responsable | |
Equity Creation Studio transforme vos déchets carton en œuvres d'art | |
""" | |
) | |
# Lancement de l'interface | |
demo.launch() |