ALTER
A local-first image and document workbench for Windows and Android. Convert, resize, compress, clean metadata, OCR, open password-protected PDFs you own, and run reusable plugins.
Off the Rails — 2026ALTER is the replacement for a long-running internal image tool that had grown into a pile of scripts. The goal was one shared core, two real platforms, and no cloud dependency.
The app handles conversion, resize, compression, upscaling, watermarking, animated GIFs, OCR, metadata, duplicate detection, protected PDF access for files you own, ZIP extraction, video frames, and video conversion. The metadata editor is lossless: it rewrites only the metadata container and leaves the JPEG pixel stream byte-for-byte untouched. A manifest-based plugin system lets the same recipe run on Windows and Android without executing arbitrary code.
The core is C#/.NET 8 with Avalonia, a UI-free engine, and thin Windows and Android heads. The Windows build is a self-contained single-file executable; the Android build uses the system file picker and a storage bridge so a batch can run on a phone without a desktop.
The brief
The old tool worked, but it was a Python app with a separate UI stack, a licensing problem in the image library, and no real path to Android. Every new format or tool added another dependency and another place for behavior to drift.
The approach
Move the image, metadata, document, archive, video, OCR, and plugin logic into one tested core. Keep the UI in a shared Avalonia shell with thin platform heads. Use permissive libraries, write the EXIF/TIFF round-trip ourselves, and make plugins declarative recipes instead of code. The same feature set then ships on Windows and Android.
The outcome
One codebase, two platforms, a self-contained Windows executable, a signed Android build, and a cleaner base for the next tools. ALTER is still early, but it is a real product foundation rather than a folder of scripts.
2
platforms, one core
9
image tools in one shell
15
core tests passing


Next project
CODEX
Have a brief like this?
Bring us the messy version. We are good with messy.
