Fast, modern and advanced photo management suite. Runs as a Nextcloud app.
 
 
 
 
 
 
Go to file
Varun Patil 8c9f52c4e2 Add external storage note 2022-09-14 18:26:56 -07:00
.github/workflows Minor fixes + bump up version 2022-09-14 18:20:23 -07:00
appinfo Minor fixes + bump up version 2022-09-14 18:20:23 -07:00
css Fix on window resize 2022-09-13 00:35:35 -07:00
e2e Add CI E2E tests (#37) 2022-09-14 15:50:02 -07:00
img Put error.svg in assets 2022-09-11 22:28:06 -07:00
js Add videos tab 2022-09-13 00:55:32 -07:00
lib Minor fixes + bump up version 2022-09-14 18:20:23 -07:00
src Add videos tab 2022-09-13 00:55:32 -07:00
templates Add vue 2022-08-14 20:54:18 +00:00
tests Rename again to memories 2022-08-18 18:27:25 +00:00
.eslintrc.js Add vue 2022-08-14 20:54:18 +00:00
.gitignore Add basic e2e tests 2022-09-14 11:18:57 -07:00
.npmignore Add vue 2022-08-14 20:54:18 +00:00
COPYING Initial Commit 2022-08-13 01:58:37 +00:00
Makefile Remove old js before prod build 2022-09-13 16:05:58 -07:00
README.md Add external storage note 2022-09-14 18:26:56 -07:00
babel.config.js Change babel targets 2022-09-12 11:19:01 -07:00
bundle.sh Remove screencap from bundle 2022-09-13 16:01:32 -07:00
ci-test.sh Add CI E2E tests (#37) 2022-09-14 15:50:02 -07:00
composer.json Rename again to memories 2022-08-18 18:27:25 +00:00
exiftest.jpg Test for exiftool before running (fix #6) 2022-08-20 02:25:39 +00:00
package-lock.json Reformat lock file 2022-09-14 11:21:17 -07:00
package.json Add CI E2E tests (#37) 2022-09-14 15:50:02 -07:00
phpunit.integration.xml Initial Commit 2022-08-13 01:58:37 +00:00
phpunit.xml Initial Commit 2022-08-13 01:58:37 +00:00
playwright.config.ts Add CI E2E tests (#37) 2022-09-14 15:50:02 -07:00
stylelint.config.js Add vue 2022-08-14 20:54:18 +00:00
tsconfig.json TS migration WIP 2022-09-12 18:33:24 -07:00
webpack.js TS migration WIP 2022-09-12 18:33:24 -07:00

README.md

Memories

📷 Yet another photo management app for Nextcloud

Screenshot

How is this different?

  • 📸 Photo and Video Timeline: Sorts photos by date taken, parsed from Exif data.
  • 🤔 Quick Recap: Jump to anywhere in the timeline instantly.
  • 🖼️ Folders: Browse your and shared folders with a similar, efficient timeline.
  • 🎦 Slideshow: View photos from your timeline and folders easily.
  • 📱 Mobile Support: Relive your memories on devices of any shape and size through the web app.
  • 🗑️ Recycle: Select and delete multiple photos and videos at once.
  • Fast: Memories is extremely fast. Period. More details below.

🚀 Installation

  1. Install the app from the Nextcloud app store
  2. ⚒️ Install exiftool (see below).
  3. Run php ./occ memories:index to generate metadata indices for existing photos.
  4. Open the 📷 Memories app in Nextcloud and set the directory containing your photos. Photos from this directory will be displayed in the timeline, including any photos in nested subdirectories.
  5. Installing the preview generator for pre-generating thumbnails is strongly recommended.

🔨 Installing Dependencies

The exact steps depend on your Nextcloud platform. If you use Docker for your Nextcloud instance, you can install Exiftool by using a custom docker image.

  • Ubuntu/Debian: sudo apt install libimage-exiftool-perl
  • Fedora: sudo dnf install perl-Image-ExifTool
  • Arch Linux: sudo pacman -S perl-image-exiftool
  • Alpine: apk add --no-cache exiftool
  • MacOS: brew install exiftool
  • FreeBSD: sudo pkg install p5-Image-ExifTool

🏗 Development setup

  1. ☁ Clone this into your apps folder of your Nextcloud.
  2. 👩‍💻 In a terminal, run the command make dev-setup to install the dependencies.
  3. 🏗 Then to build the Javascript whenever you make changes, run make build-js. To create a pull request use make build-js-production. Watch changes with: make watch-js.
  4. Enable the app through the app management of your Nextcloud.
  5. 🎉 Partytime!

🤔 Why a separate app?

The approach of this app is fundamentally different from the official Nextcloud Photos app, which is very lightweight and works entirely using webdav. This app instead maintains special metadata in a separate table on the backend, and thus can be considered to have different objectives.

Performance

  • Once properly configured, Memories is extremely fast, possibly one of the fastest web photo viewers.
  • On a server with relatively cheap hardware (Intel Pentium G6400 / 8GB RAM / SSD), loading the timeline takes only ~400ms without cache on a laptop (Intel Core i5-1035G1 / Windows 11 / Chrome) for a library of ~17000 photos totaling 100GB. The test was performed on Nextcloud 24 with nginx, php-fpm and mariadb running in Docker.
  • For best performance, install the preview generator and make sure HTTP/2 is enabled for your Nextcloud instance.

📝 Notes

  • You may need to configure the Nextcloud preview generator and Imagemagick / ffmpeg to support all types of images and videos (e.g. HEIC). If using the official docker image, add OC\Preview\HEIC to enabledPreviewProviders in your config.php.
  • If local time is not found in the photo (especially for videos), the server timezone is used.
  • The app can work with external storage for photos.
    • The photos in the external storage needs to be at the same relative path that is configured for the timeline. For example, if your storage is mounted as /External/ and your photos are in /External/MyPhotos/, then you need to configure the timeline to be MyPhotos/. This will look for MyPhotos/ in all external storages as well as your root home directory, and aggregate these photos.
    • You also need to set up a cron job for the index command if you:
      • Use the same timeline for multiple users.
      • Delete and restore files from the external storage.
    • If you add any photos from outside Nextcloud, you must run the scan and index commands.
    • Indexing may be slow, since all files must be downloaded from the storage. The app currently assumes that the Exif data is present with the first 20MB of each file.
    • This function is experimental and may not work as expected. Please report any issues.

Special Thanks

Nextcloud team. At least one half of the code is based on the work of the Nextcloud Photos.