tejani/TextureAPI
0
1from fastapi import FastAPI, HTTPException2from pydantic import BaseModel3import requests4import random5import os6from fastapi.responses import Response7 8app = FastAPI()9 10API_URL = f'https://api-inference.huggingface.co/models/{os.getenv("HF_MODEL")}'11headers = {'Authorization': f'Bearer {os.getenv("HF_TOKEN")}'}12timeout = 10013 14class ImageRequest(BaseModel):15 prompt: str16 negative_prompt: str = "(deformed, distorted, disfigured), poorly drawn, bad anatomy"17 steps: int = 418 cfg_scale: float = 7.019 sampler: str = "DPM++ 2M Karras"20 seed: int = -121 strength: float = 0.722 23def query(prompt: str, negative_prompt: str, steps: int, cfg_scale: float, 24 sampler: str, seed: int, strength: float):25 if not prompt:26 raise HTTPException(status_code=400, detail="Prompt is required")27 28 payload = {29 "inputs": prompt,30 "is_negative": bool(negative_prompt),31 "steps": steps,32 "cfg_scale": cfg_scale,33 "seed": seed if seed != -1 else random.randint(1, 1000000000),34 "strength": strength35 }36 37 if negative_prompt:38 payload["negative_prompt"] = negative_prompt39 40 response = requests.post(API_URL, headers=headers, json=payload, timeout=timeout)41 42 if response.status_code != 200:43 raise HTTPException(status_code=response.status_code, detail=response.text)44 45 return response.content46 47@app.post("/generate")48async def generate_image(request: ImageRequest):49 try:50 raw_data = query(51 prompt=request.prompt,52 negative_prompt=request.negative_prompt,53 steps=request.steps,54 cfg_scale=request.cfg_scale,55 sampler=request.sampler,56 seed=request.seed,57 strength=request.strength58 )59 return Response(content=raw_data, media_type="application/octet-stream")60 except HTTPException as e:61 raise e62 except Exception as e:63 raise HTTPException(status_code=500, detail=str(e))