Upload new photos and videos from a folder to Google Photos, once each, with a web UI
238
Watches a folder and uploads new photos and videos to Google Photos, all from a web interface.
/config), so a photo you delete in Google Photos is not uploaded again.Hike 2026. (Can be turned off.)Uploads use rclone's Google Photos backend.
docker run -d --name folder2photos -p 8080:8080 \
-v /mnt/user/appdata/folder2photos:/config \
-v "/mnt/user/share/Photos & Videos/a6600":/photos:ro \
-e TZ=America/New_York \
gjergjk/folder2photos:latest
Open http://SERVER:8080. On Unraid, install Folder2Photos from Community Applications.
| Path / variable | Purpose |
|---|---|
/config | Settings, upload history, rclone.conf with the Google login |
/photos | The folder to watch (read only is fine) |
TZ | Time zone for dates and the schedule |
WEB_PASSWORD | Optional password for the web interface |
API_TOKEN | Optional fixed API token (otherwise one is generated; see the API tab) |
Folder2Photos can be controlled by scripts and AI assistants. The API tab in the web interface shows the API token and ready-to-copy examples. Every API and MCP request needs the header Authorization: Bearer <token>. You can set your own token with the API_TOKEN variable.
MCP (for Claude and other MCP clients) is at /mcp (streamable HTTP). Tools: get_status, list_pending, list_history, upload_now, stop_upload, retry_failed, upload_again, skip_existing_files, get_settings, update_settings, get_log, check_google.
claude mcp add --transport http folder2photos http://SERVER:8080/mcp --header "Authorization: Bearer <token>"
REST endpoints are under /api/v1; the full list is at /api/v1/openapi.json.
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/status | Running or idle, progress, counts, Google connection, next run |
| GET | /api/v1/pending | Files waiting to upload |
| GET | /api/v1/files?status=uploaded (or failed, skipped, duplicate; q= to search) | History |
| POST | /api/v1/upload | Start an upload now |
| POST | /api/v1/stop | Stop after the current file |
| POST | /api/v1/files/forget | Upload these paths again ({"paths": [...]}) |
| POST | /api/v1/files/retry-failed | Retry failed uploads |
| POST | /api/v1/skip-existing | Skip everything currently in the folder |
| GET / PATCH | /api/v1/settings | Read or change settings |
| GET | /api/v1/logs | Recent activity |
| POST | /api/v1/google/check | Test the Google connection |
Google requires your own OAuth client:
photoslibrary.appendonly, photoslibrary.readonly.appcreateddata, photoslibrary.edit.appcreateddata.Then in Folder2Photos open Google, enter the Client ID and secret, click Sign in with Google, allow access, and paste the address of the page Google sends you to (it starts with http://127.0.0.1:53682/ and does not load; that is expected). You can also import an existing rclone.conf.
Source and issues: https://github.com/GeorgeAL78/folder2photos
Content type
Image
Digest
sha256:bf3b237af…
Size
74.5 MB
Last updated
about 9 hours ago
docker pull gjergjk/folder2photos