Show HN: Memories – FOSS Google Photos alternative built for high performance (memories.gallery)

797 points by radialapps ↗ HN
Memories is a FOSS Google Photos alternative that you can self-host (it runs as a Nextcloud plugin).

Website: https://memories.gallery/

GitHub: https://github.com/pulsejet/memories

Demo Server: https://demo.memories.gallery/apps/memories/ (demo runs in San Francisco on a free-tier cloud vm)

Memories has been built ground-up for high performance and is extremely fast when configured correctly. In our testing environment, it can load a timeline view with 100k photos in under 500ms, including query and rendering time!

Some features to highlight:

* A timeline similar to Google Photos where you can skip to any time in history instantly.

* AI-based tagging that runs locally on your server, identifying and tagging people and objects.

* Albums and external sharing.

* Metadata editing support

* A world map of your photos, supported both on mobile and the web

* Did I mention it's extremely fast?

Would love to hear feedback from the HN community! :)

244 comments

[ 1.9 ms ] story [ 108 ms ] thread
What are your thoughts on PhotoPrism?
It's nice, but $24/year/forever to have multiple users is a bit much...
$24 a year is too much?
When every other aspect of the app is basically free, yes. I would pay once for the functionality, not as a subscription.
They offer a lifetime price of $128.

https://www.photoprism.app/membership/faq

> Are there alternatives to a recurring subscription? > > Yes, our Plus members automatically receive a free Lifetime Essentials membership after 24 months

My thoughts? Too slow. No timeline view. Looks terrible.
Looks polished!
Just curious: what's the business model for something like this.
Doesn't look like it's a business, so probably no business plan.
Ugh, it's tied to Nextcloud. Is there a standalone option?
Yes! It's open source, so simply download the project, make the requisite changes, and then run it wherever you like.

https://github.com/pulsejet/memories

I think you meant to say "No, but it's open source, so simply download the project, make the requisite changes, and then run it wherever you like."

When you say "Yes, it's OSS so you can just do it yourself" it's generally viewed as snarky and misleading, as the question wasn't "can I modify it" but "is it available already in another form?" It's just not helpful to anyone to word it like that backwards manner.

I found NextCloud pretty easy to set up...from yunohost.org.

By contrast, when I tried to install it manually, the distribution install scripts broke on the second run, on changes that the very same script made on the first run. Anti-idempotent, I dropped it with the impression of drumming up hosting or consulting business.

(comment deleted)
I don't know anything about Nextcloud, what's wrong with it?
Hi, this looks super polished, congratulations. I've got a couple of questions:

- Does the metadata editing allow it to write back to the file, storing the edited metadata in a sidecar or in the EXIF data? - Does it support some kind of auto-stacking? E.g. having raw files alongside exported tiff/jpg and recognizing that they are the same file? Especially for a nextcloud based solution, that'd be awesome

Yes. Yes.
Does it preserve and/or allow editing of the text metadata (typically, the generative prompt) appended to PNG files created with Stable Diffusion?
No idea what that is
older versions of png did not support an exif chunk, so other metadata/property chunks were/are sometimes used
That's exif metadata, so it should Just Work™
How does this compare to immich? I spent a few weekends ago setting that up and it's working great, though it doesn't always detect faces correctly and swiping through images is a bit slower than Google photos
The main thing to me was that since this runs on Nextcloud its more extensible as the photos are just stored under the files and you can use various other apps to do what your heart desires. The other aspect is you get your own Gdrive alternative. You may or may not want this.

For mobile compatibility Nextcloud is better since you can choose which folder photos go to and you can essentially automatically backup albums whereas with Immich you can't automatically specify which album photos from a directory should go [1].

In addition to this, Immich isn't too stable yet and each time you update the server all clients have to be on the latest version, at least since the last time I used Immich.

1. https://github.com/immich-app/immich/discussions/1678

This is moot.

- Immich supports external libraries

- Use docker compose and never worry about versions breaking

> This is moot. Immich fully supports external libraries.

You're correct, Immich does support external libraries. To be more elaborate with my original comment, I meant inbuilt apps of Nextcloud which integrate well and complement the memories app. An example app would be the Face recognition one or Recognize if you fancy a different implementation. Nextcloud is after all an ecosystem so using memories gains you the other benefits of such an ecosystem. This might be overkill for some so it's upto your usecases.

Versions breaking is an issue since both mobile and server clients have to be on the same version. Compared to Nextcloud Memories this is not an issue. This was an issue when I've last used Immich so this may have changed since then.

External libraries? What do you mean by that? External storage?

The last time I looked, Immich can’t work with a existing file and folder structure without importing (copy) everything in his own structure (database). That’s a big no go for me.

In Memories, the file structure of your photos is preserved as-is. And you can run it alongside with other solutions that respect your folder structure.

EDIT: looks like Immich can work with external folders. But: Does it put pictures from my phone in that external folder or in its own folder?

Immich on mobile doesn't give you much flexibility with where each local folder gets uploaded to yet so it doesn't preserve folder structure. If you're using the CLI you can program the structure and tell it which album a folder can map to.
You can add any folder to immich as external library. No need to use cli.

So if you want custom structure, synchronize files from mobile to server in any way you prefer (Syncthing, PhotoSync, etc.) and add that folder as an external library.

This is quite a basic feature which should be inbuilt to the Immich mobile app. It's a common use case to want your screenshots, WhatsApp media album to not be displayed on the main timeline.

If you're running an instance for less technical users it's more hiccups to setup syncthing etc and have to explain why another app is needed.

Face recognition is a hard task but you can manually correct the AI and it learns from that. Performance is the #1 goal here. I actually profiled this side-by-side and it's actually faster than Google Photos for my personal deployment.
Having tens of thousands of photos in Immich, I am surprised how accurate the model is. It rarely gets it wrong and when it gets it wrong, it usually happens with similar baby faces of close relatives.
(comment deleted)
How complex is it to configure memories? I own a hosted instance of NextCloud from Hetzner, but I would rather not misconfigure it. Also, is there a mobile app? I think not having one is limiting, since most of the time I want to look at the pictures on the phone
Everything can be mostly configured through the admin panel, maybe 15-20 minutes?

There's a mobile app for Android: https://play.google.com/store/apps/details?id=gallery.memori...

On iOS, you can use the PWA ("add to homescreen") and it behaves almost exactly as a native app

How complex is it to configure? I have an instance of NextCloud from Hetzner, but I would rather not misconfigure it.

Also, is there a mobile app? Most of the time when I look at pictures I am on the phone

As easy as downloading an app from the store and telling it which directory to work with.

If you need the AI features those require separate apps and depending on your deployment it might need some effort. I'm running a docker image and had to ensure I have some of the required libraries for the AI things to work. It isn't too hard to misconfigure though and I believe there's a decent amount of resources for this.

As for mobile app, there isn't an explicit one but the webapp interface is mobile friendly and works pretty well. I also use NC photos and it still works with the tags and face recognition things. That app doesn't require "Memories" as far as I know.

There is an Android app, not for iOS yet. https://play.google.com/store/apps/details?id=gallery.memori...
Is there any photo-syncing at play? Or it's just a viewer for the data already on your NextCloud instance.

If I take photos with my phone, I have to manually upload them to NextCloud?

Just use the Nextcloud Android / iOS apps for auto upload. Memories automatically picks up everything that's uploaded.
Basically the last thing keeping me locked into Google Photos is it's social features.

I see "external sharing" is mentioned but haven't found more information on that. Ideally I'd want the option to share an album with password protection, doesn't require an account to view, and allows comments on photos. Bonus would be to have a running album feed with view receipts per account.

I know that's a lot but wanted to be specific. I'm ready to migrate but haven't found a platform that has feature parity on this front.

It sounds like you can implement this by hosting your photos on a server with password access. You don't even need google for this.
You can share folders and albums that don't need an account to view. Folders do support password protection as well.
Does it support allowing others to upload photos as well (eg from a group trip)? If it does I’ll install it today on my homelab.
Folders: this is fully supported. You can share out links of folders that anyone can upload to etc. These get stored in that folder (in your account) then.

