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

  1. File import — drag-drop to add local JXL/JPEG files
  2. Lightroom browser — read local library and import photos
  3. Editor canvas — place focal points (draggable), draw crop frames (resizable)
  4. 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-dev

Setup

bun install

Development

just dev
# or
bun run dev

Database 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, with required flag)

Each frame can have its own focal points. Focal points with frame_id = NULL apply to the default (full-image) frame.