folder2photos
Docker app from GeorgeK's Repository
Overview
Readme
View on GitHubFolder2Photos
Watches a folder and uploads new photos and videos to Google Photos, all from a web interface.
- Each file is uploaded once. Folder2Photos keeps its own history (SQLite in
/config), so a photo you delete in Google Photos is not uploaded again. - No duplicates. Before uploading, Folder2Photos fingerprints the file (SHA-1). A copy of a photo that was already uploaded, under another name or in another folder, is skipped and listed under Duplicates.
- Only new files. On first start, only files dated from that day on are uploaded. You can change the date, or mark everything currently in the folder as skipped.
- Fast. Uploads several files at the same time (4 by default, up to 16; set in Settings).
- Waits for Google. Nothing is tried, or marked as failed, until a Google login is connected.
- Albums from subfolders. Photos directly in the folder go to your Google Photos library without an album. Photos in a subfolder go to an album with the subfolder's name, e.g.
Hike 2026. (Can be turned off.) - API and MCP so scripts and AI assistants can check status, start uploads and change settings.
- Web interface with dashboard, waiting list, history (uploaded / failed / skipped, with "upload again"), settings, Google sign-in, and log.
Uploads use rclone's Google Photos backend.
Run
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) |
API and AI assistants
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 |
Connect Google Photos
Google requires your own OAuth client:
- In Google Cloud Console, enable the Photos Library API.
- In Google Auth Platform → Data Access, add the scopes
photoslibrary.appendonly,photoslibrary.readonly.appcreateddata,photoslibrary.edit.appcreateddata. - In Audience, publish the app (otherwise the login expires after 7 days).
- In Clients, create a Desktop app client.
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.
Requirements
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
gjergjk/folder2photos:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8080]/- Network
bridge- Privileged
- false
- Extra Params
--restart=unless-stopped
Template configuration
Port for the web interface.
- Target
- 8080
- Default
- 8080
- Value
- 8080
Settings, upload history and the Google login. Keep it on appdata.
- Target
- /config
- Default
- /mnt/user/appdata/folder2photos
- Value
- /mnt/user/appdata/folder2photos
The folder to watch. Read only is enough.
- Target
- /photos
Time zone for dates and the schedule.
- Default
- America/New_York
- Value
- America/New_York
Optional. If set, the web interface asks for this password (any user name).
- Target
- WEB_PASSWORD
Optional. Fixed token for the API and MCP endpoint. Leave empty to use the one shown in the web interface (API tab).
- Target
- API_TOKEN