Free, high-performance photo and video organizer for Windows. Optimized for speed and local file control�no cloud storage or subscriptions required.
| Category | Capabilities |
|---|---|
| Viewing | Unified photo/video/audio playback; native support for most formats including RAW |
| Search | Instant metadata-based search (tags, location, camera data) via local indexing |
| Metadata | Read/write XMP, IPTC, EXIF, ID3; add tags, ratings, location |
| Organization | Side-by-side comparison, duplicate detection ("Presence" feature) |
| Sync | Bidirectional sync to NAS/network drives for backup and collaboration |
| Editing | Resize, rotate, crop, color adjustment |
- Download from diffractor.com and install
- Point to your media folders�Diffractor indexes automatically
- Browse via sidebar (date, location, folder, file type)
- Apply ratings/tags via keyboard shortcuts or UI; use Compare view for burst sorting
- Sync to network drives; use metadata tools for maintenance
Why Diffractor? Fast (handles large libraries without lag), private (local-only), lightweight, free.
| Distribution | Description |
|---|---|
| Windows Desktop | Traditional installer (diffractor-setup.exe) with auto-update support |
| Windows Store | MSIX package for Microsoft Store distribution (updates handled by Store) |
| Portable | ZIP archive for standalone use without installation |
Both Desktop and Store builds share the same codebase. The WINSTORE preprocessor define controls Store-specific behavior (disables built-in auto-update since the Store handles updates).
git clone --recursive https://github.com/diffractor/diffractor.gitOpen df.sln in Visual Studio 2022. Submodules: FFmpeg, XMP-SDK.
Use dd.ps1 from a Developer PowerShell:
| Command | Description |
|---|---|
.\dd.ps1 |
Show usage information and current version |
.\dd.ps1 desktop |
Build desktop versions (Win32 + x64), auto-increments build number |
.\dd.ps1 store |
Build Windows Store MSIX package, auto-increments build number |
.\dd.ps1 run |
Run the recently built diffractor64.exe |
.\dd.ps1 bump-build |
Manually increment build number without building |
.\dd.ps1 bump-ver |
Increment minor version (e.g., 1.26.2 ? 1.26.3) |
Prerequisites for release builds: NSIS, 7-Zip, Windows SDK, code signing certificate.
See implementation.md for architecture details.
Contributions welcome via issues.
Translations: Edit PO files with poedit. Files in exe/languages. Use German as template for new languages. Test by copying to %LOCALAPPDATA%\Diffractor\languages.
Tests: Built-in runner accessible via toolbar checkmark button when launched from Visual Studio. Press Escape to exit test mode. Command-line test runs are also supported with diffractor64.exe /test or diffractor64.exe /test:*filter*; the process exits with 0 when all selected tests pass and 1 when any test fails.
No package manager is used. Source code for each library is copied into third-party/ (or Include/ for header-only libs) and built via custom .vcxproj files maintained in this repo. To update a dependency: download/clone the new source, replace the files in the corresponding folder, adjust the .vcxproj if source files were added/removed, and verify the build.
| Library | Version | Folder | Type | Update Source |
|---|---|---|---|---|
| brotli | 1.1.0 | third-party/brotli |
Source copy | Download release from google/brotli, replace c/ sources |
| bzip2 | 1.0.8 | third-party/bzip2 |
Source copy | Download from libarchive/bzip2 |
| dav1d | 1.4.3 | third-party/dav1d |
Source copy | Clone from videolan/dav1d, copy sources, regenerate vcs_version.h |
| dng-sdk | 1.7.1 | third-party/dng |
Source copy | Download from Adobe DNG SDK, mirror at niclaswue/dng_sdk |
| expat | 2.7.1 | third-party/expat |
Source copy | Download release from libexpat/libexpat, replace lib/ sources |
| ffmpeg | main | third-party/FFmpeg |
Fork (submodule) | Rebase diffractor/FFmpeg on upstream FFmpeg/FFmpeg. Fork adds custom ffmpeg.vcxproj for MSVC |
| highway | 1.3.0 | third-party/highway |
Source copy | Download release from google/highway |
| hunspell | 1.7.2 | third-party/hunspell |
Source copy | Download release from hunspell/hunspell, replace src/hunspell/ sources |
| libarchive | 3.8.1 | third-party/libarchive |
Source copy | Download release from libarchive/libarchive |
| libde265 | 1.0.8 | third-party/libde265 |
Source copy | Download release from strukturag/libde265, update de265-version.h |
| libebml | 1.4.5 | third-party/libebml |
Source copy | Download release from Matroska-Org/libebml |
| libexif | 0.6.25 | third-party/libexif |
Source copy | Download release from libexif/libexif |
| libheif | 1.18.0 | third-party/libheif |
Source copy | Download release from strukturag/libheif, update heif_version.h |
| libjpeg-turbo | 3.0.0 | third-party/LibJpeg |
Source copy | Download release from libjpeg-turbo/libjpeg-turbo, regenerate jconfig.h for MSVC |
| libjxl | 0.10.3 | third-party/libjx |
Source copy | Download release from libjxl/libjxl |
| liblzma | 5.4.6 | third-party/liblzma |
Source copy | Download release from tukaani-project/xz, copy src/liblzma/ sources |
| libmatroska | 1.7.1 | third-party/libmatroska |
Source copy | Download release from Matroska-Org/libmatroska |
| libopenmpt | 0.8.3 | third-party/libopenmpt |
Source copy | Download release from lib.openmpt.org, mirror at OpenMPT/openmpt |
| libpng | 1.6.50 | third-party/libpng |
Source copy | Download release from pnggroup/libpng |
| LibRaw | 0.21.2 | third-party/LibRaw |
Source copy | Download release from LibRaw/LibRaw |
| libwebp | 1.4.0 | third-party/webp |
Source copy | Download release from webmproject/libwebp |
| minizip-ng | 3.0.6 | third-party/minizip |
Source copy | Download release from zlib-ng/minizip-ng |
| parallel-hashmap | 2.0.0 | Include/parallel_hashmap |
Header-only | Copy headers from greg7mdp/parallel-hashmap into Include/parallel_hashmap/ |
| rapidjson | main | third-party/rapidjson |
Header-only | Copy headers from Tencent/rapidjson include/rapidjson/ |
| skcms | main | third-party/skcms |
Source copy | Copy from skia.googlesource.com/skcms, mirror at niclaswue/skcms |
| sqlite | 3.50.4 | third-party/sqlite |
Source copy | Download amalgamation from sqlite.org, mirror at niclaswue/sqlite |
| utf-cpp | 4.0.6 | Include/utf8-cpp |
Header-only | Copy headers from nemtrif/utfcpp into Include/utf8-cpp/ |
| xmp-sdk | 6.0.0 | third-party/xmp |
Fork (submodule) | Rebase diffractor/XMP-Toolkit-SDK on upstream adobe/XMP-Toolkit-SDK. Fork adds: POPM/TPE2 reconciliation for MP3, Windows tag support, C++17 fixes, WebP support from Exempi |
| zlib-ng | 2.0.7 | third-party/ZLib |
Source copy | Download release from zlib-ng/zlib-ng, configure for zlib-compat mode |