Skip to content
← Work

Desktop & tooling

Skera

A viewer that edits, without ever leaving the picture.

Qt / C++libvipsRAWDesktopNexylius
Role
Sole author — C++ application, decode engine and cache
Period
2026
Status
Live

The problem

Everything that can open a camera RAW file wants to own the library first: import the shoot, build a catalog, work inside it from then on. That is a fair trade while editing and a bad one while simply looking at what you shot. The alternative — the operating system's own viewer — stalls on a full-resolution frame and cannot read RAW at all.

The approach

Skera keeps the viewing and drops the library. It points at a directory on disk, sorts it the way a file browser would, and starts decoding — no import, no catalog, no database. It can adjust and save a photo too — White Balance, Tone, Presence, an eight-channel HSL panel — but every edit stays a live preview until Save or Save a Copy; nothing on disk changes on its own. The speed is architectural: decoded frames live in a cache budgeted in bytes, decoding runs off the UI thread in priority order, and the neighbouring images are read before they are asked for.

What it does

RAW without an import step

Sixteen RAW formats across ten manufacturers — Nikon, Canon, Sony, Fujifilm, Olympus, Panasonic, Pentax, Adobe, Sigma and Hasselblad — decoded through libvips and libraw on macOS and Linux. The Windows build ships without that decoder and handles the standard formats only.

White Balance, Tone, Presence and Color

A collapsible panel — Temp/Tint, Exposure/Contrast/Highlights/Shadows/Whites/Blacks, Vibrance/Saturation, and an eight-channel HSL group — previews live with no re-decode per drag. A rotation-only edit rewrites just the EXIF tag, no re-encode; Save a Copy never touches the original.

The whole EXIF record

Camera body, lens, exposure, ISO and GPS, read locally through exiv2 on all three platforms and shown one keypress away.

Side-by-side compare

Pin one image as A and sweep B beside it with zoom and pan linked across both panes. Both are pinned in the cache, so neither is evicted mid-comparison.

A cache measured in bytes

An LRU cache budgeted at 768 MB of resident decoded pixels rather than a file count, so a single 60-megapixel RAW cannot quietly evict forty JPEGs. Queued decodes are dropped and running ones abort when you move past them.

Image-first by default

The toolbar and filmstrip float over the photograph and hide on a keypress, leaving nothing but the picture on true black. Every action has a key.