Skip to content
Android · USB camera · Self-hosted

Get your photos off the camera and onto your own server, with just your phone.

Plug your camera into your Android phone with a USB cable. Offload copies the new shots and uploads them to Immich or your SFTP server. You don't need a laptop, a card reader or anyone else's cloud.

Works with any PTP camera RAW, JPEG, HEIF and video No account, no tracking

 

Immich SFTP / SSH OpenWrt routers Any USB (PTP) camera
How it works

Plug in, pick, walk away

The camera doesn't need Wi-Fi, a companion app or a cloud account. A USB cable and your phone are enough.

1

Connect the camera

Use a USB-C cable from the camera to your phone. Offload opens and lists the card's folders and files, and marks the shots it has already uploaded.

2

Select what's new

Tap Select all new on camera, or pick files one by one, then choose a destination. Turn on auto-upload and it starts as soon as the camera connects.

3

Unplug and carry on

Files are copied to the phone's cache first, so you can unplug the camera and keep shooting. Uploads continue in the background and retry until they finish.

Features

Built for real shoots

For big RAW files, patchy signal and a phone battery that has to last the day.

Phone-side cache

Files are copied from the camera to the phone first, up to a size you choose. The cache can delete them once they're uploaded, or keep them until it needs the space.

Retries and resume

Failed uploads retry by themselves, and interrupted transfers resume. Uploads run in the background, survive the app being closed, and can wait for Wi-Fi.

Skips duplicates

Offload remembers what it has uploaded and checks for duplicates, so Select all new really does mean new. You can still send something again on purpose.

Auto-upload on connect

Choose a destination, plug in the camera, and new files start uploading. Transfers that were waiting for the camera pick up where they stopped.

Choose your formats

JPEG, RAW (CR3/CR2), HEIF and video (MP4/MOV). Turn off the formats you don't want, for example videos on mobile data.

Large files

A video bigger than the whole cache can go straight from the camera to the server, as long as the camera stays connected.

Cache only, upload later

Copy shots to the phone now and decide where they go later. You can also show cached photos in the phone's gallery to view and share them.

Clear progress

The Uploads tab shows every job with live progress, and you can retry failed files, upload a job again to another destination, or delete it.

Settings backup

Export your settings to a password-protected file, then restore them on a new phone or after reinstalling the app.

Destinations

Your photos go to your server

Offload has no cloud service of its own. It uploads only to servers you set up.

Immich

Upload straight into your self-hosted photo library.

  • Signs in with an API key
  • Can add uploads to an album
  • Uses Immich's own duplicate check
  • Supports client certificates (mTLS)

SFTP

Upload to a NAS, home server or any machine you can SSH into.

  • Folder pattern such as {yyyy}/{yyyy-MM-dd}/{filename}
  • Password or key login
  • Sets up key login from a password in one tap
  • Remembers the server's host key

Cache only

Copy files to the phone now and upload them later.

  • Files stay on the phone until you upload or remove them
  • Choose a destination later with Upload…
  • Can show them in the phone's gallery
Offload Router

Upload while you're away from good internet

Hotel Wi-Fi, a campsite or a 4G hotspot can take hours to upload a day's RAW files. Offload Router runs on an OpenWrt travel router with a USB drive. The phone hands the files over at local Wi-Fi speed, and the router uploads them while you get on with your day.

  • Once the router has a complete copy on its drive, the phone counts the file as done
  • Interrupted transfers resume, and copies are verified with checksums
  • Keeps retrying through outages, and a power cut loses nothing
  • A live status page in any browser on the router's network
  • A single 12 MB program with no dependencies. Tested on the GL.iNet AR300M
Router setup guide
CameraUSB
Phonecache
RouterUSB drive
Internetwhenever
ServerImmich / SFTP
# from the router/ folder of the Offload source
$ make deploy ROUTER=root@192.168.8.1
# then open http://192.168.8.1:8080/ within 10 minutes and scan the pairing QR code
Privacy & security

Nothing passes through us

Offload has no account, no analytics and no servers of its own. Your photos go straight from your phone to your server.

Encrypted settings

Passwords, API keys and SSH keys are encrypted with a key kept in the Android Keystore.

Checked server identity

Offload records an SFTP server's host key on first connection and the router's certificate fingerprint at pairing, and won't connect if either changes.

Key-based SSH

Offload can create an SSH key on the phone, install it on the server and then forget your password.

Protected backups

Settings backups are encrypted with AES-GCM using a key derived from your password.

Requirements

What you'll need

A recent Android phone, a cable and somewhere to put the photos. The router is optional.

  • Android 14 or newer
    A phone with USB host (OTG) support. Almost every phone with a USB-C port has it.
  • A camera that supports PTP over USB
    This includes most modern stills and mirrorless cameras. It's developed on a Canon EOS R8.
  • A USB cable
    USB-C to USB-C, or whatever adapter your camera's port needs.
  • Somewhere to upload to
    An Immich server or any SFTP server. You don't need one to start: Cache only mode works without one.
  • Optional: an OpenWrt travel router
    For example a GL.iNet AR300M, with a USB stick or SSD for the Offload Router cache.

Try Offload

Offload isn't available to download yet. Coming soon.

Set up the router

Android 14+ · Free · No account needed

FAQ

Questions

No. Offload talks to the camera over USB using PTP, the standard protocol cameras use for transferring pictures. It finds cameras by their USB interface rather than by brand.

Yes, once the files have been copied to the phone. The Uploads tab shows the stage of each file. Files still waiting to be copied resume the next time you connect the camera. Large files that are set to stream straight to the server need the camera to stay connected.

You set a maximum size for the cache, 20 GB by default, and Offload also leaves room based on how much free space the phone has. Uploaded files can be deleted straight away, or kept until the space is needed.

When the internet connection is slow or unreliable. The phone sends files to the router over local Wi-Fi, which is quick, and then it's finished. The router keeps uploading, and retrying when the connection drops, for as long as it takes, without your phone.

By default the phone sends files to the router over plain HTTP. On a small travel router, encryption is slower than the Wi-Fi, so it would slow every transfer down. This means anyone on the router's own network could see the photos and the router's token. If that matters, turn off the plain-HTTP port and the app will use HTTPS, with the router's certificate checked against the fingerprint recorded at pairing. Uploads from the router to your server use HTTPS or SSH as usual.

Settings are encrypted with a key that Android deletes when the app is uninstalled, so they can't survive a reinstall by themselves. Use Settings → Backup & restore to save them to a password-protected file first.

Only for scanning the router's pairing QR code, which uses the Google code scanner. Everything else works without Play services, and you can enter the router's details by hand instead.