File size: 1,933 Bytes
1bd46f0 ea96bdc 1bd46f0 ea96bdc 1bd46f0 d3f36d7 1bd46f0 d3f36d7 ea96bdc 7a6bdbf d3f36d7 1bd46f0 ea96bdc 4a0f1d6 ea96bdc 1bd46f0 ea96bdc 4a0f1d6 ea96bdc 1bd46f0 ea96bdc 7a6bdbf ea96bdc 1bd46f0 ea96bdc d3f36d7 1bd46f0 ea96bdc 1bd46f0 d3f36d7 ea96bdc 1bd46f0 d3f36d7 1bd46f0 |
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 |
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)
|