Skip to content

Repository files navigation

PhotoSort

Choose which photos to keep before you start editing.

Python 3.14 PyQt 6 Latest release Build status License: Apache 2.0

PhotoSort helps you sort through a folder of photos and decide which ones to keep. You can find blurry shots and duplicates, compare similar photos side by side, and organize your favorites into folders. Mark the photos you don’t want as you go, then review them before moving anything to Trash.

PhotoSort showing a night photograph in Cull

Download · Supported files · Workflows · Shortcuts · AI Usage

Download

Download PhotoSort from the Releases page.

Supported files

PhotoSort opens JPEG, PNG, TIFF, WebP, and many camera RAW formats. Star ratings and rotations are saved directly to EXIF and XMP metadata so they carry over to other photo editors. You can also browse and play common video formats, but ratings and analysis only work with photos.

Choose your workflow

There are five steps along the bottom of the window. Use whichever ones you need. You don't have to go through them all or follow a particular order.

Reopen a folder to restore its last workflow, view settings, scroll position, and selected photos. Each folder and workflow is remembered separately.

Step What it's for
Organize Arrange photos into folders.
Easy Delete Find duplicates, blurry shots, and exposure problems.
Fix Rotation Correct sideways or upside-down photos.
Pick Best Choose favorites from similar shots.
Cull Review photos manually and choose what to keep.

Organize

Arrange photos into folders and check the result before moving anything. RAW+JPEG pairs and XMP sidecars can move together. Select several photos in either tree to compare them side by side.

Organize previewing USA, Porto, and Australia folders

Easy Delete

PhotoSort flags duplicates, blurry shots, and photos that may be too dark or bright. Compare them and decide which ones to keep.

Easy Delete comparing a softer photo with a sharper version

Fix Rotation

Check the suggested rotation next to the original. Adjust it if needed, then apply the changes.

Fix Rotation showing the original and suggested correction

Pick Best

Compare similar photos with suggestions based on image quality and faces. Choose your favorites, or keep them all.

Pick Best comparing similar photos

Cull

Go through your photos at your own pace. Compare shots side by side, give your favorites a star rating, and mark the ones you don't want. Review your marks before sending anything to Trash.

Cull showing a night photograph for review

Useful shortcuts

See the complete keyboard guide for separate maps and shortcut tables for all five workflows.

Here are the most important shortcuts you should know:

What you want to do Shortcut
Browse photos Up / Down arrows
Split view with multiple photos Shift + Up / Down arrows
Highlight a photo to quickly compare (when multiple are selected) 1, 2, 3...
Mark or unmark a photo for deletion D
Unmark all photos Alt+D
Review and apply your changes Shift+Enter
Send selected photos to Trash Delete / Backspace
Give a star rating, or clear it with 0 Ctrl+0 to Ctrl+5
Show photo details I
Fit the photo / show actual size 0 / A
Show one photo / compare side by side F1 / F2
Open Preferences F10

AI Usage

PhotoSort runs all AI models 100% locally on your computer. No photos, data, or embeddings are ever sent to external servers or cloud APIs, and no accounts or API keys are required. You can also browse, organize, and cull photos manually without using any AI features.

Where AI is used

  • Subject & similarity grouping (Cull & Pick Best): Uses Meta's DINOv2 (facebook/dinov2-small) vision transformer to cluster bursts and similar scenes based on visual content. You can also select facebook/dinov2-base in Preferences.
  • Aesthetic quality scoring (Pick Best): Uses BeIT Aesthetic (cafeai/cafe_aesthetic) to evaluate composition and lighting, alongside MediaPipe / OpenCV for face and open-eye detection.
  • Orientation correction (Fix Rotation): Uses an ONNX neural network (deep-image-orientation-detection) to detect upside-down or sideways photos.
  • (Note: Duplicate detection and blur analysis in Easy Delete use fast, traditional image processing algorithms rather than neural networks).

Models & offline use

  • Automatic download: Models are downloaded automatically on first use and cached locally for future runs.
  • Offline ready: Once downloaded, all models run completely offline. If you plan to work without internet, run the features once beforehand to cache the models.
  • Hardware acceleration: Neural networks automatically leverage Apple Silicon (MPS) or NVIDIA (CUDA) when available, falling back to CPU.
  • Manual rotation model setup: The rotation model can also be installed manually by downloading orientation_model*.onnx from the model's releases page and placing it in Help → About → Models Folder.

Questions or feedback?

Open an issue if something isn't working, a step is confusing, or you'd like a feature. For bugs, include your PhotoSort version, operating system, file formats, and what you did before the problem happened. A small sample photo helps if you can share one.

Running from source

You only need these instructions if you want to run the development version or work on the code. You'll need Python 3.14.x.

git clone https://github.com/duartebarbosadev/PhotoSort.git
cd PhotoSort
python3.14 -m venv venv

Activate the environment:

# macOS / Linux
source venv/bin/activate

# Windows Command Prompt
venv\Scripts\activate.bat

On macOS, install the system libraries used by pyexiv2:

brew install brotli inih gettext

Install dependencies and start PhotoSort:

python -m pip install -r requirements.txt
python -m src.main

For an NVIDIA CUDA environment, use requirements-cuda.txt instead. Use separate environments for the CPU and CUDA variants of ONNX Runtime.

Useful launch options:

python -m src.main --folder "/path/to/photos"
python -m src.main --last-folder
python -m src.main --clear-cache

--clear-cache deletes saved previews and other cached data. PhotoSort will build them again when needed. --clear-models deletes downloaded models, so you will need to download them again to use those features.

Debug logs

Set PHOTOSORT_ENABLE_FILE_LOGGING=true and PHOTOSORT_LOG_LEVEL=DEBUG before launching. For example, on macOS/Linux:

PHOTOSORT_ENABLE_FILE_LOGGING=true PHOTOSORT_LOG_LEVEL=DEBUG python -m src.main

On Windows PowerShell:

$env:PHOTOSORT_ENABLE_FILE_LOGGING="true"
$env:PHOTOSORT_LOG_LEVEL="DEBUG"
python -m src.main

Logs are saved as photosort_app.log in:

  • macOS: ~/Library/Logs/PhotoSort/
  • Windows: %LOCALAPPDATA%\PhotoSort\Logs\
  • Linux: $XDG_STATE_HOME/PhotoSort/, or ~/.local/state/PhotoSort/ by default.

Review logs for personal paths and metadata before sharing them.

Contributing

Bug reports, usability feedback, and pull requests are welcome. See DEVELOPER_GUIDE.md for architecture and AGENTS.md for development and verification guidelines.

python -m pip install -r requirements-dev.txt
python -m pytest

PhotoSort is licensed under Apache 2.0.

About

PhotoSort is a powerful desktop application designed to streamline the management of large photo libraries, making it easier than ever to sort, cull your images.

Topics

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages