Skip to content

diffractor/diffractor

Repository files navigation

Diffractor

CI

Free, high-performance photo and video organizer for Windows. Optimized for speed and local file control�no cloud storage or subscriptions required.

Features

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

Quick Start

  1. Download from diffractor.com and install
  2. Point to your media folders�Diffractor indexes automatically
  3. Browse via sidebar (date, location, folder, file type)
  4. Apply ratings/tags via keyboard shortcuts or UI; use Compare view for burst sorting
  5. Sync to network drives; use metadata tools for maintenance

Why Diffractor? Fast (handles large libraries without lag), private (local-only), lightweight, free.

Deployment Options

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).

Building

git clone --recursive https://github.com/diffractor/diffractor.git

Open df.sln in Visual Studio 2022. Submodules: FFmpeg, XMP-SDK.

Build Script

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.

Contributing

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.

Dependencies

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

About

The fastest photo and video organizer for Windows.

Resources

Stars

Watchers

Forks

Contributors

Languages