dori

module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 13, 2026 License: MIT

README

Dori

Dori

Interactive TUI for indexing, reviewing, and grouping large image collections by metadata.

Release Prerelease Go Report Card

Tame thousands of RAW files without leaving your terminal.


Why Dori?

Photographers often return from a session with hundreds (or thousands) of images that need culling. Dori gives you a keyboard-driven workflow to index images, group similar shots, and review them — all inside an interactive terminal UI powered by Bubble Tea.

Features

📁 Index — Scan directories for images (ARW, JPEG, TIFF, PNG), extract EXIF / XMP / IPTC metadata, compute thumbnail fingerprints, and store everything in a local JSON index.

🔗 Group — Automatically cluster similar images using thumbnail RMSE distance and time proximity.

📋 List — Browse all indexed images, open them externally, rename or delete files directly from the TUI.

Review — Walk through image groups interactively: keep, exclude, or move images between groups. Rename groups.

🔍 Metadata panel — Always-visible sidebar showing EXIF details (camera, lens, exposure, ISO, focal length, dimensions, date).

Async persistence — Index changes are saved to disk in the background so the TUI stays responsive, even with tens of thousands of images.

Quick start

Install

Download a pre-built binary from GitHub Releases:

Platform Archive
Linux (x86_64) dori_<version>_linux_amd64.tar.gz
Linux (ARM64) dori_<version>_linux_arm64.tar.gz
macOS (Apple Silicon) dori_<version>_darwin_arm64.tar.gz
macOS (Intel) dori_<version>_darwin_amd64.tar.gz
Windows (x86_64) dori_<version>_windows_amd64.zip
Windows (ARM64) dori_<version>_windows_arm64.zip

Extract and move the binary to a directory in your $PATH:

tar -xzf dori_*_darwin_arm64.tar.gz
sudo mv dori /usr/local/bin/

Or install with Go:

go install github.com/karklik/dori/cmd/dori@latest

Or build from source:

git clone https://github.com/karklik/dori.git
cd dori
go build -o dori ./cmd/dori
Run
dori              # open current directory
dori ~/Photos     # open a specific workspace

Usage

Launch dori to open the interactive dashboard:

[i]ndex  [l]ist  [g]roup similar  [r]eview  [q]uit
[I] force re-index
Keyboard shortcuts
Mode Keys
Dashboard i index · I force re-index · l list · g group · r review · q quit
Review k keep · e exclude · m move · o open · ↑↓ prev/next image · ←→ prev/next group · R rename group · esc back
List o open · d delete · r rename · ↑↓ navigate · esc back

Requirements

Dependency Version
Go 1.26+
ExifTool any recent
Installing ExifTool

macOS (Homebrew) (community-maintained formula)

brew install exiftool

Linux — Debian/Ubuntu

sudo apt install libimage-exiftool-perl

Linux — Fedora/RHEL/CentOS

sudo dnf install perl-Image-ExifTool

Windows (Chocolatey) (community-maintained package)

choco install exiftool

Windows (Scoop) (community-maintained package)

scoop install exiftool

Windows (winget) (community-maintained package)

winget install -e --id OliverBetz.ExifTool

Verify the install:

exiftool -ver

ExifTool must be available in $PATH.

Development

go test ./...           # run all tests
go test -race ./...     # race detector
go vet ./...            # static analysis

This project uses Conventional Commits:

feat: add XMP sidecar support
fix: prevent duplicate groups on re-scan
test: add metadata extraction edge cases
ci: pin goreleaser binary version

CI / CD

Workflow Trigger Purpose
ci Push to main / PR to main Build, test (-race), vet; seeds Go module cache on main for faster PR builds
prerelease Tag push (v*-rc.*) Test, build multi-platform pre-release binaries via GoReleaser
release Tag push (v*, not v*-rc.*) Test, build multi-platform binaries via GoReleaser, publish GitHub release with changelog, attest artifacts
Creating a release
# Pre-release (release candidate)
git tag v1.0.0-rc.1
git push origin v1.0.0-rc.1

# Stable release
git tag v1.0.0
git push origin v1.0.0

Binaries are built for linux / darwin / windows × amd64 / arm64.

Verifying release artifacts

All release artifacts include build provenance attestations:

gh attestation verify dori_*.tar.gz --owner karklik

License

MIT © Karol Burczyński

Directories

Path Synopsis
cmd
dori command
internal
cli
Package cli defines the Dori interactive terminal UI.
Package cli defines the Dori interactive terminal UI.
group
Package group provides image grouping by metadata fields and custom criteria.
Package group provides image grouping by metadata fields and custom criteria.
index
Package index builds and refreshes searchable indexes from image metadata.
Package index builds and refreshes searchable indexes from image metadata.
list
Package list provides an interactive bubbletea model for browsing all indexed images.
Package list provides an interactive bubbletea model for browsing all indexed images.
metadata
Package metadata handles extraction of EXIF, XMP, and IPTC metadata from image files and sidecar (.xmp) files.
Package metadata handles extraction of EXIF, XMP, and IPTC metadata from image files and sidecar (.xmp) files.
review
Package review provides interactive image group review.
Package review provides interactive image group review.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL