←back to thread

224 points jamesxv7 | 2 comments | | HN request time: 0.411s | source

First of all, this is purely a personal learning project for me, aiming to combine three of my passions: photography, software engineering, and my family memories. I have a large collection of family photos and want to build an interactive experience to explore them, ala Google or Apple Photo features.

My goal is to create a system with smart search capabilities, and one of the most important requirements is that it must run entirely on my local hardware. Privacy is key, but the main driver is the challenge and joy of building it myself (an obviously learn).

The key features I'm aiming for are:

Automatic identification and tagging of family members (local face recognition).

Generation of descriptive captions for each photo.

Natural language search (e.g., "Show me photos of us at the beach in Luquillo from last summer").

I've already prompted AI tools for a high-level project plan, and they provided a solid blueprint (eg, Ollama with LLaVA, a vector DB like ChromaDB, you know it). Now, I'm highly interested in the real-world human experience. I'm looking for advice, learning stories, and the little details that only come from building something similar.

What tools, models, and best practices would you recommend for a project like this in 2025? Specifically, I'm curious about combining structured metadata (EXIF), face recognition data, and semantic vector search into a single, cohesive application.

Any and all advice would be deeply appreciated. Thanks!

Show context
wooben ◴[] No.44427731[source]
I've been running Nextcloud in Docker with the Recognize and Memories apps for about a year and half now. It's in an off-lease refurbished Dell Precision tower from 2018.

I'm using docker compose to include some supporting containers like go-vod (for hardware transcoding), another nextcloud instance to handle push notifications to the clients, and redis (for caching). I can share some more details, foibles and pitfalls if you'd like.

I initiated a rescan last week, which stacks background jobs in a queue that gets called by cron 2 or 3 times a day. Recognize has been cranking through 10k-20k photos per day, with good results.

I've installed a desktop client on my dad's laptop so he can dump all of the family hard drives we've accumulated over the years. The client does a good job of clearing up disk space after uploading, which is a huge advantage in my setup. My dad has used the OneDrive client before, so he was able to pick up this process very quickly.

Nextcloud also has a decent mobile client that can auto-upload photos and videos, which I recently used to help my mother-in-law upload media from her 7-year-old iPhone.

replies(1): >>44428482 #
jan_tse ◴[] No.44428482[source]
I run a pretty similar configuration on a pi 4 mounted to an external hard drive which I offload to other hard drives from time to time. The mobile app auto sync specific folders when my phone is connected at the home network. It's not flying performance wise but I mainly need a backup solution.

Gonna check the apps that you mentioned. Feel free to share more details of your set up. Why are you running 2 instances? Edit: I see, probably for the memories app.

replies(1): >>44429765 #
wooben ◴[] No.44429765[source]
Memories and Recognize work fine with the base Nextcloud docker image. My host has a GPU so I use go-vod to leverage hardware transcoding. The base NC docker image can't access Nvidia cards (probably other GPUs as well). I could script in a way to do this but would need to run it after each update. Recognize runs fine on my CPU so I haven't explored this yet.

I have an OpenMediaVault VM with a 10tb volume in the network that runs the S3 plugin (Minio-based) which is connected through Nextcloud's external storage feature (I want to migrate to Garage soon). I believe notify_push helps desktop clients cut down on the chatter when querying the external storage folder. Limiting the users that can access this also helps.

I was having issues getting the notify_push app [1] to work in the container with my reverse-proxy. I found some similar setups that did this [2], so I added another nextcloud container to the docker-compose yaml like so:

    notify_push:
    image: nextcloud
    restart: unless-stopped
    ports:
      - 7867:7867
    depends_on:
      - app
    environment:
      - PORT=7867
      - NEXTCLOUD_URL=http://<local ip address of docker server>:8081
    entrypoint: /var/www/html/custom_apps/notify_push/bin/x86_64/notify_push /var/www/html/config/config.php
    volumes:
      - /path/to/nextcloud/customapps:/var/www/html/custom_apps
      - /path/to/nextcloud/config:/var/www/html/config 
[1] - https://apps.nextcloud.com/apps/notify_push

[2] - https://help.nextcloud.com/t/docker-caddy-fpm-notify-push-ca...

replies(2): >>44431673 #>>44432218 #
1. hammyhavoc ◴[] No.44431673[source]
Do you know if there's any way to `Recognize this image now` via the GUI? Whilst twiddling my thumbs for a few decades of photos to import, I go through what's there and occasionally a family member will point and tell me who a pic is of, but can't seem to immediately prioritise or `Recognize` the specific pic so I can add a name to the face.
replies(1): >>44439079 #
2. wooben ◴[] No.44439079[source]
No way to do it straight from the GUI. If you get the OCC web terminal plugin, you could use a command to get recognize to scan for new files. Properly configured notify_push and cron jobs should get Recognize going within 10-15 minutes after a new file upload, but it depends on what else is in the queue and the server's processing power. The initial runs need to finish before any of this is relevant, though.

Once you get everything ingested and the initial classifications and clustering done, the process runs pretty quickly as you upload new photos.