Skip to content

Latest commit

 

History

909 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Moments

A photo management application for the GNOME desktop. Organize, browse, and manage your photo library with support for local storage and Immich servers.

Features

  • 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

Screenshots

Moments photo grid with sidebar and albums

Moments preferences dialog with library stats

Installation

Moments is distributed as a Flatpak. There is no Flathub listing yet — install the bundle attached to a GitHub Release, or build from source.

From a release bundle

Every release ships a single-file .flatpak bundle. Download moments-<version>-x86_64.flatpak from the latest release and install it:

flatpak install --user moments-<version>-x86_64.flatpak
flatpak run io.github.justinf555.Moments

Moments needs the GNOME 50 runtime. The bundle points at Flathub as its runtime source, so Flatpak offers to add that remote and pull the runtime if you don't have it yet.

Bundles are installed as a one-off, so flatpak update won't pick up new versions — download and install the next bundle the same way.

Verifying the download. Each release also carries a .sha256 file:

sha256sum -c moments-<version>-x86_64.flatpak.sha256

Signed releases additionally include moments-releases.asc, the public key the bundle was signed with. The GPG signature and a copy of that key travel inside the bundle itself, so the install is trust-on-first-use — the published key is there so the signing identity is a matter of record and stays stable across releases:

gpg --show-keys moments-releases.asc    # fingerprint of the release signing key

Nightly builds

Every merge to main publishes a nightly bundle at a URL that never changes:

wget https://github.com/justinf555/Moments/releases/download/nightly/moments-nightly-x86_64.flatpak
flatpak install --user moments-nightly-x86_64.flatpak
flatpak run io.github.justinf555.Moments.Nightly

Nightlies have had no release testing and may be broken at any time — they exist so you can try an unreleased fix without building it yourself.

A nightly installs under its own application id, so it runs alongside a production install with a separate library, settings and keyring entry rather than replacing it. It carries an orange icon with a NIGHTLY banner and a striped headerbar so you can tell the two apart, and reports a version like 0.4.1+6.g7ecfa4a — six commits past v0.4.1, at that commit — which is the thing to quote in a bug report.

The nightly release page names the commit each build came from.

Building from Source

Requirements:

  • GNOME Builder (recommended), or
  • flatpak-builder and the GNOME 50 SDK:
    flatpak install --user flathub org.flatpak.Builder \
        org.gnome.Sdk/x86_64/50 org.freedesktop.Sdk.Extension.rust-stable/x86_64/25.08
    The Makefile uses a host flatpak-builder if one is installed and falls back to the Flatpak-packaged org.flatpak.Builder otherwise. Override with make run FLATPAK_BUILDER=… if you have both.

Using GNOME Builder:

  1. Clone the repository:
    git clone https://github.com/justinf555/Moments.git
    cd Moments
  2. Open the project in GNOME Builder
  3. Click Run (or press Ctrl+F5)

Using the command line:

git clone https://github.com/justinf555/Moments.git
cd Moments
make run

This builds and installs the Flatpak locally, then launches the app.

Building your own bundle:

make bundle           # → moments-<version>-<arch>.flatpak (+ .sha256)
make install-bundle   # build if needed, then flatpak install --user

make bundle builds the production app ID from the working tree and packs it into a redistributable single-file bundle — the same command the release workflow runs. Pass GPG_KEY=<key-id> (optionally GPG_HOMEDIR=<dir>) to sign it.

System Dependencies (for cargo test outside Flatpak)

If you want to run unit tests directly, you need these system libraries:

  • gtk4-devel
  • libadwaita-devel
  • gettext-devel
  • libheif-devel
  • gstreamer1-devel and gstreamer1-plugins-base-devel
  • libsecret-devel

On Fedora:

sudo dnf install cargo gtk4-devel libadwaita-devel gettext-devel \
  libheif-devel gstreamer1-devel gstreamer1-plugins-base-devel \
  libsecret-devel pkg-config

Then run:

cargo test

Experimental features

Moments 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 true

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

Contributing

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.

Getting in Touch

License

Moments is licensed under the GNU General Public License v3.0 or later.

About

A GNOME photo management app, targeting GNOME/GTK4

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages