8bitlenser/c64view/gallery.py
2026-06-14 17:43:12 -07:00

29 lines
1.1 KiB
Python

"""Render every Mode x Palette x Dither variation of an image, for the GUI's
"Explore variations" contact sheet. Kept import-light (no Qt) so it can run in
ProcessPoolExecutor worker processes.
"""
from __future__ import annotations
from . import imageprep
from .convert import MODES, render_preview, convert_image
PALETTES = ["colodore", "pepto"]
DITHERS = ["bayer", "floyd", "atkinson", "none"]
# (mode, palette, dither) for every concrete mode (auto is excluded on purpose).
COMBOS = [(m, p, d) for m in MODES for p in PALETTES for d in DITHERS]
def render_variation(args):
"""Worker entry point. ``args`` = (path, mode, palette, dither, prep_kwargs).
Returns (mode, palette, dither, error, rgb) where rgb is the displayed-
resolution (320x200) preview as a uint8 HxWx3 array.
"""
path, mode, palette, dither, prep_kwargs = args
prep = imageprep.PrepOptions(**prep_kwargs)
conv = convert_image(path, mode=mode, palette_name=palette,
dither_mode=dither, intensive=False, prep_opt=prep)
rgb = render_preview(conv, palette, scale=1)
return (mode, palette, dither, conv.error, rgb)