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) {