From ccb048a9af60004067a9f078d02c276550be7e52 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 10 Aug 2026 20:43:50 +0200 Subject: [PATCH] fix api-control Signed-off-by: Vladimir Mandic --- cli/api-control.py | 22 ++++++++++++++++++++++ extensions-builtin/sd-extension-chainner | 2 +- extensions-builtin/sdnq | 2 +- modules/api/control.py | 4 ++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/cli/api-control.py b/cli/api-control.py index 865e5b54d..a8622c36d 100755 --- a/cli/api-control.py +++ b/cli/api-control.py @@ -2,6 +2,7 @@ # example: api-control.py --prompt "anime girl" --control "Canny:Canny:1.0:0.1:0.9:/home/vlado/generative/Samples/anime1.jpg,None:Depth:0.9:0.0:1.0:/home/vlado/generative/Samples/anime1.jpg" --hires --detailer --output /tmp/anime.jpg import os import io +import sys import time import base64 import logging @@ -10,6 +11,7 @@ import requests import urllib3 from PIL import Image + sd_url = os.environ.get('SDAPI_URL', "http://127.0.0.1:7860") sd_username = os.environ.get('SDAPI_USR', None) sd_password = os.environ.get('SDAPI_PWD', None) @@ -38,6 +40,25 @@ def post(endpoint: str, dct: dict | None = None): return req.json() +def display(image: Image.Image): + """ + # pip install sixel + from sixel import converter + buf = io.BytesIO() + image.save(buf, format="PNG") + buf.seek(0) + conv = converter.SixelConverter(buf, f8bit=False, ncolor=256, fast=False) + conv.write(sys.stdout) + """ + try: + import subprocess + buf = io.BytesIO() + image.save(buf, format="PNG") + subprocess.run(["timg", "--pixelation", "sixel", "-"], input=buf.getvalue()) + except Exception: + pass + + def encode(f): image = Image.open(f) if image.mode == 'RGBA': @@ -144,6 +165,7 @@ def generate(args): # pylint: disable=redefined-outer-name if output: image.save(output) log.info(f'image saved: size={image.size} filename={output}') + display(image) if 'images' in data: get_image(data['images'], args.output) diff --git a/extensions-builtin/sd-extension-chainner b/extensions-builtin/sd-extension-chainner index 2900aab30..bd5f5a3cf 160000 --- a/extensions-builtin/sd-extension-chainner +++ b/extensions-builtin/sd-extension-chainner @@ -1 +1 @@ -Subproject commit 2900aab3026c0fae8d1ededb18bc64a400c0cadd +Subproject commit bd5f5a3cf736bc3cd687dfeea19567645927f7db diff --git a/extensions-builtin/sdnq b/extensions-builtin/sdnq index d840854e0..79a4c00d1 160000 --- a/extensions-builtin/sdnq +++ b/extensions-builtin/sdnq @@ -1 +1 @@ -Subproject commit d840854e029292e87e2fe35da89a46ec07672183 +Subproject commit 79a4c00d1b9ec77ae109fcd2f803855d69f634ef diff --git a/modules/api/control.py b/modules/api/control.py index 1c05b2c12..80e1ed428 100644 --- a/modules/api/control.py +++ b/modules/api/control.py @@ -92,6 +92,10 @@ class APIControl: args.pop('inpaint_full_res', None) args.pop('inpaint_full_res_padding', None) args.pop('inpainting_mask_invert', None) + args.pop('xyz', None) + for k, v in args.copy().items(): + if v is None: + args.pop(k, None) args['override_script_name'] = args.pop('script_name', None) args['override_script_args'] = args.pop('script_args', None) return args