Skip to content

buildingopen/photocull

Repository files navigation

Photo Review App

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.

Prerequisites

  • 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 .venv and dependencies

Setup

pnpm install

Development

pnpm tauri dev

This starts the Vite dev server on port 1420 and opens the Tauri window. Hot reload works for the React frontend.

Build

pnpm tauri build

Outputs:

  • src-tauri/target/release/bundle/macos/Photo Review.app
  • src-tauri/target/release/bundle/dmg/Photo Review_0.1.0_aarch64.dmg

Architecture

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

How it works

  1. Onboarding (first launch): Checks Python, Photos library, and review.py exist. Collects Gemini API key. Persists config via tauri-plugin-store.
  2. Full Analysis: Runs review.py extract, export, analyze sequentially as child processes via tauri-plugin-shell. Streams stdout to a log panel.
  3. Viewer: Spawns review.py view which starts an HTTP server on localhost:8712. The Tauri webview loads the viewer via iframe.
  4. View Only: Skips analysis steps, directly starts the viewer server (for re-visiting previously analyzed results).

Shell scope

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.

About

AI-powered photo cleanup for Mac. Categorizes, deduplicates, and flags blurry photos using Gemini.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors