Skip to content
wispdevonPublic

About

Photo culling for photographers — fast, private, and free. macOS, Windows and Linux.

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

Culltivate

Private, fast photo culling for photographers.

Download · Run from source · How it works · License · Original project

Culltivate is an offline desktop app for reviewing RAW and JPEG shoots. It opens camera previews without importing or decoding the RAW files, helps compare frames, and saves ratings and crops in formats photo editors can read. Photo analysis stays on your computer. The optional MobileCLIP model is downloaded only when you request it; photos are never uploaded.

This repository is Wisp's fork of OpenCull by NatePhotos. The combined development version is on dev; the upstream releases contain the original application, not this fork's additions.

Workspace screenshot · Annotated overview

What's new in 0.7.1.1 — Smooth-scrolling hotfix

  • Fix blank filmstrip thumbnails after reference comparison by handling each wheel event once. High-resolution smooth scrolling retains fractional input.
  • Reduce image tile corruption on Linux/NVIDIA by painting tiles on the CPU while keeping GPU compositing enabled. Some residual artifacting has been reported; this release does not claim to eliminate it entirely.
  • Keep linked comparison zoom, ratings, keyboard navigation and source files unchanged. See the changelog.

Release tag: v0.7.1.1. The internal package version is 0.7.1+1 to meet Rust/Tauri semantic-version requirements. The release provides Linux x86_64 installers; macOS and Windows were not tested for this hotfix.

Reference comparison from 0.7.1

  • Press Shift+R or use the toolbar comparison button to pin a reference beside the current photo, then browse and mark candidates normally.
  • Zoom and pan in either pane move both photos together. Keyboard, face, wheel/pinch and box zoom use the same linked view.
  • Choose Use as reference to pin a new candidate, or press Escape to return to the previous workspace. See the comparison guide.

Performance features from 0.7.0

  • Settings → Performance measures photo workflows, identifies slow stages, and explains average scores, sample counts, failures and potential fixes.
  • Supported NVIDIA/CUDA systems benchmark GPU inference and show the GPU model, with accurate CPU fallback reporting. Photos stay local; report submission is optional and requires approval.
  • Fixed system and GPU specification ratings use a documented hardware-only formula and bundled manufacturer specifications, independently of benchmark timings. See the public speeds database for hardware, run counts and how to contribute reviewed results.
  • Faster portrait rotation, simpler panel sizing, and a clearer Layout settings page. See the changelog and benchmark guide.

Try this fork

Requirements

  • Rust stable
  • Node.js 22.12+, 24, or 26+ and npm 11 or newer. Node 20, 23 and 25 are unsupported. The repository pins Node 22.23.3 and npm 11.21.1.
  • Tauri's platform prerequisites
  • A fast JPEG library build: on macOS, install Xcode Command Line Tools and run brew install jpeg-turbo pkgconf; on Linux and Windows, install CMake and NASM (NASM is needed on Intel/AMD).

Clone this fork and start the desktop app:

git clone https://github.com/wispdevon/OpenCull.git
cd OpenCull
nvm install
nvm use
npm install --global npm@11.21.1
npm ci
npm run desktop

If Node and npm are already installed, use any versions that meet the requirements and skip the nvm commands. The first run compiles the native app and may take several minutes. Keep the terminal open; stop the app with Ctrl+C. Frontend edits reload automatically and Rust edits rebuild the app.

Desktop commands

  • Run the desktop app: npm run desktop
  • Preview the browser demo: npm run dev — sample data only.
  • Build the app and installers: npm run build:desktop

CUDA is detected automatically on supported Linux x86_64 systems. macOS and Windows use CPU AI. Rendering and AI acceleration are independent.

CUDA and Linux rendering options
  • Force CUDA AI: npm run desktop -- --cuda
  • Force CPU AI: npm run desktop -- --cpu
  • NVIDIA rendering: npm run desktop -- --nvidia
  • Compatibility rendering: npm run desktop -- --compatibility
  • Software rendering: npm run desktop -- --software
  • Build with CUDA: npm run build:desktop -- --cuda
  • Build without installers: npm run build:desktop -- --debug --no-bundle

CUDA requires an NVIDIA GPU and driver, CUDA 13.x runtime libraries and compatible cuDNN 9.x. The app falls back to CPU if initialization fails. See CUDA setup and benchmarks.

Development server and port 1420
  • The desktop command starts Vite and the native app together.
  • An existing Culltivate Vite server on port 1420 is reused.
  • Another app using that port produces an error before the native build starts.

Features

