diff options
author | AUTOMATIC <16777216c@gmail.com> | 2022-10-19 05:44:51 +0000 |
---|---|---|
committer | AUTOMATIC <16777216c@gmail.com> | 2022-10-19 05:44:51 +0000 |
commit | 5daf9cbb98cc13b5e4b74cd01ffa5146b5745bc9 (patch) | |
tree | ab6e0eaff740eac1439b71db3dd675427220bd0b /modules/api/api.py | |
parent | 10aca1ca3e81e69e08f556a500c3dc603451429b (diff) | |
parent | 0f0d6ab8e06898ce066251fc769fe14e77e98ced (diff) | |
download | stable-diffusion-webui-gfx803-5daf9cbb98cc13b5e4b74cd01ffa5146b5745bc9.tar.gz stable-diffusion-webui-gfx803-5daf9cbb98cc13b5e4b74cd01ffa5146b5745bc9.tar.bz2 stable-diffusion-webui-gfx803-5daf9cbb98cc13b5e4b74cd01ffa5146b5745bc9.zip |
Merge remote-tracking branch 'origin/api'
Diffstat (limited to 'modules/api/api.py')
-rw-r--r-- | modules/api/api.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/modules/api/api.py b/modules/api/api.py new file mode 100644 index 00000000..5b0c934e --- /dev/null +++ b/modules/api/api.py @@ -0,0 +1,68 @@ +from modules.api.processing import StableDiffusionProcessingAPI +from modules.processing import StableDiffusionProcessingTxt2Img, process_images +from modules.sd_samplers import all_samplers +from modules.extras import run_pnginfo +import modules.shared as shared +import uvicorn +from fastapi import Body, APIRouter, HTTPException +from fastapi.responses import JSONResponse +from pydantic import BaseModel, Field, Json +import json +import io +import base64 + +sampler_to_index = lambda name: next(filter(lambda row: name.lower() == row[1].name.lower(), enumerate(all_samplers)), None) + +class TextToImageResponse(BaseModel): + images: list[str] = Field(default=None, title="Image", description="The generated image in base64 format.") + parameters: Json + info: Json + + +class Api: + def __init__(self, app, queue_lock): + self.router = APIRouter() + self.app = app + self.queue_lock = queue_lock + self.app.add_api_route("/sdapi/v1/txt2img", self.text2imgapi, methods=["POST"]) + + def text2imgapi(self, txt2imgreq: StableDiffusionProcessingAPI ): + sampler_index = sampler_to_index(txt2imgreq.sampler_index) + + if sampler_index is None: + raise HTTPException(status_code=404, detail="Sampler not found") + + populate = txt2imgreq.copy(update={ # Override __init__ params + "sd_model": shared.sd_model, + "sampler_index": sampler_index[0], + "do_not_save_samples": True, + "do_not_save_grid": True + } + ) + p = StableDiffusionProcessingTxt2Img(**vars(populate)) + # Override object param + with self.queue_lock: + processed = process_images(p) + + b64images = [] + for i in processed.images: + buffer = io.BytesIO() + i.save(buffer, format="png") + b64images.append(base64.b64encode(buffer.getvalue())) + + return TextToImageResponse(images=b64images, parameters=json.dumps(vars(txt2imgreq)), info=json.dumps(processed.info)) + + + + def img2imgapi(self): + raise NotImplementedError + + def extrasapi(self): + raise NotImplementedError + + def pnginfoapi(self): + raise NotImplementedError + + def launch(self, server_name, port): + self.app.include_router(self.router) + uvicorn.run(self.app, host=server_name, port=port) |