import uvicorn from fastapi import FastAPI, HTTPException from fastapi.staticfiles import StaticFiles from fastapi.responses import FileResponse from pydantic import BaseModel import requests import os import uuid app = FastAPI() # Token HF récupéré depuis les variables d'environnement (Secrets) HF_TOKEN = os.environ.get("HF_TOKEN") # NOUVELLE URL (router.huggingface.co) API_URL = "https://router.huggingface.co/hf-inference/models/stabilityai/stable-diffusion-xl-base-1.0" class ImageRequest(BaseModel): prompt: str @app.post("/generate") async def generate_image(request: ImageRequest): print(f"🎨 Génération (HF API) : {request.prompt}") if not HF_TOKEN: raise HTTPException(status_code=500, detail="Token HF manquant. Configurez le secret HF_TOKEN.") headers = {"Authorization": f"Bearer {HF_TOKEN}"} payload = {"inputs": request.prompt} try: response = requests.post(API_URL, headers=headers, json=payload) if response.status_code != 200: # On logue le contenu complet pour debug print(f"Erreur API: {response.text}") raise Exception(f"Erreur API HF ({response.status_code}): {response.text}") # L'API retourne l'image binaire image_bytes = response.content # Sauvegarde locale pour servir l'image filename = f"gen_{uuid.uuid4()}.png" with open(filename, "wb") as f: f.write(image_bytes) # URL absolue pour le frontend return {"image_url": f"/{filename}"} except Exception as e: print(f"❌ Erreur : {str(e)}") raise HTTPException(status_code=500, detail=str(e)) @app.get("/") async def read_index(): return FileResponse('index.html') app.mount("/", StaticFiles(directory=".", html=True), name="static") if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=7860)