Albums: partial support. You can share links to albums that are viewable or share albums with others with an account on your nextcloud instance. People who have an account can upload photos to the shared albums.

I’m very interested in this. Is there a demo server or a description of what the process looks like for uploading to one of these folders from an iPhone or Android device?
I ask because the demo server doesn't seem to allow uploading any images.
This for me too.

The reason I pay for tons of extra Google photos storage is it tags and uploads and pics of my kiddos to an album shared with all the grandparents. It's their favourite app in the world and I'm never allowed to cancel.

Could I replicate that here?

Photoprism has gallery sharing and the share links can have expirations.
I will take whatever is the most stable. I don't need a lot of feature, just a timeline and gallery with albums. Immich fits it for now, but it is way too focused on piling features and is bleeding edge. I hope memories has stability as its goal.
Indeed. Backward compatibility is also a major goal and there have been almost no major breaking changes since v2 (at v7 currently)
I've been using it for quite a while and had no issues with the app at all. Only one hick-up with Nextcloud itself but that was really my fault if I'm honest
(Still installing/configuring.)

Awesome, this is the main piece of puzzle I (or rather: my wife) miss from Nextcloud (the default Photos has terrible performance and lacks some features). Gonna set it up. Also nice to see Face Recognition app is used. Now I'm gonna have to edit my docker-compose.yml for the dependencies but that is fine.

Also, I've been trying Photoprism and also I tried Immich in past. They have disadvantages: they don't sync with whatever got uploaded to Nextcloud and they either do not have a mobile front-end or it is some web app. They also have stability issues, though I had most success with Photoprism.

I suppose it won't be as useful to me as it could be as I'm stripping all EXIF data from any photo uploaded by Nextcloud because I fear my wife stupidly just shares whatever when she should not. Yes, I know you can do OSINT analysis anyway, but that is a skill as of yet.

Try https://ente.io/

I like it very much.

Thanks, that looks really interesting!
Not for me. I self-host Nextcloud in my home network. I have a Wireguard VPN set up to it, too. I'll have fiber (1000/1000 mbit) soon, so not worried about network speed. I prefer something native in Nextcloud. And I do not need E2E encryption; I already use FDE in this VM.

That said, to each their own, thanks for sharing.

Your setup is what I set out to build. Ente.io is what I landed in after I managed to put it off so long. Congrats on actually doing it
My wife ain't happy with performance. Hence I tried Immich, Photoprism, even attempted using Redis but not satisfied with any of these.

After installing Nextcloud Preview plugin it might've improved. I am currently processing entire library with Nextcloud Face Recognition plugin model 4 (= 1 + 3) since model 1 only recognizes our kids as same person. Almost done, then I tag clusters and give it a whirl.

Nextcloud Memories is ready as I speak but because I put strip EXIF on uploads, it isn't as useful.

None of those negatives you mentioned apply to Immich.
Man, I've yet to find the perfect solution for this. Photoprism was really promising at first but the Dev can't seem to handle the stress of trying to make this pay his rent. Sometimes he reacts really pissed if people complain about something missing/broken, and not just if they're unreasonable or something. Just not very clever if that's the same people who are paying you. Pull requests get denied or rejected for the smallest of reasons. yes, it's his project and you should not just merge any crappy code, but it's things like rejecting an API extension by developers of the mobile app so they eventually give up on the app.

The facial recognition is subpar and performs worse the more faces you tagged, but it's always the users fault somehow, instead of accepting that yes even though you put a lot of work and effort into it, the result might be bad.

Then somehow immich comes along and manages to basically become a better photoprism over night because it's somehow just a well managed project accepting a lot of contributions without the code turning into complete shit.

I don't know what to say. I'm still a sponsor of photoprism bot it seems the guy running it is his own worst enemy in some ways.

Being a "hero" open source dev for a project like that can require a lot of neuroticism.

Sometimes it works, but sometimes the project is just too big, I think.

Somehow I'm relieved by this comment, that it's not just me. I've tried communicating with the author about face recognition and always got answers that I considered slightly rude and off-putting. I shook it off, contributed some money, and I'm still a user. I'll take a look at immich now though.
(comment deleted)
For having used Memories on Nextcloud, and having spent hours trying to micro optimize the Nginx & PHP configuration, I can safely say that, while it is better than the Nextcloud’s native Photos app, this is absolutely nowhere near to Immich, Filerun, or surprisingly even a dumb SMB share (which doesn’t have thumbnail caching…!). I’ve really tried hard, as Immich’s support for external libraries was still in a PR at that time, and didn’t want to have two separate tools to grab files and grab photos.

A big part of the problem, it seems, is that, when you have a large library, and you jump/scroll to a specific year or so, it won’t cancel the previous page(s) worth of thumbnails loading. So as soon as you’re scrolling to search for something, it quickly accumulates hundreds of useless requests that quickly overload the PHP workers, and make everything crawl to a standstill.

I personally had to give up. When trying to grab photos from abroad for my shortly upcoming proposal, I’ve literally deleted Nextcloud/Memories, plopped Immich in docker compose, let it index/transcode/generate thumbnails from scratch against my “external library” (so Immich doesn’t duplicate the medias), and that ended up savings me days of buffering, and was able to find the nice pictures for the occasion!

(R740xd with 48 cores and 96TB SSD-backed ZFS pool)

It's silly to micro optimize nginx / php when you have docker. Just use the Nextcloud Docker image or AIO and be done with it, everything is pre-optimized.

Thumbnail caching exists (it's even highly configurable), there's absolutely zero buffering even with 100k photos+ on a raspberry pi. You obviously did not read the documentation or install the preview generator (which the docs clearly tell you to)

Your deployment skills are hot garbage

EDIT 3: ^the last line was in response to something that has been edited out of the original comment

EDIT: the comment this is in reply to was edited multiple times. This is pointless and a lot of it is just false.

EDIT 2: (at least currently the previous comment claims unnecessary PHP requests) this only happens if your configuration is incomplete; you didn't install preview generator as the docs say. Secondly it happens exactly once, the first time you see the image. All other requests are gracefully cancelled.

Absolutely was using the AIO image, with thumbnail generation enabled for every formats of my library (another thing you need to manually edit in Nextcloud’s configuration as by default the format list is limited).

And it’s only “pre-optimized” if you are cool with PHP memory limit crashes, PHP operation timeouts, PHP request size limits, and the works.

Another joy associated with using Nextcloud sync is that uploads don’t even seem to support multi-part resumable uploads. So not only is it crazy slow, if there’s any error during the auto-upload of a 2G video clip, or the app is temporally backgrounded by iOS, it’ll go into an exponential back off (which you can force start), and eventually just start the upload for that/those file(s) over from scratch - good ways to waste days burning in your screen while in a trip and trying to ensure your medias are backed up in case you lose your phone on a trip. Try uploading raw images & 4k clips shot on iPhone to Nextcloud using the Nextcloud app + the AIO image from abroad.

I’m telling you, I’ve tried to use them for quite some time, and I’m far from DevOps-illiterate - I’ve been using k8s since it’s infancy, we wrote the original Operators at CoreOS way back.

I don't know what to say if you think flipping a switch in the admin UI is "manually" configuring.

Otherwise, mostly all of this is just false. I routinely upload massive files (both RAW and 4K, yes) with almost default configuration and it just works. You also lied with "no thumbnail caching" in the first comment, no idea why.

Wow, your first comment was completely rude and unnecessary. Why do you feel the need to say, "you must be lying or you suck at deploying, because it works for me."

also, they meant that their SMB share didn't have thumbnail caching

Hmm I can reply now, strange. That comment was edited multiple times so this is pointless. Also the original commentor started the rude exchange with "hot garbage" (wonder if they'll edit that out too now)

EDIT: yeah, they edited that out too.

I understand now that you are the developer of this app.

I'm sure it doesn't feel very good to have someone criticize it, I get that. But, this person cared enough about the thing you made to use it, troubleshoot it, and post a comment about it on HN.

At the end of the day, it's valuable user feedback :)

No, just no.

Valuable user feedback (which I absolutely love) is someone pulling the server logs, filing a bug on GitHub and following through till it gets fixed. Or, even attempting to see what parts are slow and reporting it. Worse but still very helpful, providing a link to an affected instance that might help "see" what might be happening.

Spending a few hours trying random things and then complaining loudly like a know-it-all is NOT valuable feedback; it's bullshit. Nothing here is helpful, at all. There's absolutely zero indication of what could be fixed and why this particular person's deployment is broken while thousands of others on much slower hardware work just fine. None.

Yeah, you're right. You should say "please file a detailed bug report and consider contributing to the project", instead of being a dick about it.

The other comments you posted are also a bit odd without you disclosing you're the author. just saying

100% agree, generally speaking.

In this case I was rather annoyed since the original comment was very offensively worded and the person obviously had zero intention of helping out. Their only goal was to stroke their own ego by shouting out how something they couldn't get to work is crap.

This is part of the reason for open source maintainer burnout -- useless comments about how something is broken with zero intention of helping to fix it. Hey, it's free -- if you don't like it then either help, or stop crying and move on to something else.

Well I for one would like to say I truly appreciate the brilliant work you have done. The app is a joy to use and I have had several coworkers ask what website I was using when I show them something.

Your work has given me reminders to memories I long forgot about, and nothing can come close to the importance of recalling good memories.

You asked for feedback in your post. No more, no less. Then you started flaming a person for giving their feedback. And start defending the flaming because you actually wanted feedback _in a certain format and worded nicely_.

You are doing great stuff with Memories. Community building skills need some work though.

That is my feedback. Which you asked for.

I, for one, am sick of "just run the Docker image" as a deployment strategy and the be-all end-all of support. On my last attempt at serving a photo gallery, I deployed Hetzner's Photoprism image on a Hetzner server... and it failed. You would think such a thing would be bulletproof! They don't tell you an IPv4 address is needed and the log does not indicate anything is wrong other than Traefik has problems connecting to the certificate server.

If something doesn't work—regardless of how unhelpful the report or oddly configured the deployment machine is—I would love to hear about it so I temper my own expectations before trying it myself.

While I sympathize with the developer whose product is popular enough to collect 1000 issues as of two days ago, some of your many thousands of users can also get fatigued by spending resources (time, money, mental effort) on deployments that fail because the machine and network running Docker is still different enough from yours that issues arise.

My Hetzner Photoprism bug report has been sitting unanswered for two weeks. Getting the log data and trying out different DNS configurations and writing the bug report took a few hours, because I had to SSH into the Docker image and run curl verbosely and figure out which of the five docker-compose elements was causing problems; running Docker and setting up servers isn't my day job. I don't feel like paying 25 bucks a year for an IPv4 address and don't really want to figure out how to get Let's Encrypt to work on Hetzner's IPv6 by manually adjusting the Docker Compose configuration. I thought that's the point of Docker Compose: that you wouldn't need to dick around with it to get it working. I'll probably delete the thing and replace it with something else—potentially Nextcloud as there's no preconfigured Immich image. So, you know... expect my Memories bug report in a few days.

I can't imagine this user's complaint was fabricated from thin air. Rude or not, they are having problems with the thing you made. Make a mental note, "at least some small percent of users are still having issues, in this case no clear root cause, probably a small enough population to ignore, maybe one day further reduce the friction for reporting bugs or find a way to gather more detailed info." Maybe put them in their place if they actually attack you personally or actually have no useful information e.g. "Product Sucks!!" but beyond that, I (as a potential fellow user) find these not-very-dev-helpful reports insightful, as there are two dozen competing FOSS photo storage programs and I want to efficiently figure out which application has features I prefer, is actually stable and easy to deploy, not likely to switch licenses going forward, has a clear goal and steady progress, documentation is well-written and not just a "Brothers Karamazov" dump of one developer's stream of consciousness, etc.

Should I take two or three hours to file bug reports for each of the 20 photo albums I'd consider testing instead of spending time with family or practicing music? Maintainer fatigue is no joke, but it's also a burden on users if the software does not run, and they've already sunken some opportunity cost, and then not every user knows how to be kind and helpful through their frustration.

Anyway, your reaction is valid. I hope you keep working on the project, but I'd also be okay with not having so many different FOSS options and still no clear winner.

Last post can't be edited.

I got done loading a Nextcloud image and it works fine. It's also a different base server and configured differently, and it has IPv4 without extra cost. The only issue so far is that ffmpeg is not detected by Memories so transcoding cannot be enabled, even if I install the only app related to ffmpeg, "Automated media conversion." I'll have to keep reading to see if that's the right app. The server is managed in a way that I can't ssh or change anything Docker-related. I can only log in to Nextcloud at a given URL, so I don't know how run commands from the documentation such as "occ ..." With enough time, I can search if this is usable or not.

It will take probably 20 or 30 minutes to figure out running commands and if ffmpeg can be installed/accessed. I've already committed an hour to this platform even before uploading a single ARW, although I'm already farther along than I was with Photoprism...

EDIT: 24 minutes. I can run occ commands. I can't install ffmpeg. Many others have the same well-known problem: no video thumbnails. Oh well, not a dealbreaker.

(comment deleted)
The day SMB supports server-side thumbnail generation/caching, kindly let me know :]
Does it have perceptual hash duplicate detection?
How is it compared to https://ente.io/ ?
looks like memories has auto-categorization
Is there auto syncing from Apple Photos? That’s the missing feature in Google Photos for me.
There is an Auto upload function in the Nextcloud APP, I believe it works on IOS
Impressed by the loading speed of pictures, how does that work?
It uses very complex hand optimized SQL queries to do everything in a single database query. The database is also structured in a way to support this.

The result: each request overall only takes a few milliseconds for the hardest part, the rest of the optimization is a game of caching.

I was just setting this up last weekend! Its lovely, really well put together. If this is your project, thank you so much
Great to hear that!

It's FOSS and I only work on this in my free time, so please keep the bug reports coming as you run into them! :)

I think this is relevant; but does anyone know of any software that is able to tag photos based on quality- like blur, framing, composition. We have too many photos. So many duplicates from the same day. I’ve dreamed of something that would tag or prune based on the best of from any given set of photos. It would turn our library of 80000 random photos into a set of photos I can put on a frame and see the “good ones”.
This one has been on my mind for a long time. A good start would be blurred photos, duplicate identification and finding a generically "good" photo given a set (e.g. photos from a single location)
digiKam might have this or similar, or there might be a plugin for it. It's gotten so many features that I hardly know what's going on anymore.
(comment deleted)
Delete the bad ones.
Why didn't I think of that?
This, but unironically. You're asking for some solution to a problem you shouldn't have. Keeping shitty photos is hoarding and making your life worse. Hit that delete button.
I’m a big fan of https://immich.app/ and I use it every day for thousands of assets
(comment deleted)
(comment deleted)
I tried it a year ago through Nextcloud AIO and it barely worked... Has it had major improvements since? Or is it because I was using the AIO version of Nextcloud?
The project is a little over a year old, so yeah lol
Tried this a year ago, it was a real mess, barely worked and broke often.

Hopefully it changed a lot in the meantime because I would really like this to be integrated into NextCloud.

I the meantime, I'm really happy using Immich

Umm the project barely existed a year ago, it was in very early stages.
I currently use Mylio. The feature I like most is that I can store a compressed version of my entire catalog on my phone so it's very quick to find something and it works offline. I can then download the full res image if I want it.

My biggest complaint about Mylio is there is still no automatic synchronisation from Android. You have to leave the app open for it to sync.

Wondering if the Memories Android app can handle both of these points?

First one is interesting, not possible at the moment.

The Nextcloud app is used for auto-upload, that does support background upload at least on Android.

Nextcloud itself is a PWA. Did you have to do anything special to make what seems like essentially your own PWA inside another? I ask because I'd love to turn the nextcloud/tasks app into a PWA but was concerned about how it could work.
Not much, it works pretty much out of the box.
Is here any FOSS, self-hosting (single-user is Ok), alternative to flickr? With all its albums, collections, photostream, map, keywords, etc?

I'm looking at this Memories now, but I don't like first page, sorry, with all photos is small and divided with white spaces and dates...

But I don't need any metadata editing, AI and mobile apps, I need gallery for high-quality photos to view on big screens.

(comment deleted)