Culling and sessions
  • Review folders or memory cards before choosing which photos to copy.
  • Combine card sources and select individual card subfolders.
  • Compare RAW/JPEG pairs in filmstrip, grid or stack views.
  • Review video clips with local first-frame previews and native playback.
  • Set ratings, flags, colour labels and crops; resume recent sessions.
  • Reviewing a card leaves its originals untouched.
Local AI and grouping
  • Compare faces for sharpness, expressions, closed eyes and gaze.
  • Choose the original YuNet finder by turning Advanced AI off, or use the YOLO26n finder with Advanced AI on; it also uses YuNet to place eyes and handles turned faces.
  • In development builds, Settings → AI → Face finder · Experimental can use YuNet or YOLO26n for either AI rules mode. YOLO still uses YuNet to place eyes.
  • Group visually similar photos with MobileCLIP.
  • Detect motion blur, with optional one-star and Reject marking.
  • Reuse cached analysis across sessions.
  • Analysis runs locally; downloading the optional model does not upload photos.
Appearance and workspace
  • Choose Dark, Light, 18% grey or Wisp themes, plus your font and interface scale.
  • Select the home layout and optional featured image.
  • Resize panels and filmstrips, and choose which panels are visible.
  • Enable experimental native-aspect filmstrips, transitions and face overlays.
Shortcuts and saved preferences
  • Customize shortcuts in Settings → Keyboard.
  • Follow the first-launch overview for common keys and the culling workflow.
  • Import or export settings without photos or session history.

Fork changes maintained ahead of upstream

This fork follows upstream OpenCull while maintaining its own changes on dev. Several earlier Culltivate additions have since landed upstream; these are the changes still specific to this fork:

  • Reference comparison. Pin a reference beside the current photo with linked zoom and pan, then browse and mark candidates. See the comparison guide.
  • Culltivate identity. This repository gives the fork its own name and release identity while retaining OpenCull as its upstream base.
  • Experimental face-finder choice. Development builds let you choose YuNet or YOLO26n in either AI rules mode. YOLO26n continues to use YuNet to place eyes. See How it works.
  • YOLO CUDA fallback. On supported Linux NVIDIA builds, YOLO can run its supported graph operations on CUDA and place unsupported operations on the CPU. See the CUDA guide.
  • Motion-blur analysis. An optional local check can lower streaked frames in group rankings and, when enabled, mark unrated detections one star and Reject. See motion-blur details.
  • Performance log. Settings → AI shows recent YuNet/YOLO analysis chunk times, MobileCLIP grouping times, and full-size preview orientation times. Entries are kept in memory for the current session, up to 500.
  • Benchmarks and diagnostics. Settings → Performance measures isolated photo workflows, ranks costly stages, and suggests investigations. Optional session recording and preview-approved webhook/ntfy reports share aggregate diagnostics without uploading photos.

Keyboard basics

Common keyboard shortcuts
Key Action
← / → Previous / next photo
↑ / ↓ Previous / next group
P / X / U Pick / reject / clear flag
1–5 / 0 Set star rating / no stars
Space Zoom to a face, then back out
Z Zoom to the centre, then back out
G / F Grid view / toggle filmstrip
H / . Histogram and EXIF / face panel
Caps Lock Toggle speed culling
R Crop and straighten
Shift+R Pin or close reference comparison

Keyboard settings screenshot

Built with

Tauri Rust React TypeScript Tailwind CSS ONNX Runtime

The optional Linux CUDA build also uses NVIDIA CUDA and cuDNN. Third-party software and model licenses are listed in THIRD-PARTY-NOTICES.md.

Development and checks

For explicitly requested idea bundles and their prerequisites, see Pulling complete ideas. Earlier feature branch tips are preserved as archive tags.

Run these from the repository root with the requirements above installed:

npm run test:web
npm run test:rust
npm run build:web
npm run check

npm run check runs the frontend and Rust tests plus the frontend production build. npm run build:desktop creates the native app and installer packages. For a read-only native check against a folder of photos, see Checking it works.

Development in this fork happens directly on dev; main is the release branch. Earlier work branch tips are preserved as archive tags. Contributions to this fork should target dev. To contribute to the original project, use NatePhotos/OpenCull.

License and contact

Copyright © 2026 The OpenCull authors. Culltivate is distributed under the GNU General Public License, version 3 or later, without warranty. See THIRD-PARTY-NOTICES.md for dependencies, model credits and their licenses.

Original project and maintainer: NatePhotos · Instagram · email. For issues and feature requests in this fork, use wispdevon/OpenCull issues.

Back to top

About

Photo culling for photographers — fast, private, and free. macOS, Windows and Linux.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages