←back to thread

224 points jamesxv7 | 1 comments | | HN request time: 0s | 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 #
indigodaddy ◴[] No.44432218[source]
Who's your host?
replies(1): >>44439102 #
1. wooben ◴[] No.44439102[source]
selfhosted at home.

I'm using OPNsense as the main firewall/router, with the HAProxy plugin acting as reverse-proxy. Cloudflare DNS proxies my home IP address and keeps it hidden from the public, and the DDNS plugin in OPNsense updates the A record in CF when my ISP changes my public IP address every few months.