https://github.com/tiagotrindade/foliosort
Organize, deduplicate & batch-rename photos and videos on macOS & Windows. Fixes Google Photos Takeout exports, finds duplicate & blurry photos, on-device AI face search. Private β files never leave your computer.
https://github.com/tiagotrindade/foliosort
batch-rename dotnet duplicate-detection exif face-recognition google-photos google-takeout icloud macos media nas network-storage photo-management photo-organization photo-organizer photos swift swiftui windows wpf
Last synced: 4 days ago
JSON representation
Organize, deduplicate & batch-rename photos and videos on macOS & Windows. Fixes Google Photos Takeout exports, finds duplicate & blurry photos, on-device AI face search. Private β files never leave your computer.
- Host: GitHub
- URL: https://github.com/tiagotrindade/foliosort
- Owner: tiagotrindade
- Created: 2026-03-12T14:54:46.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-07-02T21:58:01.000Z (6 days ago)
- Last Synced: 2026-07-02T23:24:09.743Z (6 days ago)
- Topics: batch-rename, dotnet, duplicate-detection, exif, face-recognition, google-photos, google-takeout, icloud, macos, media, nas, network-storage, photo-management, photo-organization, photo-organizer, photos, swift, swiftui, windows, wpf
- Language: Perl
- Homepage: https://foliosort.app
- Size: 94 MB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# πΈ FolioSort
### Your photos are a mess. FolioSort fixes that in one click.
**Automatically sort, rename, deduplicate, and organize thousands of photos & videos** into clean dated folders β using the real date, camera, and GPS location baked into every file. Plus on-device AI to find people, screenshots, duplicates, and blurry shots. Native apps for **macOS and Windows** β fast, private, and your files never leave your computer.
π **[foliosort.app](https://foliosort.app)** Β· β¬οΈ **[Download free](https://github.com/tiagotrindade/FolioSort/releases/latest)** Β· π macOS Β· πͺ Windows
[](https://github.com/tiagotrindade/FolioSort/releases/latest)
[](https://github.com/tiagotrindade/FolioSort/releases)


[](LICENSE)
| π **macOS 14+** | πͺ **Windows 10/11** |
|:---:|:---:|
| [**Download FolioSort.dmg**](https://github.com/tiagotrindade/FolioSort/releases/latest/download/FolioSort.dmg) | [**Get from Microsoft Store**](https://apps.microsoft.com/detail/9nlw1xwgk181) |
| Apple Silicon & Intel Β· Signed & notarized | One-click install Β· Auto-updates |

---
## Sound familiar?
> *"I exported my Google Photos via Takeout and got 40 GB of files with broken dates and useless names."*
> *"I have 80,000 photos across ten cameras and phones, all dumped in one giant folder."*
> *"Every shoot lands in `~/Downloads` and I never sort them. I just buy a bigger drive."*
FolioSort reads the **EXIF metadata, GPS coordinates, and capture dates** that are already inside your files and turns chaos into a clean, browsable library β `2024 βΊ 06 βΊ 14 βΊ IMG_4523.jpg` β in seconds, for thousands of files at once. **Copy mode by default**, with checksum verification, so your originals are never at risk.
---
## Who it's for
### ποΈ Google Photos refugees
Leaving Google Photos? The Takeout export is notoriously broken β dates live in sidecar `.json` files, names are scrambled, and RAWs are disguised as JPEGs. **FolioSort's Google Photos mode reads those sidecars, writes the real date + GPS + people tags back into each file, and sorts everything** into the structure you want. It even detects Canon CR2/CR3 files that Google silently renamed to `.jpg`.
### π· Photographers & videographers
Sort by **date, camera body, lens, or GPS city**. Built-in presets for date-based archives, multi-camera workflows, and video production β or build your own folder template with tokens like `{YYYY}/{MM}/{Camera}/{City}`. Handles **80+ formats including RAW** (CR3, NEF, ARW, DNGβ¦) and cinema video (BRAW, R3D, ARRI).
### π― Event shooters
Sorting a competition, wedding, or multi-day trip? **Define time ranges** and FolioSort drops every photo into the right event/sub-event folder automatically, based on when it was actually taken.
### π§Ή Everyone with a messy Downloads folder
One **Wizard**, three clicks, done. No metadata expertise required.
---
## See it in action
### πͺ Start with the Wizard β pick what you want, follow the steps

### ποΈ Organize β sort by date, camera, or location with live preview

### βοΈ Google Photos Takeout β fix the export Google broke

### π€ Rename β batch-rename thousands of files with date & camera patterns

### π
Events β sort by occasion using custom time ranges

---
## Clean up your library
Three cleanup tools that form a single narrative: **Merge** collapses every scattered copy of your library into one Β· **Duplicates** removes the copies that merging exposes Β· **Blurry** clears the shots you'd never keep. Every removal goes to the system **Recycle Bin / Trash and is always undoable**, you approve every decision before anything moves, and everything runs **100% on your computer**.
### π Merge Sources β combine every copy into one clean library
A guided 5-step wizard that merges any number of folders, drives, or Google Takeout exports into **one clean, de-duplicated library**. It detects exact copies, visually similar near-duplicates, and blurry shots in a single scan, and keeps the **best version of each photo** using a deterministic rule (RAW > resolution > size > original-vs-edited > capture date). Non-destructive by default β redundant files are skipped in place, never deleted β with optional one-click cleanup of redundant exact copies to the Trash.

### 𧬠Duplicates β find exact *and* visually similar copies
Finds exact **and visually similar** duplicate photos via perceptual fingerprinting β catching resized, re-compressed, cropped, and slightly-edited copies that byte/hash tools miss. Groups every version of a shot (labelled by *why* they match), suggests the keeper, shows a live "space to recover" counter, and a side-by-side compare view with EXIF. Quick and Comprehensive scan modes.

### ποΈ Blurry β clear out-of-focus shots
Scores every photo for sharpness and sorts **blurriest-first**. A live sensitivity slider sets the cut-off and re-filters instantly with no re-scan; every photo shows its score. Resolution-independent and **ML-free by design** β a transparent, on-device sharpness measure.

> On macOS, Duplicates uses Apple's on-device Vision; on Windows it uses on-device perceptual hashing β both fully on-device. Blurry is ML-free by design.
---
## π€ AI Search (BETA) β find people and screenshots, without the cloud
The kind of search you gave up when you left Google Photos β except **nothing ever leaves your computer**. No account, no upload, no cloud processing.
### π§ Find a Person
Pick one photo of someone and FolioSort finds **every photo of that person** across your library, using on-device face detection and recognition. Review the matches, then **move them all to a folder** in one click β perfect for building per-person albums or pulling every shot of your kid out of 40,000 files.

### π± Screenshots
Automatically detects the screenshots polluting your photo library β receipts, memes, UI captures β and moves them out in one click, so your library is photos again.

> Both run entirely on your machine. Free tier includes a lifetime allowance to try it properly; Pro removes the cap.
---
## Why FolioSort
- **π Private by design** β your photos never leave your computer. No cloud, no account, no upload. Optional reverse geocoding sends only GPS coordinates (never your files); anonymous usage analytics are opt-out.
- **β‘ Built for bulk** β tested on libraries of 1,000s of files; fast XXHash64 integrity checks by default.
- **π Safe by design** β Copy mode is the default, every transfer is checksum-verified, and **one-click Undo** reverses any batch.
- **π₯οΈ Truly native on both platforms** β Swift/SwiftUI on macOS, .NET WPF on Windows. No Electron, small footprint.
- **π― Reads metadata properly** β EXIF date chain (DateTimeOriginal β Digitized β TIFF) with subsecond precision, video creation dates, and GPS reverse-geocoding to city/country.
- **πΆ One-time purchase** β no subscription. Free tier is genuinely useful; Pro is β¬19.99 forever.
---
## Free vs Pro
FolioSort is **free to use** with a generous limit. Pro unlocks power-user features and bulk processing β a **one-time β¬19.99**, no subscription.
| | Free | Pro |
|---|:---:|:---:|
| **Files per operation** | 100 | **Unlimited** |
| Organize by date (Mover) | β | β |
| Batch rename (patterns) | β | β |
| Google Photos Takeout (copy, flat) | β | β |
| Integrity verification (XXHash64) | β | β |
| One-click Undo | β | β |
| Folder presets | 3 | All |
| **Custom folder templates & profiles** | β | β |
| **RAW photo & video formats** | β | β |
| **Regex rename** | β | β |
| **Reverse geocoding + location tokens** (City, Country) | β | β |
| **Extended EXIF tokens** (Lens, ISO) | β | β |
| **Event Organizer** (time-range sorting) | β | β |
| **Google Photos** β Move mode + date-folder organisation | β | β |
| **Cloud/NAS import** (SMB/AFP/iCloud) | β | β |
| **AI Search** (Find a Person, Screenshots) | Free lifetime allowance | **Unlimited** |
| SHA-256 hashing | β | β |
| Advanced duplicate handling | β | β |
| Activity log search & export | β | β |
| Persistent undo history (up to 50 batches) | β | β |
### π Buy FolioSort Pro β β¬19.99, one-time
**[β Buy a license](https://foliosort.lemonsqueezy.com/checkout/buy/5a21a602-f4fe-44a4-8415-bebfb86b5de9)**
1. Complete checkout β receive your **license key** by email
2. Open FolioSort β **Settings β Upgrade to Pro** β paste key β **Activate**
3. Pro unlocked forever on **both macOS and Windows** β works offline, transferable across your computers (up to 3 activations)
---
## Features at a glance
ποΈ Media Organization (Mover)
- Custom folder templates with tokens: `{YYYY}/{MM}/{DD}`, `{Camera}`, `{City}`, `{Month}`, and more
- 4 built-in presets (date, camera, video production, flat archive) + custom profiles
- Simple pattern dropdown or Advanced template builder with token palette
- EXIF-based date sorting for photos; creation-date for MOV/MP4/MKV and more
- Copy or Move Β· optional date-prefix rename Β· dedicated Videos subfolder
- Include non-media files (documents, archives) optionally
- Live preview tree before you commit Β· thumbnail previews Β· drag & drop folders
βοΈ Google Photos Takeout Organizer
- Point at any exported Takeout folder β structure-agnostic
- **Writes original capture date, GPS, and people tags back into each file** via bundled ExifTool
- Reads the real camera model from EXIF, even inside Takeout archives
- Detects CR2/CR3 RAWs that Google renamed to `.jpg` and handles them correctly
- Flat mode (free) or date-folder organisation (Pro) with 7 patterns
- Folder tree preview, newest-first Β· Copy (free) or Move (Pro) Β· live ETA
π€ Mass Rename
- 7 naming patterns (date prefix, date-time, sequential, camera modelβ¦)
- Regex find/replace with capture groups (`$1`, `$2`) and case-insensitive option
- Live before/after preview with match highlighting
- Common presets: remove prefix, replace spaces, extract date digits, strip trailing numbers
- Rename in place or copy to a new folder
π
Event Organizer (Pro)
- Define events and sub-events with start/end times; files sorted by capture timestamp
- Two-level hierarchy (e.g. competition β heats)
- Real-time overlap validation Β· between-slot fallback to parent event
- Unmatched files β "Unmatched" folder or kept in source
- UTC-aligned date pickers Β· live matched/unmatched counts Β· full undo
π Merge Sources
- Guided 5-step wizard: combine unlimited folders, drives, and Google Takeout exports into one library
- Detects exact copies, visually similar near-duplicates, and blurry shots in a single scan
- Keeps the best version of each photo (deterministic: RAW > resolution > size > original-vs-edited > capture date)
- Non-destructive by default β redundant files skipped in place, never deleted
- Every move is hash-verified Β· full keep/skip report
- Optional opt-in cleanup of redundant exact copies to the Recycle Bin / Trash (undoable)
𧬠Duplicates
- Exact **and** visually similar detection via perceptual fingerprinting (catches resized, re-compressed, cropped, edited copies)
- Groups every version of a shot, labelled by *why* they match Β· suggests the keeper
- Live "space to recover" counter Β· side-by-side compare view with EXIF
- Quick vs Comprehensive scan modes
- macOS uses Apple's on-device Vision Β· Windows uses on-device perceptual hashing
- Removals go to the Recycle Bin / Trash with one-tap undo
ποΈ Blurry
- Scores every photo for sharpness, sorted blurriest-first
- Live sensitivity slider sets the cut-off and re-filters instantly β no re-scan
- Every photo shows its score Β· resolution-independent
- ML-free by design β a transparent, on-device sharpness measure
- Removals go to the Recycle Bin / Trash with undo
π€ AI Search (BETA)
- **Find a Person** β pick a reference photo, get every photo of that person; on-device face detection + recognition (Vision + Core ML on macOS, ONNX YuNet + SFace on Windows)
- **Screenshots** β content-based detection of screenshots mixed into your photos
- One-click **Move to Folder** on any result set
- 100% on-device β no cloud, no account, photos never uploaded
- Free lifetime allowance to try it; unlimited with Pro
π GPS Reverse Geocoding & Date Handling
- Reads GPS from EXIF; resolves to city/country/state via reverse geocoding (Apple CLGeocoder on macOS)
- Location tokens: `{City}`, `{Country}`, `{State}`, `{Locality}`
- Smart disk + memory cache (~11 m precision), rate-limited, Null-Island `(0,0)` rejected
- EXIF date chain: DateTimeOriginal β DateTimeDigitized β TIFFDateTime (supports scanned photos)
- Subsecond precision Β· file creation/modification fallback Β· UTC-consistent sorting
π Integrity, Duplicates, Cloud/NAS & Undo
- Post-transfer checksum verification (XXHash64 free Β· SHA-256 Pro)
- Duplicate handling: Skip (free) Β· Ask Each Time / Automatic (Pro)
- Cloud/NAS (Pro): SMB/AFP shares, iCloud Drive auto-download, retry with backoff, disconnect handling, live MB/s
- Undo: reverse the last batch in one click Β· persistent history up to 50 batches (Pro)
- Searchable, exportable Activity log
- Automatic updates via Sparkle (macOS)
---
## How to install
### macOS
1. Download [`FolioSort.dmg`](https://github.com/tiagotrindade/FolioSort/releases/latest/download/FolioSort.dmg).
2. Open the DMG and drag **FolioSort** to **Applications**.
3. Launch it β FolioSort is **signed and notarized by Apple**, so it opens with no Gatekeeper warning.
### Windows
1. Open the **[FolioSort listing on the Microsoft Store](https://apps.microsoft.com/detail/9nlw1xwgk181)**.
2. Click **Get** β the Store installs and launches FolioSort automatically, and keeps it up to date.
> Distributed through the Microsoft Store: signed, sandboxed, and auto-updated β no SmartScreen warnings, no manual unzip.
Prefer a portable version? Grab `FolioSort-x.y.z-windows.zip` from the [latest release](https://github.com/tiagotrindade/FolioSort/releases/latest), right-click β Properties β **Unblock**, extract, and run `FolioSort.exe`.
**Uninstall (Windows):** Start β right-click **FolioSort** β **Uninstall**.
---
## Supported formats
**Photos:** JPG, JPEG, JFIF, PNG, HEIC, HEIF, TIFF, TIF, BMP, GIF, WebP, AVIF, JXL, JP2, J2K, JPF, JPX, JXR, WDP, HDP
**RAW Photos (Pro):** CR2, CR3, CRW (Canon) Β· NEF, NRW (Nikon) Β· ARW, SR2, SRF (Sony) Β· DNG (Adobe) Β· ORF (Olympus) Β· RAF (Fujifilm) Β· RW2 (Panasonic) Β· PEF, PTX (Pentax) Β· SRW (Samsung) Β· X3F (Sigma) Β· RWL, RAW (Leica) Β· MRW (Minolta) Β· 3FR, FFF (Hasselblad) Β· IIQ, CAP (Phase One) Β· KDC, DCR, K25 (Kodak) Β· ERF (Epson) Β· GPR (GoPro) Β· MEF (Mamiya) Β· BAY (Casio) Β· STI (Sinar) Β· MOS (Leaf)
**Videos:** MOV, MP4, AVI, MKV, M4V, 3GP, 3G2, WMV, ASF, FLV, F4V, WebM, MTS, M2TS, TS, M2T, MPG, MPEG, MP2, VOB, DV, OGV, OGG, RM, RMVB, DivX, XviD
**RAW Video (Pro):** BRAW (Blackmagic) Β· R3D (RED) Β· ARI, ARX (ARRI) Β· CRM (Canon Cinema) Β· MXF (Sony) Β· CINE (Phantom) Β· INSV (Insta360) Β· LRV (GoPro) Β· OP1, OP2 (Panasonic P2) Β· DNxHD (Avid) Β· FCPVID (Final Cut)
**Other (Pro):** any file type via the "Other Files" toggle
---
## Requirements
- **macOS** β macOS 14 (Sonoma) or later Β· Apple Silicon (M1βM4) or Intel
- **Windows** β Windows 10 or 11 (x64) Β· .NET runtime bundled, no separate install
---
## Build from source
**macOS**
```bash
swift build && swift run # build & run
make dmg # release DMG
```
**Windows** (from `windows/`)
```powershell
dotnet run --project FolioSort\FolioSort.csproj # build & run (Debug)
# Self-contained single-file release exe
dotnet publish FolioSort\FolioSort.csproj -c Release -r win-x64 `
--self-contained true `
-p:PublishSingleFile=true `
-p:IncludeNativeLibrariesForSelfExtract=true
```
---
## FAQ
**How do I fix the broken dates in my Google Photos Takeout export?**
Point FolioSort's Google Photos mode at the extracted Takeout folder. It reads the sidecar `.json` files Google ships alongside each photo, writes the real capture date, GPS, and people tags back into the files themselves, and sorts everything into dated folders. No scripts, no ExifTool command lines.
**Is it safe to run on the only copy of my photos?**
FolioSort is built around not losing files: **Copy mode is the default** (originals untouched), every transfer is checksum-verified before the source is ever removed, deletions go to the system Trash/Recycle Bin, and every batch has one-click Undo. That said β you should always have a backup of irreplaceable photos, with or without FolioSort.
**Does it work offline? Where do my photos go?**
Nowhere. All scanning, face search, duplicate detection, and organizing runs on your computer. No account, no upload, no cloud processing. The only optional network feature is reverse geocoding, which sends GPS coordinates (never images) to resolve city names.
**What's the catch with the free version?**
No catch, no trial clock, no watermarks: the free tier processes **100 files per batch**, forever. Pro (β¬19.99 one-time, no subscription) removes the limit and unlocks power features like RAW formats, custom templates, and regex rename.
**Does it handle RAW and video?**
Yes β 80+ formats including Canon CR2/CR3, Nikon NEF, Sony ARW, DNG, plus cinema video (BRAW, R3D, ARRI). See the [full list](#supported-formats). RAW formats are a Pro feature.
**Why not just use Apple Photos or Lightroom?**
Those manage a *library database*. FolioSort organizes the **actual files and folders on disk** β ideal if you archive to a NAS or external drive, want a future-proof folder structure that outlives any app, or need to clean up a mess *before* importing it anywhere.
---
## Changelog
See the [Releases page](https://github.com/tiagotrindade/FolioSort/releases) for the full version history.
**Latest β v3.5.0:** **AI Search (BETA)** β on-device **Find a Person** face search and **Screenshots** detection, with one-click Move to Folder Β· **Presets remember source & destination folders** Β· Merge review flags screenshots Β· free 100-file limit reframed as an enabling notice Β· dialog & polish fixes.
**Earlier β v3.x:** Library-cleanup suite β **Merge Sources**, **Duplicates**, and **Blurry** β on both macOS and Windows Β· faster NAS/network-drive scanning Β· in-app Send feedback Β· signed & notarized macOS build, Microsoft Store on Windows.
---
## License
MIT License β see [LICENSE](LICENSE).
---
**If FolioSort saved you an afternoon of manual sorting, [β star this repo](https://github.com/tiagotrindade/FolioSort) β it's how other people find it.**
β¬οΈ **[Download for macOS](https://github.com/tiagotrindade/FolioSort/releases/latest/download/FolioSort.dmg)** Β· πͺ **[Get it on the Microsoft Store](https://apps.microsoft.com/detail/9nlw1xwgk181)** Β· π **[foliosort.app](https://foliosort.app)**
