Stop Uploading Photos to the Cloud: Lap Is the Offline AI Manager You Need
Your photos are everywhere. And nowhere you actually control.
Every selfie, every sunset, every blurry concert shot—you handed them to a server farm you can't see, governed by terms of service you didn't read. Then the subscription price doubled. Then the "unlimited" plan got capped. Then you tried searching for "that red jacket from Prague 2019" and got 47 irrelevant results because the cloud AI can't understand context.
What if I told you there's a radical alternative? A photo manager that runs entirely on your machine, processes AI search locally without phoning home, and handles libraries of 100,000+ files without breaking a sweat?
Meet Lap—the open-source, offline-first photo manager that top privacy-conscious developers are quietly switching to. No forced uploads. No recurring fees. No surveillance capitalism dressed up as "convenience." Just your photos, your folders, your AI, your computer.
This isn't nostalgia for the pre-cloud era. This is the future of personal media management. And it's already here.
What Is Lap?
Lap is an open-source desktop application built by julyx10 that redefines how you interact with massive local photo libraries. Built on a powerhouse stack of Tauri + Rust for the core engine and Vue + Vite + Tailwind CSS↗ Bright Coding Blog for the interface, Lap delivers native performance with modern web flexibility.
But here's what makes it genuinely disruptive: Lap is architected for privacy from the ground up. Every AI operation—text search, image similarity matching, face clustering, smart tagging—runs through ONNX Runtime on your local machine. Your data never leaves your disk. Not for "training improvements." Not for "cloud sync." Not ever.
The project has gained serious traction across the developer community, with internationalization support for 9 languages (English, Chinese, Japanese, Korean, German, French, Spanish, Portuguese, and Russian), official Apple notarization for macOS, and a growing release history. The GitHub repository at https://github.com/julyx10/lap shows consistent development momentum with downloadable binaries for every major platform.
Why is Lap trending now? Three converging forces: AI capability maturation (local models finally rival cloud performance), privacy awakening (users realizing "free" cloud storage has hidden costs), and developer tooling excellence (Tauri/Rust enabling desktop apps that feel native without Electron bloat). Lap sits at the intersection of all three.
Key Features That Separate Lap From the Pack
Local AI Search Without the Cloud Tax
Lap integrates OpenAI's CLIP model for semantic image-text search and InsightFace for face detection and clustering—all running locally via ONNX Runtime. Search "golden retriever on beach" and find that exact photo from 2017. No internet required. No query logged. No ad profile built.
Folder-First Philosophy
Unlike iCloud Photos or Google Photos that force proprietary library formats, Lap works directly with your existing folder structure. No import step. No "uploading to library" progress bar that takes six hours. Point Lap at your NAS, external drive, or local SSD and start browsing immediately.
RAW Format Dominance
Professional photographers, this one's for you. Lap decodes 20+ camera RAW formats through LibRaw: CR2, CR3, CRW, NEF, NRW, ARW, SRF, SR2, RAF, RW2, ORF, PEF, DNG, SRW, RWL, MRW, 3FR, MOS, DCR, KDC, ERF, MEF, RAW, MDC. Your $4,000 camera's files get first-class treatment.
Next-Gen Image Format Support
WebP, HEIC/HEIF/HIF, AVIF, JXL (JPEG XL)—Lap handles the formats that most browsers and apps still struggle with. Future-proof your workflow today.
Video Engineered for Scale
FFmpeg-powered playback across MP4, MOV, M4V, MKV, AVI, FLV, TS/M2TS, WMV, WebM, 3GP/3G2, F4V, VOB, MPG/MPEG, ASF, DIVX and more. H.264 everywhere. HEVC/H.265 and VP9 native on macOS. Automatic compatibility fallback when codecs aren't available.
Performance at Scale
SQLite-backed metadata with Rust-core optimization means 100,000+ file libraries remain responsive. Browse, filter, search—no spinning beach balls, no "optimizing your library" lockouts.
Built-In Editing Toolkit
Crop, rotate, flip, resize, and basic adjustments without round-tripping to external editors. Edit in place, keep your workflow tight.
Real-World Use Cases Where Lap Destroys the Competition
The Privacy-First Family Archivist
You've got 15 years of family photos across four cameras, three phones, and two external drives. You will not put your children's photos on a server you don't control. Lap lets you consolidate everything locally, face-cluster family members for quick browsing, and search by "birthday cake" without any corporation training models on your kids' faces.
The Traveling Photographer with Spotty Internet
Shooting in Patagonia, Iceland, or rural Vietnam? Cloud photo managers are useless without connectivity. Lap runs entirely offline. Cull RAWs on the plane, keyword with AI assistance in a mountain hut with zero bars, organize by GPS location using the integrated Leaflet map—all without ever needing to "sync."
The Developer with Massive Screenshot Collections
You have 50,000 screenshots from debugging sessions, UI references, and documentation. Finding "that error message from the Kubernetes pod last March" is impossible with folder browsing. Lap's text-in-image search through CLIP makes it retrievable in seconds. Local processing means your proprietary screenshots never touch external APIs.
The Media Hoarder Escaping Subscription Creep
Google Photos charges $19.99/month for 2TB. iCloud wants $12.99. You've got 4TB and growing. Lap is GPL-3.0 licensed and completely free. Spend that $240/year on storage hardware instead—an 8TB external drive pays for itself in months.
Step-by-Step Installation & Setup Guide
macOS (Recommended: Homebrew)
The fastest path for Mac users:
# Add the official tap
brew tap julyx10/lap
# Install as a signed, notarized application
brew install --cask lap
Lap's macOS binaries are Apple-notarized, meaning no Gatekeeper gymnastics. Both Apple Silicon (_aarch64.dmg) and Intel (_x64.dmg) builds are available.
Manual Download (All Platforms)
Head to the latest release page and grab your platform's package:
| Platform | Package | Notes |
|---|---|---|
| macOS (Apple Silicon) | _aarch64.dmg |
Notarized by Apple |
| macOS (Intel) | _x64.dmg |
Notarized by Apple |
| Windows 10/11 (x64) | _x64_en-US.msi |
Unsigned; SmartScreen warning expected |
| Windows 10/11 (ARM64) | _arm64_en-US.msi |
Unsigned; SmartScreen warning expected |
| Ubuntu/Debian (amd64) | _amd64.deb |
See video playback note below |
Linux Video Playback Setup
Ubuntu, Debian, and Linux Mint users need GStreamer packages for full video support:
sudo apt install gstreamer1.0-libav gstreamer1.0-plugins-good
Building From Source (Developers)
Want to hack on Lap or run bleeding-edge? Here's the complete setup:
Prerequisites: Node.js 20+, pnpm, Rust stable toolchain
# macOS: Install system dependencies
xcode-select --install
brew install nasm pkg-config autoconf automake libtool cmake
# Linux (Ubuntu/Debian): Install system dependencies
# sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev \
# patchelf nasm clang pkg-config autoconf automake libtool cmake
# Clone the repository with all submodules
git clone --recursive https://github.com/julyx10/lap.git
cd lap
git submodule update --init --recursive
# Install Tauri CLI (v2.0+ required)
cargo install tauri-cli --version "^2.0.0" --locked
# Download AI models for local inference
./scripts/download_models.sh # macOS/Linux
# Windows: .\scripts\download_models.ps1
# Download FFmpeg sidecar for video processing
./scripts/download_ffmpeg_sidecar.sh # macOS/Linux
# Windows: .\scripts\download_ffmpeg_sidecar.ps1
# Install frontend dependencies and launch dev build
cd src-vite && pnpm install && cd ..
cargo tauri dev
The --recursive clone is critical—Lap bundles several native libraries as submodules. The download_models.sh script fetches CLIP and InsightFace weights for local AI inference. Without these, search features won't function.
REAL Code Examples and Architecture Deep-Dive
Let's examine how Lap's technical decisions enable its unique capabilities. These patterns come directly from the repository's documented architecture.
The Core Stack: Tauri + Rust + Vue
Lap's architecture is deliberately split for performance and security:
# Architecture Overview (from README documentation)
# Core: Tauri + Rust ← Native performance, system access
# Frontend: Vue + Vite + Tailwind CSS ← Modern reactive UI
# Data: SQLite ← Fast, embedded, zero-config metadata
Why this matters: Tauri's Rust core handles heavy lifting—RAW decoding, FFmpeg video processing, ONNX model inference—while the Vue frontend stays lightweight. The resulting binary is fractions of Electron's size with native memory efficiency. No Chromium instance eating 2GB RAM just to show thumbnails.
AI Model Integration Pipeline
The download_models.sh script sets up local inference infrastructure:
#!/bin/bash
# ./scripts/download_models.sh — Fetches CLIP and InsightFace weights
# This runs during build setup, not at runtime
# Models are cached locally, never downloaded per-query
# After running this, your Lap build can:
# - Encode images into CLIP embedding vectors
# - Compare text queries to image embeddings via cosine similarity
# - Detect and cluster faces without network calls
The privacy implication is profound. When you search "dog playing frisbee," your query is embedded by the local CLIP model, compared against locally-stored image embeddings in SQLite, and results returned—all within your machine's memory. Zero API keys. Zero rate limits. Zero data exfiltration.
FFmpeg Sidecar for Universal Video
#!/bin/bash
# ./scripts/download_ffmpeg_sidecar.sh — Bundles FFmpeg for video processing
# Enables thumbnail extraction and format compatibility across platforms
# Lap uses FFmpeg to:
# - Generate preview thumbnails for any supported video format
# - Transcode for playback when native codecs unavailable
# - Extract metadata (duration, resolution, codec info)
This sidecar pattern is crucial for cross-platform consistency. macOS has AVFoundation, Linux has GStreamer, Windows has Media Foundation—none fully compatible. Bundling FFmpeg ensures your MKV with obscure subtitles plays identically everywhere.
Database Schema Pattern (Inferred from SQLite + Feature Set)
Based on Lap's documented capabilities, the SQLite layer likely implements:
-- Conceptual schema based on supported features
-- Photos table with EXIF extraction
CREATE TABLE photos (
id INTEGER PRIMARY KEY,
filepath TEXT UNIQUE NOT NULL, -- Folder-first: original path preserved
filename TEXT,
file_size_bytes INTEGER,
created_at TIMESTAMP, -- From EXIF DateTimeOriginal
modified_at TIMESTAMP,
width INTEGER,
height INTEGER,
format TEXT, -- 'RAW', 'HEIC', 'JXL', etc.
camera_make TEXT, -- EXIF: Canon, Sony, Nikon...
camera_model TEXT,
lens_model TEXT,
gps_latitude REAL, -- For Leaflet map integration
gps_longitude REAL,
gps_altitude REAL,
rating INTEGER CHECK(rating BETWEEN 0 AND 5),
is_favorite BOOLEAN DEFAULT 0,
is_trashed BOOLEAN DEFAULT 0,
embedding_clip BLOB, -- CLIP vector for AI search
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Face clusters for person-based browsing
CREATE TABLE face_clusters (
id INTEGER PRIMARY KEY,
name TEXT, -- User-assigned or auto-generated
representative_photo_id INTEGER,
embedding BLOB, -- InsightFace centroid vector
FOREIGN KEY (representative_photo_id) REFERENCES photos(id)
);
-- Many-to-many: photos ↔ face clusters
CREATE TABLE photo_faces (
photo_id INTEGER,
face_cluster_id INTEGER,
bbox_x1 REAL, bbox_y1 REAL, -- Bounding box in image
bbox_x2 REAL, bbox_y2 REAL,
confidence REAL, -- Detection confidence score
PRIMARY KEY (photo_id, face_cluster_id),
FOREIGN KEY (photo_id) REFERENCES photos(id),
FOREIGN KEY (face_cluster_id) REFERENCES face_clusters(id)
);
This schema enables Lap's instant filtering by date, location, camera, lens, tags, favorites, ratings, and faces—without scanning filesystems on every query.
Advanced Usage & Best Practices
Library Segmentation Strategy
Lap supports multiple libraries—use this aggressively. Separate "Personal," "Client Work," "Research Screenshots," and "Family Archive." Each gets its own SQLite database, preventing performance degradation and keeping contexts clean.
RAW + JPEG Workflow
Enable your camera's RAW+JPEG mode. Let Lap's LibRaw integration handle the RAW for editing and archival, while fast-loading JPEG previews make browsing snappy. The folder-first approach means both files stay together naturally.
Duplicate Detection Before Import
Run Lap's duplicate finder on messy source folders before organizing. Batch-move duplicates to trash, then consolidate clean sets into your structured library. This prevents entropy from day one.
Model Download Caching
The AI models in download_models.sh are version-pinned and cacheable. If you're building from source repeatedly, mirror these to local artifact storage. The CLIP and InsightFace weights are hundreds of megabytes—don't re-download per build.
Linux GPU Acceleration for ONNX
ONNX Runtime supports CUDA and ROCm backends on Linux. If you have an NVIDIA or AMD GPU, compile with GPU acceleration for 10x faster AI search indexing. The default CPU inference works everywhere but rewards hardware investment.
Comparison with Alternatives
| Feature | Lap | Google Photos | Apple Photos | digiKam | Adobe Bridge |
|---|---|---|---|---|---|
| Cloud Required | ❌ No | ✅ Mandatory | ⚠️ Heavily pushed | ❌ No | ❌ No |
| AI Search Local | ✅ Yes | ❌ Cloud only | ⚠️ Limited local | ❌ No | ❌ No |
| Subscription Fee | ❌ Free (GPL-3) | $19.99/2TB | $12.99/2TB | ❌ Free | $22.99/mo |
| RAW Formats | 20+ via LibRaw | Limited | Limited | 20+ | Extensive |
| Modern Formats (AVIF, JXL) | ✅ Yes | ❌ No | ❌ No | ⚠️ Partial | ⚠️ Partial |
| Cross-Platform | ✅ macOS/Win/Linux | Web only | macOS/iOS only | ✅ Win/Linux/macOS | ✅ Win/macOS |
| Open Source | ✅ Yes | ❌ No | ❌ No | ✅ Yes | ❌ No |
| Face Clustering | ✅ Local AI | ✅ Cloud AI | ✅ Local | ⚠️ Manual | ❌ No |
| Folder-First | ✅ Native | ❌ Proprietary | ❌ Proprietary | ✅ Yes | ✅ Yes |
| Performance 100k+ Files | ✅ Optimized | ⚠️ Throttling | ⚠️ Rebuilds | ⚠️ Slow | ⚠️ Resource heavy |
The verdict: Lap uniquely combines local AI, modern format support, cross-platform availability, and zero cost. Google Photos and Apple Photos trap you in ecosystems. digiKam lacks AI search. Adobe Bridge costs more than most cloud subscriptions. Lap is the only option that checks every box for privacy-conscious power users.
FAQ
Is Lap completely free? What's the catch?
Yes, completely free. Lap is licensed under GPL-3.0-or-later. No freemium limits, no "pro" tier, no data harvesting for revenue. The "catch" is that you manage your own storage—which is cheaper long-term anyway.
How does AI search work without internet?
Lap downloads OpenAI's CLIP model and InsightFace weights during build/setup. These run through ONNX Runtime entirely on your CPU (or GPU, if configured). Your search queries and image embeddings never leave your machine.
Can I migrate from Google Photos or Apple Photos?
Yes, with preparation. Export your libraries using Google Takeout or Apple Photos' export feature. Lap's folder-first approach means organized exports import cleanly. Note that AI metadata (face tags, etc.) won't transfer—Lap will rebuild these locally.
Is my library format future-proof?
Absolutely. Lap uses standard folders and SQLite—a format readable for decades. No proprietary blob. If Lap development stopped tomorrow, your photos remain accessible files with extractable metadata.
What about Live Photos and Motion Photos?
Coming soon. The roadmap explicitly lists Live Photos and Motion Photos support. For now, Lap extracts the static component. Follow GitHub releases for updates.
How do I contribute or report bugs?
The repository at https://github.com/julyx10/lap accepts issues and pull requests. The internationalization effort (9 languages!) shows community contribution is welcomed and merged.
Is Windows ARM64 performance good?
Native ARM64 builds are available but currently unsigned (expect SmartScreen warnings). Performance matches Apple Silicon efficiency on Snapdragon and other ARM Windows devices. The team is working toward signed releases.
Conclusion
We've been sold a lie: that convenience requires surrendering our personal archives to distant servers we don't control. Lap exposes that false choice. With local AI search that rivals cloud intelligence, performance that scales to professional collections, and a privacy architecture that's actually trustworthy, Lap represents a fundamental shift in how we can manage visual memory.
The cloud isn't going away. But for the first time, opting out doesn't mean opting for inferior tools. Lap gives you capabilities that Google and Apple charge monthly for—without the extraction, the lock-in, or the creeping dread of "what happens when they change the terms again."
Your photos survived the camera, the SD card, the import process, and years of storage. Don't let them die as training data for someone else's model.
Download Lap today. Build from source if you're curious. Star the repository if you're convinced. And take back control of your visual life—one local, AI-powered, privacy-respecting search at a time.
👉 Get Lap on GitHub — Free, open-source, and ready for libraries of any size.