A photo management application for the GNOME desktop. Organize, browse, and manage your photo library with support for local storage and Immich servers.
- Local and Immich backends — manage photos stored on your filesystem or connect to an Immich server for cloud-based library management
- Offline-first sync — the Immich backend caches everything locally in SQLite, so the app works fully offline and syncs when connected
- Fast grid browsing — keyset-paginated photo grid with six zoom levels and smooth scrolling through large libraries
- RAW format support — import and display CR2, NEF, ARW, DNG, and other RAW formats alongside standard JPEG, PNG, WebP, HEIC, and TIFF
- Video support — import and play video files with GStreamer-based playback
- Albums — create and manage albums to organize your photos
- People — browse photos by person using face data synced from Immich
- Favourites and filtering — star your best photos and filter by favourites, recent imports, or trash
- EXIF metadata — view camera, lens, exposure, GPS, and other metadata in the detail panel
Moments is distributed as a Flatpak. There is no Flathub listing yet — for now, build from source.
Requirements:
- GNOME Builder (recommended), or
flatpak-builderand the GNOME SDK
Using GNOME Builder:
- Clone the repository:
git clone https://github.com/justinf555/Moments.git cd Moments - Open the project in GNOME Builder
- Click Run (or press Ctrl+F5)
Using the command line:
git clone https://github.com/justinf555/Moments.git
cd Moments
make runThis builds and installs the Flatpak locally, then launches the app.
If you want to run unit tests directly, you need these system libraries:
gtk4-devellibadwaita-develgettext-devellibheif-develgstreamer1-develandgstreamer1-plugins-base-devellibsecret-devel
On Fedora:
sudo dnf install cargo gtk4-devel libadwaita-devel gettext-devel \
libheif-devel gstreamer1-devel gstreamer1-plugins-base-devel \
libsecret-devel pkg-configThen run:
cargo testMoments ships with non-destructive rotate, flip, and crop enabled by default. The pixel-adjustment and filter editing sections ship in the binary but are hidden by default while they get more real-world testing miles. You can opt in per-feature via GSettings.
Because Moments is a sandboxed Flatpak with no dconf hole, run
gsettings inside the sandbox with flatpak run --command=gsettings:
# Enable the Adjustments section (exposure, contrast, saturation,
# temperature, tint, vignette).
flatpak run --command=gsettings io.github.justinf555.Moments \
set io.github.justinf555.Moments enable-adjustments true
# Enable the Filters section (Noir, Sepia, B&W).
flatpak run --command=gsettings io.github.justinf555.Moments \
set io.github.justinf555.Moments enable-filters trueRestart Moments after changing either key. To revert, replace set
with reset and drop the trailing value.
For development builds (make run-dev, app id
io.github.justinf555.Moments.Devel), substitute that app id in both
positions (the flatpak run target and the schema id).
Contributions are welcome! Please read CONTRIBUTING.md for guidelines on reporting bugs, suggesting features, and submitting pull requests.
For an overview of the codebase, see ARCHITECTURE.md.
- GitHub Issues — bug reports and feature requests
- GitHub Discussions — questions and general discussion
Moments is licensed under the GNU General Public License v3.0 or later.

