CleanFrame
A personal home screen for Samsung The Frame. A starting point to fork and adapt.
Identify batches of bird photos, organize outings, and build a connected life list with WingDex. Free on web and iPhone. No account needed to get started.
LifestyleGitHub @jlianOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Quickly ID all your bird pics
Translation pending
Loading the full README.
Read the full README ↗A photo-first bird identification and life list tracker. Upload your bird photos, identify the species on your device, and build your personal WingDex over time.
WingDex is for reverse birding: people who take photos first and identify species later. Instead of checklists and field guides, you upload photos you already took, and the app identifies the birds. You just confirm with a tap.
Photos never leave your device. Identification runs entirely in the browser, or natively on iOS. There is no inference server, so there is nothing to upload a photo to.
Drop a whole day's photos at once and the batch wizard clusters them into outings by time and location, identifies each bird, and lets you confirm the lot in one pass. Species link back to the outings you saw them on, and outings link forward to the species, so you can cross-reference either direction.
ios/Accounts without a provider-supplied display name receive a stored bird-themed name. Blank display-name edits are rejected; web and iOS share this server policy.
The first identification downloads about 53 MB of model files, once. After that everything is local and works offline.
The web app tries browser-supported images first, then offers embedded JPEG preview support for classic TIFF-based files, independent of camera brand or extension. It reads JPEG references and self-contained RGB/YCbCr JPEG preview strips, not RAW sensor data. Previews stay local and supply display, cropping, and identification; metadata and duplicate detection use the received file. This is not universal RAW support: unsupported containers (such as CR3 or RAF), vendor-specific preview layouts, and files without a decodable preview require a JPEG export. Failed photos are reported individually without blocking other photos or another selection. The iOS app uses the operating system's RAW decoder.
WingCLIP-0.3 is a 39M-parameter image encoder distilled from BioCLIP-2 via WingCLIP-0.1. Small enough to download once and run on a phone.
Vision alone struggles to separate lookalike species, so candidates are reranked against an empirical prior over what has actually been reported in that map cell in that month. Some pairs are hard to tell apart from pixels and trivial to tell apart from geography. With that rerank the pipeline reaches 95.0 percent top-1 on a 3,322-photo held-out split.
The same model, priors, and preprocessing ship on both platforms, and a golden-vector suite pins the two implementations to each other.
| Layer | Technology |
|---|---|
| Platform | Cloudflare Workers, D1 (SQLite) |
| Frontend | React 19, TypeScript, Vite 8 |
| Styling | Tailwind CSS 4, Radix UI primitives, Phosphor Icons |
| Auth | better-auth (anonymous, passkeys, GitHub/Google/Apple OAuth) |
| Identification | WingCLIP-0.3 via ONNX Runtime Web (browser) and Core ML (iOS) |
| Geocoding | Reverse (coordinate to place name) from a local OpenStreetMap PMTiles archive in R2; forward place search proxied to Geoapify |
| Bird imagery | Wikipedia REST API |
| Testing | Vitest (unit), Playwright (e2e), XCTest (iOS) |
| iOS | Swift, XcodeGen |
This is the beginning of the README. Read the rest at the original. Read the full README ↗