Homepage showing all photos in a grid. Aspect ratio of photos is maintained and scroll is infinite. Scrollbar on the right shows years, on hover months are shown.
View things and places.
View the photo or video alongside extra info in the pane on the right. The info pane can be hidden, images allow for zooming. Swipe or use the arrow buttons to go to the next photo.
View map of all your photos and videos. Photos are blue circles, videos are orange. Click a circle to view it.
Possible search features
- Item in photo (using machine learning image classification)
- Place taken (country, province, municipality, city)
- Date taken
- Filename
- Filetype
- Git (https://git-scm.com/)
- Docker + docker-compose (https://www.docker.com/products/docker-desktop)
- Clone this repo
git clone --recurse-submodules [email protected]:RuurdBijlsma/Photos.git
cd Photos
- Copy
example.env
to.env
:cp example.env .env
and edit.env
- Change
PHOTOS_DIR
to where your source photos are. - Change
EMAIL
andPASSWORD
to what you want to use to log in. - (Optional) change
THUMBNAILS_DIR
andBACKUPS_DIR
- Change
- Run
docker-compose up --build
and wait until your photos are processed (takes a WHILE) - Visit http://localhost, enter
http://localhost:3333
as the API endpoint and log in with your credentials from step 3 - (optional) Set a Mapbox api key on the settings page to make the maps work
- Download FolderSync (https://play.google.com/store/apps/details?id=dk.tacit.android.foldersync.lite&hl=nl&gl=US)
- Set up SFTP sync account to your server
- Set up sync to remote folderpair to automatically upload files from /DCIM/Camera (on phone) to ./media/photos (on server)
Use nginx reverse-proxy for this, the server runs at localhost:3333, the frontend runs at localhost:80.
Example nginx conf:
server {
listen 80;
server_name mysite.com;
return 307 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name mysite.com;
location / {
proxy_pass http://localhost:80;
proxy_redirect http://localhost:80/ /;
proxy_read_timeout 60s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
}
server {
listen 80;
server_name api.mysite.com;
return 307 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name api.mysite.com;
location / {
proxy_pass http://localhost:3333;
proxy_redirect http://localhost:3333/ /;
proxy_read_timeout 60s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
}