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)