Enframe
Enframe
Image framing tool for setting focal points and crops with Lightroom integration.
Features
Implemented ✅
- Tauri v2 + SvelteKit 5 foundation (using native WebView, not Servo)
- SQLite database with schema (photos, frames, focal_points)
- Tauri plugins: sql, fs, dialog
- Database abstraction layer
- Photo browser UI
- Editor route structure
- Lightroom integration stubs
Planned
- File import — drag-drop to add local JXL/JPEG files
- Lightroom browser — read local library and import photos
- Editor canvas — place focal points (draggable), draw crop frames (resizable)
- Export — crop photos using Canvas API, save to disk, export metadata JSON
Architecture
- Frontend: SvelteKit 5 + Svelte 5 (runes)
- Backend: Tauri v2 (Rust)
- Database: SQLite via
tauri-plugin-sql - Image format: JXL (natively supported in macOS WebKit)
All coordinates stored as normalized 0-1 values for resolution independence.
📋 Prerequisites
Make sure you have the following installed:
- Bun (latest version) - Package manager and runtime
- Rust (latest stable) - Required for Tauri
- Node.js (v22.12+) - Fallback runtime support
Platform-Specific Requirements
Windows
- Microsoft C++ Build Tools or Visual Studio with C++ support
macOS
- Xcode Command Line Tools:
xcode-select --install
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-devSetup
bun installDevelopment
just dev
# or
bun run devDatabase Schema
photos: imported images (local or from Lightroom)frames: crop rectangles on photos (x, y, width, height in 0-1)focal_points: important points that must stay visible (x, y in 0-1, withrequiredflag)
Each frame can have its own focal points. Focal points with frame_id = NULL apply to the default (full-image) frame.