Skip to content

Repository files navigation

🐶 Rover Dumper 💩

Bulk download your pet's photos from Rover.com. One click, one zip file, full quality.

Install it here – just drag a button to your bookmarks bar.

The confirmation dialog: a photo count and date range for the pet, a size estimate, date and photo-range filters, and a Download button

Why

Rover.com has no bulk photo download. You can only view photos one at a time in a slideshow. This bookmarklet paginates Rover's internal API, fetches every image at full quality, zips them up, and triggers a single download.

How It Works

  1. Extracts the pet's opk (identifier) from the /dogs/{opk}/ URL path
  2. Paginates /api/v7/pets/{opk}/images/ to collect all photo metadata
  3. Shows a confirmation modal with photo count, date range, and filter controls
  4. Downloads photos in parallel (concurrency: 3 workers — balances speed vs rate-limiting)
  5. Strips CDN query params from image URLs to get the original full-quality file
  6. Builds a zip in-memory using JSZip with STORE compression (JPEGs are already compressed)
  7. Triggers a browser download via Blob URL

The bookmarklet is entirely self-contained — JSZip is bundled into the minified output by esbuild. No external scripts are loaded at runtime.

Privacy & Security

  • No server — everything runs in your browser tab
  • No tracking — no analytics, no cookies, no external requests beyond Rover's own API and CDN
  • No data leaves your browser — photos go straight from Rover's CDN into a local zip file
  • Your credentials stay local — uses your existing Rover.com login session; no passwords are accessed or stored
  • Open source — read every line of code in src/rover-dumper.js

Browser Compatibility

Browser Status
Chrome Supported
Firefox Supported
Edge Supported
Safari Supported (drag-to-install may vary)
Mobile Not supported (bookmarklets require a desktop browser)

Development

npm install                       # Install dependencies (jszip + esbuild)
npm run setup                     # Enable pre-commit auto-build
npm run build                     # Bundle + minify -> dist/rover-dumper.min.js
npm run release:check             # Verify tests and version-bearing output
npm version <major|minor|patch>   # Verify, bump, rebuild, commit, tag, and push

A pre-commit hook in hooks/ automatically rebuilds and stages dist/ and index.html whenever src/ changes are committed. Run npm run setup after cloning to enable it.

build.sh bundles JSZip into the bookmarklet source via esbuild as a single IIFE, strips template literals and license comments for single-line output, then injects the result into index.html between marker comments. The % character is pre-encoded as %25 in the HTML href to prevent browsers from misinterpreting JS modulo expressions as URL escape sequences.

Dependabot pull requests build dist/rover-dumper.min.js, index.html, and sitemap.xml in read-only CI. After that run succeeds, a default-branch workflow validates the Dependabot actor, same-repository npm branch, pull request file allowlist, exact head revision, and artifact contents before committing only those generated files. The write-enabled workflow never executes pull request code and explicitly dispatches CI for its generated-file commit.

Releases

Use npm version as the only release entrypoint. npm version <major|minor|patch> runs the clean-main and remote-synchronization guard, repeats the release check, updates the version-bearing bookmarklet and landing-page files, creates the version commit and annotated v<version> tag, and pushes both refs atomically. The tag-triggered GitHub Actions workflow verifies the exact tagged bookmarklet and creates the published GitHub Release; an explicit workflow dispatch can safely retry an existing tag.

Project cover automation

npm run screenshots captures the built bookmarklet's confirmation dialog with fabricated photo metadata and no live Rover requests. CI runs the build and tests before capture, retains the PNG as an artifact, and publishes only a changed docs/screenshots/cover.png after successful default-branch verification. Pull requests render without publishing. A superseded source revision cannot overwrite the newer build's cover.

Cover image density

The project cover is rendered at 4x pixel density while preserving its logical viewport, so enlarged previews retain more detail. Higher density does not increase the displayed text size; use zoom to inspect small labels.

License

MIT

About

Download your pet's Rover photos at full quality in one ZIP, using a bookmarklet in your existing browser session.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Used by

Contributors

Languages