mrkeyoor.com_
Tue 15 Sept 19:19 UTC
Dev Toolsevaluationupdated 14 Sept 2026

gotohp review

gotohp is an unofficial desktop and command-line uploader for Google Photos. It handles files or whole directories, can skip media already in an account, and gives users live progress and configurable upload threads without relying on the Google Photos website.

trackingstars / 7d
Verdict

Our gotohp build took 6 seconds, but all 7 go test targets failed after 45 seconds because two Linux libraries were unavailable. Try it for a one-way Google Photos upload job only if you accept the unofficial credential flow and can verify the result in your account. Choose another system for an authoritative backup, two-way sync, or unattended batches that must pause and resume.

We ran it

Lab card: what happened when we ran gotohpScreenshot of gotohp (github.com/xob0t/gotohp)
Install✓ · 43s196 packages
Build✓ · 6s
Tests✗ · 45s0 passed · 7 failed of 7 (go test)
Repo185 files~22,950 lines of source · 4 MB · 3 CI workflows

Answers from our run

Does gotohp build from source?

Dependencies installed in 43 seconds (196 packages), and the build succeeded in 6 seconds. We cloned commit 642c900 into a clean Debian container with 3 CPUs and no project-specific setup.

Do gotohp's tests pass?

Not all of them: 0 of 7 passed and 7 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use gotohp?

Anyone who requires an official Google-supported sign-in flow: the README calls gotohp unofficial and asks users to copy an oauth_token cookie, use ReVanced with ADB, or intercept a rooted Android app.

What are the alternatives to gotohp?

Immich, rclone, gphotos-sync. Our gotohp build took 6 seconds, but all 7 go test targets failed after 45 seconds because two Linux libraries were unavailable.

Setup2/5Prebuilt apps exist, but sign-in and Linux source setup are awkward
Docs3/5Upload and sign-in are clear; source build detail is one link
Community3/5576 stars, a same-day release, and 9 active issues and PRs
Maturity2/5v0.11.0 has breaking CLI changes and our 7 test targets failed

Who it’s for

People moving large local photo folders into an existing Google Photos account.
Developers who want repeatable directory uploads through a command-line tool.
Users comfortable obtaining and protecting the unusual Google credential the README requires.
Desktop users who need queued uploads, duplicate skipping, account selection, and per-run flags.

Who it’s NOT for

Anyone who requires an official Google-supported sign-in flow: the README calls gotohp unofficial and asks users to copy an oauth_token cookie, use ReVanced with ADB, or intercept a rooted Android app.
Users seeking a full Google Photos backup or two-way sync client: download is still issue 22, while rename and deletion sync remain an open request in issue 61.
Long-running upload jobs that must pause and resume safely: issue 58 says stopping currently means closing the app, and issue 26 asks for resumable batches and a failed-file list.
Source builders who expect the repository README to list Linux packages: its entire build section points to the Wails3 installation guide without naming them.

Setup reality

Our sandbox installed 196 packages in 43 seconds, and the build succeeded in 6 seconds. Tests then failed with exit code 1 after 45 seconds: go test recorded 0 passed and 7 failed of 7. The log says libsoup-3.0 and gio-unix-2.0 were not found, so the app, backend, and internal CLI packages did not complete their test builds.

Using a release binary avoids a source build, but sign-in still needs an oauth_token copied from Google Embedded Setup, a credential captured through ReVanced and ADB, or a rooted-device interception flow. The shared config stores account credentials; v0.11.0 requires CLI users to pass proxy, quality, quota, and upload behavior as flags.

Source builds follow the external Wails3 guide. The repository README does not list the Linux packages named in our failure. Our scan found 3 CI workflow files, no Dockerfile, and no tests directory, so container packaging and a local test layout are not supplied at the repository root.

A 185-file uploader covers batches, accounts, and duplicate checks

At commit 642c900, gotohp occupied 4 MB across 185 files and about 22,950 lines of source. Its job is narrower than a photo manager: send individual files or directories to Google Photos, optionally scan subdirectories, choose an account, and skip media already present. The graphical app adds drag and drop, live progress, saved preferences, and configurable workers. A separate CLI exposes the same upload engine for scheduled jobs and shell scripts.

Operators can select recursive scanning, upload threads, another config file, or a stored account by email. In v0.11.0, proxy, quality, quota, and other upload behavior come from flags rather than GUI preferences. That keeps desktop preference changes out of scripted runs. Credential storage remains shared, so protect the config and any token file passed through standard input.

Three sign-in routes all expose unusual Google credentials

The easiest documented route opens Google Embedded Setup, asks the user to sign in, and then requires browser developer tools to copy the oauth_token cookie. The page may keep loading forever, which the README says is expected. Another route uses Google Photos ReVanced with GmsCore and reads an Android authentication line through ADB. The third route needs a rooted device or emulator, HTTP Toolkit interception, and sometimes an Android AccountManager binding key.

All 3 routes create an adoption boundary. gotohp calls itself unofficial, and the user hands it a credential obtained outside a normal desktop OAuth redirect. A company with managed Google accounts may reject that process. Personal users should keep the cookie out of shell history, screenshots, and bug reports, then restrict the shared config file.

What happened when we ran it

Our sandbox installed 196 packages in 43 seconds using an unprivileged Debian container with 3 CPUs and 8 GB of RAM. The source checkout was 4 MB, and dependency installation completed without an error. The build then succeeded in 6 seconds. This establishes that commit 642c900 could compile through the build step in our stated Go 1.24 environment; it does not test a Google login or an actual photo upload.

The test command failed with exit code 1 after 45 seconds, with go test recording 0 passed and 7 failed of 7. Its final output says pkg-config could not find libsoup-3.0 or gio-unix-2.0. The app reported setup failure, while the backend and internal CLI packages reported build failures. The log does not identify any test assertion or application defect beyond those unavailable libraries, so we cannot turn the result into a claim about upload correctness.

Our scan found 3 CI workflow files, no Dockerfile, and no tests directory among 185 files. Go can keep tests beside source, so the missing folder alone says little. Fresh Debian lacked the native Linux dependencies needed for every tested package. The README only links to the Wails3 guide and does not name the two packages in our log.

Version 0.11.0 makes CLI jobs independent of GUI preferences

Release v0.11.0 was published on September 14, 2026. It changes the config into account and preference sections, migrates old flat files on first load, and stops the CLI from inheriting upload behavior from the GUI. Existing automation must now pass flags such as proxy, saver, quota, and account explicitly. The release also fixes unsuccessful uploads so the CLI returns a failure exit code, an important property for cron jobs and scripts that decide whether to alert or retry.

Release assets include GUI packages and CLI binaries for Windows, macOS, and Linux, plus checksums. Our 6-second build says nothing about those artifacts on a particular desktop, but users can avoid assembling Wails3 locally. With no Dockerfile, headless operators must package the CLI themselves.

Nine open issues and PRs show an uploader that is still filling gaps

GitHub showed 576 stars and 9 combined issues and pull requests, with both a push and v0.11.0 release on September 14, 2026. The active queue is small enough to inspect rather than summarize as a bug count. One pending pull request prepares v0.11.1. Issue 71 asks to archive uploads or add them to an album, while issue 22 asks for downloading by media key. These are useful boundaries around what the current uploader does.

Batch recovery is the sharper concern after our 45-second failed test run. Issue 58 asks for pause and resume because closing the app can trigger rate limiting during duplicate checks after restart. Issue 26 requests resumable folder uploads and a file containing failures after a large library froze partway through. Issue 61 proposes a local database for rename and deletion sync in both directions. None of those requests is proof that every large job fails, but all describe functions a dependable sync client would need.

A 4 MB uploader should complement a photo archive, not become one

gotohp fits a focused migration or recurring upload job where Google Photos remains the destination. Its 185-file codebase, GUI, and CLI are easier to understand than a replacement photo platform. The project can avoid resending media it finds in the account, but open download and two-way sync requests mean it should not hold the only record of what exists. Keep original files and an independent backup until counts and spot checks confirm the upload.

Immich is the better comparison when you want to operate the whole photo library yourself. rclone suits broader command-line transfers, subject to the Google Photos backend's API limits, while archived gphotos-sync is aimed at pulling a Photos library down. gotohp wins the narrow trial when upload convenience outweighs the 43-second dependency setup, unusual sign-in, and missing pause support. For unattended work, test failure exits, interrupted batches, duplicate handling, and credential recovery before trusting the schedule.

Alternatives

ProjectWhat it isPick it when
Immich gh↗A self-hosted photo and video library with mobile backup and its own server.pick this instead when you want to own the photo service and need a full library rather than a Google Photos uploader.
rclone gh↗A command-line transfer tool spanning many cloud storage services.pick this instead when your workflow covers several cloud providers and you can work within each backend's API limits.
gphotos-syncAn archived Google Photos backup tool built around the Google Photos Library API.pick this instead when read-only backup is the goal and you accept an archived project with API limitations.

What people are saying

  1. [github-trending] xob0t/gotohp

Sources

  1. gotohp repository and README
  2. gotohp v0.11.0 release
  3. Issue 22: requested download command
  4. Issue 26: resumable batches and failed-file output
  5. Issue 58: pause and resume uploads
  6. Issue 61: requested two-way directory sync
  7. Wails3 installation guide

More dev tools reviews

ASC · BrewUI · moment · rust-clippy · marktext · happy · the whole board →