A desktop photo comparison tool for Windows and Linux. Open a folder of images and compare them side-by-side with synchronized zoom and pan. Mark favorites with a heart, then copy them — along with any sidecar files — to a destination folder. Delete unwanted images directly from the app, including their RAW originals and metadata sidecars.
- Side-by-side panels — two independent image panels displayed simultaneously
- Synchronized zoom & pan — mouse-wheel zoom, touchpad pinch, touchscreen pinch, and drag-to-pan affect both panels at once; double-click to reset
- Independent navigation — each panel navigates through the image list separately using on-screen buttons or arrow keys
- Push to other panel —
→/←buttons at the top of each panel instantly load its current image into the opposite panel - EXIF-sorted loading — images are sorted by date taken (falls back to file modification time when EXIF is absent)
- Favorite selection — click the heart icon on any image to mark it; click again to deselect
- Copy with sidecars — copies selected images to a chosen folder; automatically copies matching sidecar files (RAW, XMP, JSON, TXT) alongside each image
- Delete with sidecars — permanently deletes the current image and any accompanying sidecar files after confirmation
- Single/dual view toggle — switch between side-by-side and single-panel view from the toolbar
- Busy indicator — a loading overlay and wait cursor appear while a large folder is being scanned
- Thumbnail Selector Dialog — view all images as thumbnails for easy selection
- No .NET install required — the zip already bundles the .NET 10 runtime alongside the app
The zip contains a folder of files — the app and the bundled .NET 10 runtime. There is no single-file executable; just extract the zip and run the binary inside.
Windows — extract PhotoComp-windows-x64-vX.Y.Z.zip, then:
PhotoComp.exe
Linux — extract PhotoComp-linux-x64-vX.Y.Z.zip, then:
chmod +x PhotoComp
./PhotoCompgit clone https://github.com/your-org/PhotoComp.git
cd PhotoComp
dotnet run --project PhotoComp/PhotoComp.csprojClick 📁 Open Folder in the toolbar and choose a folder containing JPEG or PNG images. Images are loaded in EXIF date order (oldest first). The left panel starts at the first image and the right panel starts at the second.
| Action | Result |
|---|---|
| Click ◄ / ► buttons | Move to previous / next image in that panel |
| Click a panel, then ← → arrow keys | Keyboard navigation for the focused panel |
| Click → (top of left panel) | Load the left panel's current image into the right panel |
| Click ← (top of right panel) | Load the right panel's current image into the left panel |
| Action | Result |
|---|---|
| Mouse wheel or touchpad pinch | Zoom in / out (both panels, 0.1× – 10×) |
| Touchscreen two-finger pinch | Zoom in / out on touch displays |
| Left-drag | Pan the image (both panels move together) |
| Double-click | Reset zoom and pan to defaults, or zoom to pixel-level (toggle) |
| ⊙ Reset Zoom button | Reset zoom to 100% |
The current zoom level is shown in the toolbar as a percentage.
Click the ♡ heart icon in the top-right corner of a panel to mark the current image as a favorite. A filled red ♥ indicates it is selected. Click again to deselect. The toolbar shows the running count: 💾 Copy Selected (N).
- Heart one or more images.
- Click 💾 Copy Selected (N) in the toolbar.
- Choose a destination folder.
- A summary dialog reports how many files were copied, how many were skipped (already present), and details of any errors.
For each image copied, PhotoComp also copies any matching sidecar files from the same source folder — RAW originals (.arw, .cr2, .cr3, .nef, .raf, .rw2, and many more), XMP metadata (.xmp), and plain-text companions (.json, .txt). For example, IMG_1234.jpg will carry over IMG_1234.arw and IMG_1234.xmp if they exist. Originals are never modified or overwritten.
Press Del on the keyboard (or use the delete button in the panel) to permanently delete the current image. A confirmation dialog lists the image and any sidecar files that will also be removed. Deletion cannot be undone.
Click ⊟ Single View in the toolbar to hide the right panel and give the left panel the full window width. Click ⊞ Dual View to restore the side-by-side layout.
Each panel shows a small overlay in the bottom-left corner with the image's pixel dimensions and EXIF date/time:
3024×4032 | 2024-06-15 14:32:07
The bottom-right corner displays camera EXIF info for photos, or embedded prompt info for AI generated images.
The default version number is read from version.txt in the repository root. Edit that file to change it project-wide, or pass -Version / a positional argument to override for a single build.
.\run-build-windows.bat
.\run-build-windows.bat 1.2.0.\run-build-windows-arm64.bat
.\run-build-windows-arm64.bat 1.2.0.\run-build-linux.batchmod +x build-linux.sh
./build-linux.shNote: The Linux zip is built without execute-bit preservation. Recipients may need to run
chmod +x PhotoComponce after extracting.
dotnet test PhotoComp.Tests/PhotoComp.Tests.csproj| Format | Extension |
|---|---|
| JPEG | .jpg, .jpeg |
| PNG | .png |
When copying or deleting, PhotoComp also handles any matching sidecar file with the same base name:
| Category | Extensions |
|---|---|
| XMP metadata | .xmp |
| Plain text | .json, .txt |
| Canon RAW | .cr2, .cr3 |
| Nikon RAW | .nef, .nrw |
| Sony RAW | .arw |
| Fujifilm RAW | .raf |
| Panasonic / Leica RAW | .rw2, .raw, .rwl |
| Olympus / OM System RAW | .orf |
| Pentax RAW / DNG | .pef, .dng |
| Hasselblad RAW | .3fr, .fff |
| Phase One / Mamiya RAW | .iiq, .mef |
| Sigma RAW | .x3f |
| Minolta RAW | .mrw |
| Samsung RAW | .srw |
| Kodak RAW | .kdc, .dcr |
| Epson RAW | .erf |
RAW files are not rendered as viewable images — only JPEG and PNG are displayed in the panels.
MIT
Initial version mostly coded by Claude Sonnet 4.5 and 4.6, with design, guidance, and testing by Avidgamefan.