Skip to content

Repository files navigation

OpenPhotoSort

A cross-platform desktop app for reading and organizing photos based on their EXIF metadata. Built with .NET 10 and .NET MAUI, targeting Windows and macOS.

What it does

Select a folder and OpenPhotoSort scans it for image files (JPG, JPEG, PNG, BMP, GIF, HEIC), reads each file's embedded EXIF data using Magick.NET, and displays the metadata — camera make/model, date taken, GPS coordinates, and more. The intent is to eventually sort and copy photos into organized folder structures based on that metadata.

Requirements

  • .NET 10 SDK
  • maui-windows workload (dotnet workload install maui-windows) on Windows
  • maui-maccatalyst workload on macOS
  • macOS only: full Xcode, not just the Command Line Tools. Install it, then launch it at least once and let it finish its first-run setup — until you do, its Mac Catalyst SDK isn't registered and builds targeting net10.0-maccatalyst will fail (e.g. xcrun --sdk maccatalyst errors with "SDK cannot be located", or Rider reports incompatible/missing device targets). Point xcode-select at it afterwards: sudo xcode-select -s /Applications/Xcode.app.

Build

# Windows
dotnet build OpenPhotoSort.UI/OpenPhotoSort.UI.csproj -f net10.0-windows10.0.19041.0

# macOS
dotnet build OpenPhotoSort.UI/OpenPhotoSort.UI.csproj -f net10.0-maccatalyst

Running

scripts/run-mac.sh and scripts/run-windows.ps1 build and launch the app for their respective platform in one step (equivalent to dotnet build -t:Run for the matching target framework).

Known issues

  • Rider: "Failed to find 'mlaunch'" when running/debugging on macOS. Rider routes Mac Catalyst launches through the same launcher pipeline it uses for iOS devices, which depends on a bundled mlaunch binary from the old Xamarin.iOS tooling. On at least Rider 2026.2 with Xcode 26.6, that binary is missing and no environment/Xcode/Rider-settings fix resolves it — this is a known, long-standing JetBrains bug (see JetBrains support threads and YouTrack issues RIDER-65418, RIDER-76794, RIDER-80950, RIDER-117599). All of Rider's own suggested fixes (matching the Xcode path in Rider's Apple Platforms settings to Xcode's own Locations tab, installing the iOS platform component) were verified correct on this project and still didn't help. Workaround: use scripts/run-mac.sh (or dotnet build -t:Run -f net10.0-maccatalyst) instead of Rider's Run/Debug buttons. This builds and launches the same way, just without a debugger attached.

Project structure

OpenPhotoSort.Core/   — Class library: EXIF extraction via Magick.NET
OpenPhotoSort.UI/     — MAUI app: folder picker UI, Windows + macOS targets

Status

Photo scanning and sorting are implemented. Core features:

  • Scans a folder (optionally recursive) for JPG/JPEG/PNG/BMP/GIF/HEIC files
  • Reads EXIF to detect date and camera model
  • Copies or moves files into configurable date-based folder structures (10 patterns)
  • Handles file conflicts: skip / rename / overwrite / route to duplicates folder
  • Routes no-EXIF files to a dump folder or uses file date as fallback
  • Two-phase UX: scan first to see stats, then copy or move with live progress
  • Cancel button stops an in-progress operation
  • All settings persist across sessions

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages