Equityone's picture
Update app.py
1d72d58 verified
raw
history blame
5.42 kB
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()