Skip to content

FluidXR/fetchquest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FetchQuest

Fetches the recordings and screenshots from your Meta Quest and syncs them to your computer or cloud/network storage to free up space on your headset. Works with Google Drive, Dropbox, NASes running SMB, and more.

fetchquest sync

To use FetchQuest, plug in your Quest via USB and run fetchquest sync. It pulls all the VideoShots and Screenshots off the headset and syncs them to all of your configured destinations. Once everything is synced, you can run fetchquest clean to delete the files from the Quest. It checks the manifest first and only deletes files that have made it to all your destinations.

Install

Grab a binary from Releases:

Platform Download
macOS (Apple Silicon) fetchquest-0.5.0-darwin-arm64.tar.gz
macOS Desktop App FetchQuest.app.zip
Linux (x86_64) fetchquest-0.5.0-linux-amd64.tar.gz
Windows (x86_64) fetchquest-0.5.0-windows-amd64.zip

Extract it, put it on your PATH. It'll prompt you to install ADB and rclone on first run if they're missing.

Or with Go 1.21+:

go install github.com/FluidXR/fetchquest@latest

Building from source requires Go 1.21 or newer. If you see package cmp is not in GOROOT or package slices is not in GOROOT, your go is too old. Install a newer Go:

# Linux: install Go 1.24 to ~/.local (no sudo)
curl -sL https://go.dev/dl/go1.24.4.linux-amd64.tar.gz | tar -C "$HOME/.local" -xzf -
export PATH="$HOME/.local/go/bin:$PATH"
go version   # should show go1.24.4

Then run go build from the repo root.

Quick Start

1. Plug in your Quest via USB (USB debugging needs to be on)

2. Add a destination:

fetchquest config add-dest

Walks you through connecting a local folder, Google Drive, Dropbox, a NAS, or S3. You can paste a folder link or browse.

3. Sync:

fetchquest sync

4. Free up space:

fetchquest clean

That's it. Run fetchquest sync whenever you plug in.

Desktop App (GUI)

A pixel-art themed desktop app lets you sync, browse files, manage destinations, and clean your Quest — no terminal required.

  • Sync — one-click sync with real-time progress bars and per-file transfer percentages
  • Scout Ahead — preview what will be synced before committing
  • Files — browse files on the Quest or locally, with sync status for each file
  • Places — add and manage destinations (Google Drive, Dropbox, NAS/SMB, or any rclone remote)
  • Clean Quest — delete fully backed-up files from the headset, with a confirmation modal showing exactly what will be removed
  • Settings — set your local sync directory and nickname your devices

Running the app

Double-click FetchQuest (or FetchQuest.exe on Windows). Plug in your Quest via USB, add a destination from the Places tab, and hit Begin Quest!

Building from source

Requires Go 1.21+ and the Wails CLI:

go install github.com/wailsapp/wails/v2/cmd/wails@latest

On Linux, install WebKitGTK first:

sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev  # Ubuntu/Debian

Then build:

cd ui
wails build

The built app will be in ui/build/bin/.

Or add a destination manually
rclone config                                            # set up an rclone remote
fetchquest config add-dest my-nas "nas:share/FetchQuest" # register it

How It Works

FetchQuest uses ADB to pull media off the Quest (USB or WiFi) and rclone to sync it to your destinations. A manifest tracks what's been synced so nothing gets transferred twice.

fetchquest sync pulls everything locally first, then syncs to all destinations. Pass --skip-local if you don't want to keep local copies — it will pull and sync one file at a time straight to your destinations.

fetchquest clean only deletes files from the Quest that are confirmed synced to all destinations. Pass --any to delete files synced to at least one destination instead. --local cleans up the local sync directory instead of the Quest. --dry-run to preview.

Original file timestamps are preserved.

Commands

Command Description
fetchquest sync Pull all media from Quest, then sync to all destinations
fetchquest sync --skip-local Sync straight to destinations without keeping local copies
fetchquest pull Pull media from Quest to local directory
fetchquest push Sync local media to destinations
fetchquest clean Delete synced media from Quest
fetchquest clean --local Delete local files that have already been synced to destinations
fetchquest devices List connected Quests and sync stats
fetchquest config View/manage config
fetchquest config add-dest Add a destination (interactive)

Features

  • Works with multiple Quests — each device is tracked separately so files don't get mixed up
  • Sync to Google Drive, Dropbox, NAS, S3, or any of the 70+ backends rclone supports, and you can sync to more than one at a time
  • --skip-local mode syncs straight to destinations without keeping local copies, for machines with limited disk space
  • fetchquest clean won't delete anything from the Quest unless it's been synced to every destination you've configured (or at least one, with --any)
  • Keeps track of what's already been synced so it doesn't transfer the same file twice
  • Preserves the original recording timestamps on synced files
  • The sync manifest is automatically backed up to your destinations — restore it with fetchquest config restore if you lose your local config
  • Single binary for macOS, Linux, and Windows
  • Desktop GUI — same sync workflow in a windowed app (no terminal required)

Config

~/.config/fetchquest/config.yaml:

sync_dir: ~/FetchQuest
destinations:
  - name: my-nas
    rclone_remote: "nas:share/FetchQuest"
  - name: google-drive
    rclone_remote: "gdrive:FetchQuest"
devices:
  ABC123:
    nickname: "John's Quest 3"
    wifi_ip: "192.168.1.42"
media_paths:
  - /sdcard/Oculus/VideoShots/
  - /sdcard/Oculus/Screenshots/

Building from Source

CLI only:

git clone https://github.com/FluidXR/fetchquest.git
cd fetchquest
go build -o fetchquest .

Desktop app (GUI): See Desktop App above for Wails build steps.

Cross-compile CLI:

GOOS=windows GOARCH=amd64 go build -o fetchquest.exe .
GOOS=linux   GOARCH=amd64 go build -o fetchquest-linux .
GOOS=linux   GOARCH=arm64 go build -o fetchquest-linux-arm64 .

License

MIT

About

A tool for syncing VideoShots and ScreenShots from Meta Quest to hard drives, NAS, cloud storage.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors