Spaces:
Running
Running
# -------------------------------------------------------- | |
# InternVL | |
# Copyright (c) 2024 OpenGVLab | |
# Licensed under The MIT License [see LICENSE for details] | |
# -------------------------------------------------------- | |
from io import BytesIO | |
import torch | |
from diffusers import StableDiffusion3Pipeline | |
from fastapi import FastAPI | |
from fastapi.responses import Response | |
from pydantic import BaseModel | |
# Initialize pipeline | |
pipe = StableDiffusion3Pipeline.from_pretrained('stabilityai/stable-diffusion-3-medium-diffusers', | |
torch_dtype=torch.float16) | |
pipe = pipe.to('cuda') | |
# Create a FastAPI application | |
app = FastAPI() | |
# Define the input data model | |
class CaptionRequest(BaseModel): | |
caption: str | |
# Defining API endpoints | |
async def generate_image(request: CaptionRequest): | |
caption = request.caption | |
negative_prompt = 'blurry, low resolution, artifacts, unnatural, poorly drawn, bad anatomy, out of focus' | |
image = pipe( | |
caption, | |
negative_prompt=negative_prompt, | |
num_inference_steps=20, | |
guidance_scale=7.0 | |
).images[0] | |
# Converts an image to a byte stream | |
img_byte_arr = BytesIO() | |
image.save(img_byte_arr, format='PNG') | |
img_byte_arr = img_byte_arr.getvalue() | |
return Response(content=img_byte_arr, media_type='image/png') | |
# Run the Uvicorn server | |
if __name__ == '__main__': | |
import argparse | |
import uvicorn | |
parser = argparse.ArgumentParser() | |
parser.add_argument('--port', default=11005, type=int) | |
args = parser.parse_args() | |
uvicorn.run(app, host='0.0.0.0', port=args.port) | |