[SelfHosting] Image & Backup Tools
Tl;DR
Get your photos in place.
+++ Jellyfin and backups.
Intro
Some say: dont rent what you should own.
You might have heard about OpenLTablets or from my worst nightmare ever, fitnesse
The Acceptance Test Wiki
But today, I want to make a short recap on tools that I find so much valuable.
I grasp the surface on the No Code Ai Tools Post
And they are no code.
SelfHostable Image Tools
Mind your attention, stop auto engaging.
Keep the important things at life first.
After testing few of them, I would recommend:
Together with:
Because at some point, you will need more than just a quick share: or sth more than syncthing
PiGallery
Self-hosted tunneled reverse proxy server pic.twitter.com/Hx1SSyOeLD
— Tom DΓΆrr (@tom_doerr) October 19, 2025
- https://libreselfhosted.com/project/fluxbb/
- https://awesome-docker-compose.com/apps/photo-server/pigallery-2
sudo docker compose -f ./z-homelab-setup/evolution/2601_docker-compose.yml up -d pigallery2If its too much space, you can always:
NC vs Immich
We have some fresh releases since the last time:
- https://github.com/immich-app/immich/releases/tag/v2.5.0
- https://github.com/nextcloud/desktop/releases/tag/v4.0.6
./setup-env.sh #chmod +x ./evolution/setup-env.sh
cd z-homelab-setup/evolution/
sudo docker compose -f 2602_docker-compose.yml up -d nextcloud-app nextclouddb #nextcloud:80
sudo docker compose -f ./z-homelab-setup/evolution/2602_docker-compose.yml config
#sudo docker compose -f 2602_docker-compose.yml logs -f nextcloud-app nextclouddbIf you are tired of having these behind home / VPN access only…
You can make sure to harden the installation and expose via CF tunnel: adding WAF protecction along the way
#ssh jalcocert@192.168.1.2
#lsblk -f | grep /mnt/data2tb && df -h /mnt/data2tbVideos from the action cam like the oa5 pro are too big?
du -h --max-depth=1 2>/dev/null | sort -hr | head -n 6
#sudo apt update && sudo apt install ffmpeg
ls *.MP4 | sed "s/^/file '/; s/$/'/" > file_list.txt #add .mp4 of current folder to a list
ffmpeg -f concat -safe 0 -i file_list.txt -c copy output_video.mp4 #original audio
#Get-ChildItem -Filter "*.MP4" | ForEach-Object { "file '$($_.Name)'" } | Set-Content file_list.txt
#ffmpeg -f concat -safe 0 -i file_list.txt -c copy output.mp4 #simple joinWhy dont you just upload them to YT?
Remember about backups!
#sudo rsync -rlptvP --no-owner --no-group /home/jalcocert/Docker/nextcloud/html/data /mnt/data2tb/nc/
root@jalcocert-x300:/home/jalcocert/Docker/nextcloud/html/data/....
#same for immichAnd about security of you open those to the internet
CF WAF vs Zero Trust Access
- The “Allow List” (Recommended)
This blocks every country in the world except yours.
- Location: Security > WAF > Custom Rules
- Rule Name: “Allow Home Country Only”
- Field:
Country - Operator:
does not equal - Value:
Spain(or your country) - Action:
Block
Via UI: not (ip.src.country in {"ES" "PL"}) as per this md.
But that would work all the domain and sub-domains.
So you can be more specific with: (http.host eq "nc.jalcocertech.com" and not ip.src.country in {"ES" "PL"})
curl -X PUT \
"https://api.cloudflare.com/client/v4/zones/abcdef123456/rulesets/phases/http_request_firewall_custom/entrypoint" \
-H "Authorization: Bearer $CF_AUTH_TOKEN" \
-d '{
"rules": [
{
"description": "allow countries",
"expression": "(ip.src.country ne \"PL\") or (ip.src.country ne \"ES\")",
"action": "block"
}
]
}'Others
How does these solutions replaces Google Photos?
You can use it together with F/OSS photo services like: https://awweso.me/photo-and-video-galleries/
- https://fossengineer.com/selfhosting-Photoview-docker/
- Piwigo
- https://opensource.com/alternatives/google-photos
https://www.youtube.com/watch?v=h_inF-ypMls
https://www.opensourcealternative.to/project/Photprism
Don’t Let Apple & Google Harvest Your Photos, Use Immich to Self-Host Your Own Cloud!
https://www.youtube.com/watch?v=URJiQb8PwWo&t=1179s
Self Hosted Photo Backups - Photoprism & Photosync - Let’s ditch iCloud…
https://www.youtube.com/watch?v=sIpt4u03mXc
Conclusions
Just do something.
How to backup data?
3-2-1!
Concerned about container backups?
mkdir -p /media/jalcocertech/68478e63-dcfa-4361-9625-9ac1275c085c/Z_backup_cont/portainer
sudo cp -r /mnt/portainer_backup/var/lib/docker/volumes/portainer_data/_data/* /media/jalcocertech/68478e63-dcfa-4361-9625-9ac1275c085c/Z_backup_cont/portainer/How to Detect Duplicates files in the system
More Media
I set again Jellyfin and company at: 192.168.1.2:8096
#git clone https://github.com/JAlcocerT/Home-Lab
#cd ~/Home-Lab/jellyfin
#sudo docker compose up -d
##cd ~/Home-Lab
#git pull
#sudo docker compose -f ./z-homelab-setup/evolution/2601_docker-compose.yml up -d jellyfin
docker ps -a | grep -i jellyfin
#udo docker stats jellyfin #~135mb idleIf you see very high CPU consumption for nothing, try:
- Subtitles Burn-in
- Click your User Icon (top right) > Settings.
- Go to Subtitles.
- Set Subtitle playback mode to None.
- Click Save.
I just required to move my OA5 videos to:
#ls -d CAM1-04-14 CAM1-04-16 CAM1-04-17 CAM2
mv CAM1-04-14 CAM1-04-16 CAM1-04-17 CAM2 /home/jalcocert/Desktop/YoutubeVideos/- Jellyfin Dashboard Settings
Go to Dashboard > Playback and set: https://jellyfin.org/docs/general/post-install/transcoding/hardware-acceleration/amd
lsblk -d | grep nvme && lspci | grep -i vga
#03:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c9)
#cat /sys/class/drm/card0/device/gpu_busy_percent
#sudo apt install radeontop
sudo radeontop- Hardware acceleration:
Video Acceleration API (VAAPI) - VA-API Device:
/dev/dri/renderD128 - Hardware decoding: Enable H.264, HEVC, VC1, VP9.
- Hardware encoding: Enabled.
Adding also metube, so that you can upload your action camera videos in 4k to youtube and if needed download the back:
#sudo docker compose -f ./z-homelab-setup/evolution/2601_docker-compose.yml up -d qbittorrent
docker logs qbittorrent
#sudo docker compose -f ./z-homelab-setup/evolution/2601_docker-compose.yml up -d prowlarr
sudo docker compose -f ./z-homelab-setup/evolution/2601_docker-compose.yml up -d metube
#choco install ytdownloader
sudo snap install ytdownloader
These dont take much space:
docker ps -s --format "table {{.Names}}\t{{.Image}}\t{{.Size}}"
#docker system df -v
But some of your folders might be huge: like… if you used UmbrelOS via container to sync the full BTC chain with ~837GB and 929k blocks as of today
#sudo du -h --max-depth=2 /mnt/data1tb/umbrel/app-data/bitcoin | sort -hr
du -sh .
#sudo apt install ncdu -y
sudo ncdu .
sudo ncdu /mnt/data2tb/testftp# Using ncdu
ncdu --exclude /mnt/data2tb/Z_BackUP_HD-SDD /mnt/data2tb
# Using standard du (if ncdu is not installed)
sudo du -h --max-depth=1 /mnt/data2tb --exclude="/mnt/data2tb/PATH_TO_EXCLUDE" | sort -hrSee:
iostat -xz 1 5
#sudo iotop -o #show processes using the diskEven more, after connecting these 2: 192.168.1.2:6011

Try searching for: 1337x, The Pirate Bay, LimeTorrents, or EZTV.
This can be a good test of your internet speed: Im getting ~60mb/s

Just go to 192.168.1.2:8081…
If you are creating your own (AI) music…
Since both Navidrome and Gonic share the Subsonic API (and the newer OpenSubsonic standard), any Subsonic-compatible client will work with them.
#sudo chown -R 1000:1000 /home/jalcocert/Home-Lab/navidrome/data
sudo docker compose -f ./z-homelab-setup/evolution/2602_docker-compose.yml up -d navidrome
sudo docker compose -f ./z-homelab-setup/evolution/2602_docker-compose.yml logs -f navidrome##sudo apt install appimagelauncher
#https://github.com/jeffvli/feishin
#https://github.com/jeffvli/feishin/releases
wget -P ~/Applications https://github.com/jeffvli/feishin/releases/download/v1.4.2/Feishin-linux-x86_64.AppImage
#sonixd
#winget install sonixd
#wget -P ~/Applications https://github.com/jeffvli/sonixd/releases/download/v0.15.5/Sonixd-0.15.5-linux-x86_64.AppImage
#See also Euphonica: https://github.com/htkhiem/euphonica
#flatpak install https://dl.flathub.org/repo/appstream/io.github.htkhiem.Euphonica.flatpakrefYou can play from navidrome itself, or with Feishin Desktop, or…UltraSonic on Android, amperify on iOS.
For desktop: Aonsoku
See also https://github.com/betsha1830/navispot to Export Spotify playlists to Navidrome.
Server Maintainance
Im thinking to use one instance of PGsql with all the services for now and just change the db name used.
For now, im doing some clean up:
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | (read -r; printf "%s\n" "$REPLY"; sort -hk 3 -r)
#sudo docker system df
docker stop node portainer mermaidjs-openai-editor listmonk_app listmonk_db traefik sftpgo-sftpgo-1 kreuzberg botpress-botpress-1 n8ncesar n8ncesar-db-1 n8ntest n8ntest-db-1 n8n-n8n-1 freshrss docker-flowise-1 moirealestate-flaskcms n8n-db-1 node portainer
#docker rm node portainer mermaidjs-openai-editor listmonk_app listmonk_db traefik sftpgo-sftpgo-1 kreuzberg botpress-botpress-1 n8ncesar n8ncesar-db-1 n8ntest n8ntest-db-1 n8n-n8n-1 freshrss docker-flowise-1 moirealestate-flaskcms n8n-db-1
sudo docker image prune -aHave somebody spam in my commento instance?
docker exec -it commento_db-foss psql -U commento -d commento
#SELECT * FROM comments;
#SELECT creationdate, markdown FROM comments ORDER BY creationdate DESC LIMIT 2;How is the uptime looking?
#sudo docker compose -f ./z-homelab-setup/evolution/2601_docker-compose.yml up -d uptimekuma
docker ps -a | grep -i uptimekuma
#sudo docker stats uptimekuma
uv run scripts/bulk_add_monitors.py
Any…unconnected disk?
lsblk
#lsblk -f
sudo mount -t exfat /dev/nvme0n1p1 /mnt/data2tb
#echo 'UUID=a123-567b /mnt/data2tb exfat defaults,uid=1000,gid=1000,umask=000 0 0' | sudo tee -a /etc/fstabsudo apt update && sudo apt install ncdu -y
sudo ncdu /mnt/data2tbFAQ
Setup Containers
New to all this?
Consulting Services
DIY via ebooksA Quick Container setup guide
Or just get ready for SelfHosting:
How to Back Up my Server?
Duplicati to other location (HD / Mega, One drive, s3…)
You can also try with Python Venvs or Conda: