Lumen is an unofficial desktop client for Google Photos, built with Wails and Vue 3. It's a fork of gotohp with a redesigned Material 3 Expressive interface. Core upload and authentication logic are inherited from upstream.
Disclaimer: Unofficial client. Not affiliated with, endorsed by, or supported by Google LLC. Google Photos is a trademark of Google LLC.
Looking for the Android mobile app? Check out Lumen for Android.
- Free storage backup: Upload photos and videos without counting against your Google storage quota (you can also turn quota usage back on).
- Smooth sliding navigation: The interface slides smoothly between Upload, Settings, and About views.
- Collapsible sidebar: Automatically adapts between an expanded sidebar on larger screens and a compact icon rail on smaller screens (or toggle it manually).
- Drag and drop: Drop files or folders directly into the window, or use the file picker button.
- Apple Live Photos: Automatically pairs
.heicand.jpgphotos with their matching.movvideo clips. - Duplicate skipping: Caches hashes of uploaded files locally so you don't re-upload photos you've already backed up.
- Bandwidth limiter: Limit upload speeds from 0.5 MB/s up to 50 MB/s, or leave it unlimited.
- Folder watcher: Monitor folders in the background to automatically upload new photos as they are added.
- System tray: Runs in the background when minimized and shows a notification when batch uploads finish.
- Multiple accounts: Add and switch between multiple Google accounts.
- Album support: Upload directly to existing albums or automatically create albums named after your folders.
- Standalone CLI: Includes a headless
lumen-clibinary for running uploads in scripts, servers, or cron jobs.
Download prebuilt binaries for Linux, macOS, and Windows from the Releases page.
The standalone binary lumen-cli runs without any GUI dependencies. The desktop binary lumen also accepts these commands directly.
# Upload photos recursively using 5 threads
lumen-cli upload /path/to/photos --recursive --threads 5
# Upload directly to an album (creates it if it doesn't exist)
lumen-cli upload /path/to/trip --album "Tokyo 2026"
# Pair Apple Live Photos
lumen-cli upload /path/to/camera --pair-live-photos
# Use Storage Saver quality instead of original quality
lumen-cli upload /path/to/photos --saver
# Add credentials
lumen-cli creds add "<oauth_token cookie value>"
lumen-cli creds add "androidId=..."
lumen-cli creds add - < token.txt
# List and switch active account
lumen-cli creds list
lumen-cli creds set user@gmail.comThe CLI shares stored credentials with the GUI through the config file. Upload options (threads, quality, album, etc.) are controlled by command-line flags so scripts run predictably.
Run lumen-cli --help or lumen-cli upload --help for the full list of options.
- Open Lumen and click Connect Account (or Add Google account).
- Click Open Google sign-in to open the login page in your default browser.
- Sign in to your account and click I agree on the Google Embedded Setup page. (If the page keeps loading afterward, that's normal).
- Open your browser Developer Tools (
F12or right-click -> Inspect). - Go to Application (or Storage) -> Cookies ->
https://accounts.google.com. - Copy the value of the
oauth_tokencookie. - Paste it into Lumen and click Connect account.
From the CLI:
lumen-cli creds add "<oauth_token value>"View instructions
-
Install Google Photos ReVanced on your Android device or emulator:
- Install GmsCore.
- Install a patched Google Photos APK (via Morphe-AutoBuilds or patch it yourself using ReVanced Manager).
-
Enable USB debugging and connect your device to your PC via ADB.
-
Open a terminal on your PC and run:
Linux / macOS:
adb logcat | grep "auth%2Fphotos.native"
Windows (Command Prompt):
adb logcat | FINDSTR "auth%2Fphotos.native"
-
If you already had an account logged in, remove the Google account from GmsCore first.
-
Open Google Photos ReVanced on the device and sign in.
-
A log line containing the authentication parameters will appear in your terminal.
-
Copy the string starting from
androidId=through to the end of that line. -
Paste that string into Lumen or run
lumen-cli creds add "androidId=...".
View instructions
- Make sure you have a rooted Android device or emulator with ADB root access.
- Connect your device via ADB and install HTTP Toolkit.
- In HTTP Toolkit, choose Android Device via ADB intercept mode.
- Filter intercepted traffic using:
(For older Google Photos versions, try
contains(https://www.googleapis.com/auth/photos.native)contains(www.googleapis.com%2Fauth%2Fplus.photos.readwrite)). - Open the official Google Photos app on your device and log in.
- When the matching request appears in HTTP Toolkit, copy the request body text.
- Paste the body string into Lumen.
- If Lumen asks for a token binding key, keep the device connected with ADB root enabled and click Read from ADB. Lumen will read
lstBindingKeyAliasfrom the Android AccountManager and attach it to the credential.
- No request intercepted: Log out and log back in, or use HTTP Toolkit's
Android App via Fridainterception method. - Token binding key not found: Confirm root is granted to ADB shell (
adb root) and the target Google account is present on the device.
- Go: 1.24 or higher
- Node.js: 20.x or higher with
npm - C Compiler:
gccorclang - Linux packages (Linux only):
gtk3,webkit2gtk-4.1(orwebkit2gtk-4.0),pkg-config- Arch / CachyOS:
sudo pacman -S webkit2gtk-4.1 gtk3 base-devel - Debian / Ubuntu:
sudo apt-get install libgtk-3-dev libwebkit2gtk-4.1-dev build-essential - Fedora:
sudo dnf install gtk3-devel webkit2gtk4.1-devel gcc
- Arch / CachyOS:
- Wails v3 CLI (optional):
go install github.com/wailsapp/wails/v3/cmd/wails3@latest
-
Clone the repository:
git clone https://github.com/Reiux/Lumen.git cd Lumen -
Build frontend assets:
cd frontend npm install npm run build cd ..
-
Build the desktop GUI:
go build -o bin/lumen . -
Build the standalone CLI:
go build -tags cli -o bin/lumen-cli .
Alternatively, if you use Task:
task buildLumen stores configuration and saved accounts in:
- Linux:
~/.config/gotohp/gotohp.config - macOS:
~/Library/Application Support/gotohp/gotohp.config - Windows:
%APPDATA%\gotohp\gotohp.config
To run portably, place an empty gotohp.config file next to the binary.
- Original project and upload logic: gotohp by xob0t.
- UI redesign & enhancements: Reiux.
- Licensed under the MIT License.
