1.00
v1 is a raw win32 API app with an entirely custom-drawn UI. unlike old version which was purely a GUI shell that calls out its external core
, v1 embeds the optimization pipeline directly — so mostly standalone

it would use multithreading with a dedicated function and an async inspection routine. it would let you apply transformations to files through a built-in viewer, then remembers exactly what you did — each file keeps its own saved set of transformations, independent of all the others, and still be able to run them as a batch
viewer

pinga has now a slider to compare the original against the optimized version side by side. A set of keyboard shortcuts keeps you in flow: F1/F2 flip instantly between the original and the optimized image, F3/F4 reveal the raw RGB pixels or the alpha channel on their own, F5 shows the final output, and F9 restores the image to its initial state
![]()
it displays the image with adjustable zoom (mouse wheel, automatic fit-to-window via fit zoom
), a pixel grid shown automatically past a certain zoom level — pixel-art editor style rendering. beyond that, the viewer also lets you edit pixels directly, giving you hands-on control over the image itself
lossy compression

- auto — analyses the source image (grayscale content, transparency, color count, flat vs. gradient vs. picture vs. text regions) to classify it, then automatically delegates to either the palettizer (for palette-friendly, flat-color images) or the filter method (for photographic/gradient images) — the user does not pick a method, pinga picks it based on image content
- filter — runs a predicter pass that reworks the PNG filter/prediction data at a strength driven by the quality percentage, trading fidelity for a smaller residual stream without reducing the number of colors
- palettizer — converts the image to an indexed palette: quality maps to the dithering strength while the number of colors would be editable through a dedicated action (and window)
these features stay hidden by default and only appear once user have explicitly turned them on in the settings
- rdo — rate-distortion optimization passes the quality value (1–100) directly to an rdo encoder that adjusts pixel values to make the subsequent deflate compression more efficient
- near-lossless — runs a
quantizer
pass driven by the quality percentage that nudges pixel values toward more compressible patterns while staying visually close to the original - color quantizer — palette-reduction mode where the user directly sets the target color count (257 to 8192) and a dithering strength, rather than deriving them from the quality slider, giving finer control over the palette/size trade-off
- denoiser — applies a noise-reduction pass first then re-runs the filter/predicter pass on the denoised result — useful for photographic images where noise inflates the compressed size
- perceptual space (OKLab) for both clustering and dithering distance
- multistart k-means with weighted centroids initialized from priority-based seeding (population + local density)
- exact kd-tree nearest-neighbor for both clustering assignment and dithering
- alpha as a first-class 4th distance axis with adaptive weighting based on image transparency complexity
- multithreaded k-means and pixel-mapping passes
- alpha — tools that operate on the image's transparency channel
- add — reconstructs an alpha channel from a flat-colored background, using one of two methods
- color to alpha — picks a single key color and derives per-pixel transparency from how far each pixel's RGB deviates from it, then unmixes that color back out of the remaining RGB
- blend — an alternative estimate that fuses a softened luminance threshold (blurred for progressive, non-jagged edges) with the same color-based estimate, weighted by local saturation
- remove — discards the alpha channel entirely, flattening the image back to fully opaque
- edges — cleans up color fringing at the transparency boundary: for partially transparent pixels it re-blends the underlying color against the chosen background color in proportion to opacity, removing the halo left by premultiplication
- clean — any pixel whose alpha falls below a chosen threshold is reset to a single flat RGBA value, wiping out faint transparency noise
- add — reconstructs an alpha channel from a flat-colored background, using one of two methods
- rotate — rotates the image
- grayscale — converts the image to grayscale, discarding color information
- original — keeps the image at its native, unresized dimensions
- % — scales the image proportionally to a chosen percentage of its original size
- px — scales the image so its longest side matches a chosen pixel value, picked from a preset list that adjusts itself to the image's current size
- auto-crop — automatically trims away uniform, empty border rows and columns around the actual content
- canvas — resizes the canvas itself independently of the image content, padding or cropping around it while anchoring the existing pixels to a chosen position
palettizer and color quantizer
mask


a mask lets you protect sensitive areas of the image, shielding them from the lossy process so they are less affected — or left completely untouched — while the rest of the image is optimized

you can draw those sensitive zones yourself, giving you full manual control over exactly which parts of the image deserve extra protection
transforms

resize

pending...