From 1190d1e75831e7b5b77dc2e53359f44c14420c94 Mon Sep 17 00:00:00 2001 From: "Dr.Lt.Data" Date: Sun, 4 Jun 2023 19:48:38 +0900 Subject: [PATCH] Support advanced preview_format option. - grayscale option for visual debugging - quality option for aggressive reducing L?;format;quality? ex) jpeg => rgb, jpeg, quality 90 L;webp;80 => grayscale, webp, quality 80 L;png => grayscale, png, quality 90 webp;50 => rgb, webp, quality 50 --- server.py | 18 +++++++++++++++--- web/scripts/app.js | 4 +++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/server.py b/server.py index a23d5fa52..b0dd33828 100644 --- a/server.py +++ b/server.py @@ -219,12 +219,24 @@ class PromptServer(): if os.path.isfile(file): if 'preview' in request.rel_url.query: with Image.open(file) as img: - img = img.convert("RGB") # jpeg doesn't support RGBA + preview_info = request.rel_url.query['preview'].split(';') + + if preview_info[0] == "L" or preview_info[0] == "l": + img = img.convert("L") + image_format = preview_info[1] + else: + img = img.convert("RGB") # jpeg doesn't support RGBA + image_format = preview_info[0] + + quality = 90 + if preview_info[-1].isdigit(): + quality = int(preview_info[-1]) + buffer = BytesIO() - img.save(buffer, format=request.rel_url.query['preview'], optimize=True, quality=90) + img.save(buffer, format=image_format, optimize=True, quality=quality) buffer.seek(0) - return web.Response(body=buffer.read(), content_type=f'image/{request.rel_url.query}', + return web.Response(body=buffer.read(), content_type=f'image/{image_format}', headers={"Content-Disposition": f"filename=\"{filename}\""}) if 'channel' not in request.rel_url.query: diff --git a/web/scripts/app.js b/web/scripts/app.js index 7d49d5e75..ca6fc4425 100644 --- a/web/scripts/app.js +++ b/web/scripts/app.js @@ -54,7 +54,9 @@ export class ComfyApp { * file format for preview * @type {string} */ - this.preview_format = "webp"; + this.preview_format = "webp"; // L;webp;50 -> grayscale, webp, quality 50 + // jpeg;80 -> rgb, jpeg, quality 80 + // png -> rgb, png, default quality(=90) } static isImageNode(node) {