ChemApi / main.py
ka1kuk's picture
Update main.py
8d513ea verified
raw
history blame
1.96 kB
from fastapi import FastAPI, HTTPException
from fastapi.responses import StreamingResponse
import requests
from urllib.parse import quote
import asyncio
from io import BytesIO
import os
url = os.environ.get("url")
app = FastAPI()
def create_job(prompt, model, sampler, seed, neg):
if model is None:
model = 'Realistic_Vision_V5.0.safetensors [614d1063]'
if sampler is None:
sampler = 'DPM++ 2M Karras'
if seed is None:
seed = '-1'
if neg is None:
neg = "(long list of negative prompts removed for brevity)"
url = f'https://api.{url}.com/generate'
params = {
'new': 'true',
'prompt': quote(prompt),
'model': model,
'negative_prompt': neg,
'steps': '100',
'cfg': '9.5',
'seed': seed,
'sampler': sampler,
'upscale': 'True',
'aspect_ratio': 'square'
}
response = requests.get(url, params=params)
response.raise_for_status()
return response.json()['job']
@app.get("/generate_image")
async def generate_image(prompt: str, model: str = None, sampler: str = None, seed: str = None, neg: str = None):
job_id = create_job(prompt, model, sampler, seed, neg)
url = f'https://api.{url}.com/job/{job_id}'
headers = {'accept': '*/*'}
while True:
response = requests.get(url=url, headers=headers)
response.raise_for_status()
job_response = response.json()
if job_response['status'] == 'succeeded':
image_url = f'https://images.{url}.xyz/{job_id}.png'
image_response = requests.get(image_url)
image_response.raise_for_status()
image = BytesIO(image_response.content)
return StreamingResponse(image, media_type='image/png')
await asyncio.sleep(2) # Add a delay to prevent excessive requests
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000, debug=True)