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
This commit is contained in:
Dr.Lt.Data 2023-06-04 19:48:38 +09:00
parent ea7f84b78d
commit 1190d1e758
2 changed files with 18 additions and 4 deletions

View File

@ -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:

View File

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