Pinhole

A private AI image generator that runs on your own computer. Pick a model, type, Generate.

type
App
when
Sep – Oct 2026
role
Solo — design, engineering, release
status
v1.1.3 · feature-complete
~/code/pinhole
Pinhole's Create tab with a prompt for an alpine lake at dawn and the generated image beside it
merged pull requests
231
Rust crates in the workspace
8
Rust tests
~800
first commit to v1.0.0
3 days

Local image generation is powerful and miserable. The usual tools hand you a node graph, a Python environment and a wiki. A pinhole is the simplest possible camera — so Pinhole is the simplest possible image generator: pick a model, type what you want, press Generate.

What it does

  • Create, edit and describe images with models that run entirely on your machine — no accounts, no cloud, no telemetry.
  • Knows your hardware. It detects the GPU (NVIDIA, AMD, Intel, or CPU fallback) and recommends models that actually fit in VRAM.
  • Built-in CivitAI browser with Safe mode on by default.
  • On-device safety checks — word lists plus an ONNX image classifier — so the guardrails never phone home either.

How it’s built

The app is a Tauri 2 shell around a Rust workspace of eight crates — registry, net, store, hardware, engine, catalog, check and core — with a React 19 + TypeScript UI. Generation runs through stable-diffusion.cpp and descriptions through llama.cpp, both downloaded as pinned, SHA-256-verified binaries.

Shipping it properly

Every merge has to pass a local check — the Rust and frontend test suites, an offline-mode test and a privacy “sentinel” scan that fails if anything tries to talk to the network when it shouldn’t. A full CI run goes further: a real image-generation smoke test on Windows and Ubuntu and a WebDriver end-to-end suite. Releases go out as an NSIS installer, a portable zip, an AppImage and a .deb, with checksums signed by minisign.

The first commit landed on 28 September 2026. v1.0.0 shipped on 1 October. 877 commits and 231 merged pull requests later it’s at v1.1.3 — built with AI agents as teammates and me as the one who says no.

esc
↑↓ move ↵ open t next theme 1–5 workspaces jk windows