Fast, modern and advanced photo management suite. Runs as a Nextcloud app.
 
 
 
 
 
 
Go to file
Varun Patil 490be27b34 Update docs 2022-10-20 13:45:00 -07:00
.github/workflows Add PHP CS fixer 2022-10-19 09:51:16 -07:00
.tx [tx-robot] Update transifex configuration 2022-10-01 03:18:37 +00:00
appinfo Update docs 2022-10-20 13:45:00 -07:00
e2e test: wait for cache 2022-10-16 18:22:09 -07:00
img Put error.svg in assets 2022-09-11 22:28:06 -07:00
l10n [tx-robot] updated from transifex 2022-10-19 03:15:49 +00:00
lib Also bundle perl script 2022-10-20 13:41:34 -07:00
src Add support for memes from the 90s 2022-10-19 16:06: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
.gitattributes Ignore l10n in language stats 2022-10-13 21:49:56 -07:00
.gitignore Bundle exiftool 2022-10-20 12:31:12 -07:00
.l10nignore Add l10n files for bot 2022-09-16 16:45:11 -07:00
.npmignore Add vue 2022-08-14 20:54:18 +00:00
.php-cs-fixer.php Add PHP CS fixer 2022-10-19 09:51:16 -07:00
CHANGELOG.md Update changelog 2022-10-17 10:45:46 -07:00
COPYING Initial Commit 2022-08-13 01:58:37 +00:00
Makefile Update docs 2022-10-20 13:45:00 -07:00
README.md Update docs 2022-10-20 13:45:00 -07:00
babel.config.js Change babel targets 2022-09-12 11:19:01 -07:00
bundle.sh Bundle exiftool 2022-10-20 12:31:12 -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
get-exiftool.sh Also bundle perl script 2022-10-20 13:41:34 -07:00
package-lock.json Update scroller dep 2022-10-19 16:12:27 -07:00
package.json Update scroller dep 2022-10-19 16:12:27 -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 Change ts target to es2017 2022-10-12 19:59:55 -07:00
webpack.js Add service worker 2022-10-16 19:52:44 -07:00

README.md

Screenshot

Photo Viewer and Manager

Memories is a photo management app for Nextcloud with advanced features including:

  • 📸 Timeline: Sort photos and videos by date taken, parsed from Exif data.
  • Rewind: Jump to any time in the past instantly and relive your memories.
  • 🤖 AI Tagging: Group photos by people and objects using AI, powered by the recognize app.
  • 🖼️ Folders: Browse your own and shared folders with a similar, efficient timeline.
  • 🎦 Slideshow: View photos from your timeline and folders easily.
  • 📱 Mobile Support: Works on devices of any shape and size through the web app.
  • ✏️ Edit Metadata: Edit Exif dates on photos quickly and easily.
  • 📦 Archive: Store photos you don't want to see in your timeline in a separate folder.
  • Fast: Memories is extremely fast. Period. More details below.

How to support development

  • 🌟 Star this repository: This is the easiest way to support the project and costs nothing.
  • 🪲 Report bugs: If you find a bug, please report it on the issue tracker.
  • 📝 Contribute: If you want to contribute, please read file / comment on an issue and ask for guidance.

🚀 Installation

  1. Install the app from the Nextcloud app store.
  2. Run php ./occ memories:index to generate metadata indices for existing photos.
  3. 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.
  4. Installing the preview generator for pre-generating thumbnails is strongly recommended.

🏗 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 Typescript whenever you make changes, run make build-js. 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.
  • All photos in the timeline must be on a single storage. For example, you cannot have a mounted directory inside your photos directory.
  • The app can work with external storage for photos. Just set the mountpoint as the timeline directory.
    • 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.
  • The archive feature moves photos to a separate folder called .archive at the root of your timeline. You can use this, for example, to move these photos to a cold storage.

Special Thanks

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