I have implemented something similar.
I have one sync drive per mobile device (this is for the whole family).
I have one connected harddrive (odroid HC1) that syncs the photos. this is kind of the central hub.
The HC1 have cron jobs that run daily, and basically move the photos from the mobile device sync folder to a common “media library” sync folder where all photos are stored and organized.
This effectively removes the photos from the mobile devices. I have it organized so that photos will stay on the device 30 days, mainly for giving you time to show recent photos and also for you to have the opportunity to delete bad pictures/videos before they start being propagated.
The process of moving from mobile device sync to media lib sync is handled by scripts that use exiftool, see below.
The media library sync folder is also synced with the PC where photos are post-processed, rated, cleaned, etc. (I use darktable for that),
The most complex part is the “moving” form phone sync folders to media library. I use exiftool for selecting the photos (or videos) moving them to the right folder and also adjusting metadata (who shot the picture), etc.
here is a snippet:
#!/bin/bash
ML_IMAGE="registry.lan/exiftool:edge"
ML_AGE_DAYS="30"
ML_ARTIST="Rafael"
ML_COPYRIGHT="All Rights Reserved"
ML_PREFIX="RV2"
ML_VOLUME="syncthing_sync"
ML_OPTIONS="--ext xmp"
ML_USER="1000"
ML_GROUP="1000"
ML_SOURCE="Camera Redmi Note 7 Rafael /Camera"
ML_DEST="ValleRandaMediaLib"
# Notes: Use FileModifyDate because is present in all media formats (XMP)
# Sidecars might have another date, which may result in copying half of the metadata
# Modify Date will change after migration which makes this step difficult to reverse
# Move Videos
docker run --rm \
-v ${ML_VOLUME}:/media \
--name medialib_${ML_PREFIX}_video \
--user ${ML_USER}:${ML_GROUP} \
${ML_IMAGE} exiftool -r \
-artist="${ML_ARTIST}" \
-copyright="${ML_COPYRIGHT}" \
-overwrite_original \
-ext mp4 \
${ML_OPTIONS} \
-d "/media/${ML_DEST}/Video/%Y-%m" \
"-Directory<FileModifyDate" \
"-Filename=${ML_PREFIX}_%f.%e" \
-if "time() - ${ML_AGE_DAYS}*86400 > "'${FileModifyDate#;DateFmt("%s")}' \
"/media/${ML_SOURCE}"
logger -t mediasort_rv-redmi-note-7 Video Processing Finished with status $?
# Move Photos
docker run --rm \
-v ${ML_VOLUME}:/media \
--user ${ML_USER}:${ML_GROUP} \
--name medialib_${ML_PREFIX}_video \
${ML_IMAGE} exiftool -r \
-artist="${ML_ARTIST}" \
-copyright="${ML_COPYRIGHT}" \
-overwrite_original \
--ext mp4 \
${ML_OPTIONS} \
-d "/media/${ML_DEST}/Photo/%Y-%m" \
"-Directory<FileModifyDate" \
"-Filename=${ML_PREFIX}_%f.%e" \
-if "time() - ${ML_AGE_DAYS}*86400 > "'${FileModifyDate#;DateFmt("%s")}' \
"/media/${ML_SOURCE}"
logger -t mediasort_rv-redmi-note-7 Photo Processing Finished with status $?
One of these jobs run per device.
My collection is now reaching 1TB.
My next step in the process is to get the photos out of Darktable into something easier to share…
I am looking at the following options.
https://pixelfed.org/ as a public federated sharing
https://photoprism.app/ as an online album option.
I will probably take both. I think it makes sense to decice from photoprism what you want to make public via pixelfed.