generart / app.py
Equityone's picture
Update app.py
2bc8286 verified
raw
history blame
3.71 kB
import gradio as gr
import os
from PIL import Image
import requests
import io
import gc
import json
from typing import Tuple, Optional, Dict, Any
import logging
from dotenv import load_dotenv
# Configuration du logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Chargement des variables d'environnement
load_dotenv()
# Styles artistiques
ART_STYLES = {
"Art Moderne": {
"prompt_prefix": "modern art style poster, professional design",
"negative_prompt": "traditional, photorealistic, cluttered, busy design"
},
"Neo Vintage": {
"prompt_prefix": "vintage style advertising poster, retro design",
"negative_prompt": "modern, digital, contemporary style"
},
"Pop Art": {
"prompt_prefix": "pop art style poster, bold design",
"negative_prompt": "subtle, realistic, traditional art"
},
"Minimaliste": {
"prompt_prefix": "minimalist design poster, clean composition",
"negative_prompt": "complex, detailed, ornate, busy"
}
}
# Configuration de l'API
API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-xl-base-1.0"
def generate_image(params: Dict[str, Any]) -> Tuple[Optional[Image.Image], str]:
"""Génère une image via l'API Hugging Face"""
try:
headers = {"Authorization": f"Bearer {os.getenv('HUGGINGFACE_TOKEN')}"}
style = ART_STYLES[params["style"]]
prompt = f"{style['prompt_prefix']}, {params['subject']}"
# Configuration de la requête
payload = {
"inputs": prompt,
"parameters": {
"negative_prompt": style["negative_prompt"],
"num_inference_steps": 30,
"guidance_scale": 7.5,
"width": 768,
"height": 768
}
}
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code == 200:
image = Image.open(io.BytesIO(response.content))
return image, "✨ Création réussie!"
else:
return None, f"⚠️ Erreur {response.status_code}: {response.text}"
except Exception as e:
logger.error(f"Erreur: {str(e)}")
return None, f"⚠️ Erreur: {str(e)}"
def create_interface():
"""Crée l'interface Gradio"""
with gr.Blocks() as app:
gr.HTML("""
<h1 style='text-align: center'>🎨 Generart</h1>
<p style='text-align: center'>Créez des affiches artistiques avec l'IA</p>
""")
with gr.Row():
with gr.Column():
style = gr.Dropdown(
choices=list(ART_STYLES.keys()),
value="Neo Vintage",
label="Style artistique"
)
subject = gr.Textbox(
label="Description",
placeholder="Décrivez votre vision..."
)
generate_btn = gr.Button("✨ Générer")
with gr.Column():
image_output = gr.Image(label="Résultat")
status = gr.Textbox(label="Statut")
def on_generate(style_val, subject_val):
return generate_image({
"style": style_val,
"subject": subject_val
})
generate_btn.click(
fn=on_generate,
inputs=[style, subject],
outputs=[image_output, status]
)
return app
if __name__ == "__main__":
app = create_interface()
app.launch()