From 03fd728ab049187274c7208f530eaa9755d6ae98 Mon Sep 17 00:00:00 2001 From: Sean Sube Date: Mon, 9 Jan 2023 22:58:37 -0600 Subject: [PATCH] feat(api): add params endpoint, defaults file --- api/onnx_web/serve.py | 45 +++++++++++++++++++++++---------- api/params.json | 58 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 api/params.json diff --git a/api/onnx_web/serve.py b/api/onnx_web/serve.py index f6d4c528..e558ca61 100644 --- a/api/onnx_web/serve.py +++ b/api/onnx_web/serve.py @@ -23,7 +23,9 @@ from io import BytesIO from PIL import Image from struct import pack from os import environ, makedirs, path, scandir -from typing import Tuple, Union +from typing import Any, Tuple, Union + +import json import numpy as np # defaults @@ -45,10 +47,12 @@ max_width = 512 # paths model_path = environ.get('ONNX_WEB_MODEL_PATH', '../models') output_path = environ.get('ONNX_WEB_OUTPUT_PATH', '../outputs') +params_path = environ.get('ONNX_WEB_PARAMS_PATH', './params.json') # pipeline caching available_models = [] +config_params = {} last_pipeline_instance = None last_pipeline_options = (None, None, None) last_pipeline_scheduler = None @@ -189,8 +193,15 @@ def load_models(): available_models = [f.name for f in scandir(model_path) if f.is_dir()] +def load_params(): + global config_params + with open(params_path) as f: + config_params = json.load(f) + + check_paths() load_models() +load_params() app = Flask(__name__) # routes @@ -212,6 +223,11 @@ def list_models(): return json_with_cors(available_models) +@app.route('/settings/params') +def list_params(): + return json_with_cors(config_params) + + @app.route('/settings/platforms') def list_platforms(): return json_with_cors(list(platform_providers.keys())) @@ -274,7 +290,8 @@ def img2img(): strength=strength, ).images[0] - (output_file, output_full) = make_output_path('img2img', (prompt, cfg, steps, height, width, seed)) + (output_file, output_full) = make_output_path('img2img', seed, + (prompt, cfg, negative_prompt, steps, strength, height, width)) print("img2img output: %s" % output_full) image.save(output_full) @@ -284,13 +301,13 @@ def img2img(): 'model': model, 'provider': provider, 'scheduler': scheduler.__name__, + 'seed': seed, + 'prompt': prompt, 'cfg': cfg, + 'negativePrompt': negative_prompt, 'steps': steps, 'height': default_height, 'width': default_width, - 'prompt': prompt, - 'seed': seed, - 'negativePrompt': negative_prompt, } }) @@ -314,7 +331,8 @@ def txt2img(): num_inference_steps=steps, ).images[0] - (output_file, output_full) = make_output_path('txt2img', (prompt, cfg, steps, height, width, seed)) + (output_file, output_full) = make_output_path('txt2img', + seed, (prompt, cfg, negative_prompt, steps, height, width)) print("txt2img output: %s" % output_full) image.save(output_full) @@ -324,13 +342,13 @@ def txt2img(): 'model': model, 'provider': provider, 'scheduler': scheduler.__name__, + 'seed': seed, + 'prompt': prompt, 'cfg': cfg, + 'negativePrompt': negative_prompt, 'steps': steps, 'height': height, 'width': width, - 'prompt': prompt, - 'seed': seed, - 'negativePrompt': negative_prompt, } }) @@ -364,7 +382,8 @@ def inpaint(): width=width, ).images[0] - (output_file, output_full) = make_output_path('inpaint', (prompt, cfg, steps, height, width, seed)) + (output_file, output_full) = make_output_path( + 'inpaint', (prompt, cfg, steps, height, width, seed)) print("inpaint output: %s" % output_full) image.save(output_full) @@ -374,13 +393,13 @@ def inpaint(): 'model': model, 'provider': provider, 'scheduler': scheduler.__name__, + 'seed': seed, + 'prompt': prompt, 'cfg': cfg, + 'negativePrompt': negative_prompt, 'steps': steps, 'height': default_height, 'width': default_width, - 'prompt': prompt, - 'seed': seed, - 'negativePrompt': negative_prompt, } }) diff --git a/api/params.json b/api/params.json new file mode 100644 index 00000000..ab84b3f9 --- /dev/null +++ b/api/params.json @@ -0,0 +1,58 @@ +{ + "cfg": { + "default": 6, + "min": 1, + "max": 30, + "step": 0.1 + }, + "height": { + "default": 512, + "min": 64, + "max": 512, + "step": 8 + }, + "model": { + "default": "stable-diffusion-onnx-v1-5", + "keys": [] + }, + "negativePrompt": { + "default": "", + "keys": [] + }, + "platform": { + "default": "amd", + "keys": [] + }, + "prompt": { + "default": "an astronaut eating a hamburger", + "keys": [] + }, + "scheduler": { + "default": "euler-a", + "keys": [] + }, + "steps": { + "default": 25, + "min": 1, + "max": 200, + "step": 1 + }, + "seed": { + "default": -1, + "min": -1, + "max": 4294967295, + "step": 1 + }, + "strength": { + "default": 0.5, + "min": 0, + "max": 1, + "step": 0.01 + }, + "width": { + "default": 512, + "min": 64, + "max": 512, + "step": 8 + } +} \ No newline at end of file