Tauri v2 Mac app wrapping the photo-review CLI tool. Provides a native app shell with onboarding, settings, and the photo viewer embedded in a webview.
- macOS 13+
- Python 3.12+ (system or Homebrew)
- Rust toolchain (
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh) - pnpm (
brew install pnpm) - The
~/photo-review/CLI tool with its.venvand dependencies
pnpm installpnpm tauri devThis starts the Vite dev server on port 1420 and opens the Tauri window. Hot reload works for the React frontend.
pnpm tauri buildOutputs:
src-tauri/target/release/bundle/macos/Photo Review.appsrc-tauri/target/release/bundle/dmg/Photo Review_0.1.0_aarch64.dmg
photo-review-app/
src/ # React + TypeScript frontend
App.tsx # Root component, routing between onboarding/main
components/
Onboarding.tsx # First-launch wizard (system checks, API key)
MainView.tsx # Main app: pipeline runner + viewer iframe
styles.css # All styles (no CSS framework)
src-tauri/ # Rust backend
src/lib.rs # Tauri commands (config, python checks, state)
tauri.conf.json # Window config, CSP, shell scope, bundle settings
capabilities/ # Tauri v2 permission capabilities
Entitlements.plist # macOS Photos library access
icons/ # App icons (camera + sparkle motif)
public/
icon.svg # Source icon
- Onboarding (first launch): Checks Python, Photos library, and review.py exist. Collects Gemini API key. Persists config via tauri-plugin-store.
- Full Analysis: Runs
review.py extract,export,analyzesequentially as child processes via tauri-plugin-shell. Streams stdout to a log panel. - Viewer: Spawns
review.py viewwhich starts an HTTP server on localhost:8712. The Tauri webview loads the viewer via iframe. - View Only: Skips analysis steps, directly starts the viewer server (for re-visiting previously analyzed results).
The app is scoped to only execute python3 with arguments matching \S+ (the review.py script path and command name). Configured in tauri.conf.json under plugins.shell.scope.