Aylian StudiosAylianStudios
Back to Projects
DesktopActiveSince Feb 2025

Ballchasing Uploader

Standalone Rust desktop tool that auto-uploads Rocket League replays to ballchasing.com using OS-level filesystem watching and SHA256 deduplication.

Rusteguitokionotifyreqwest

Overview

A standalone desktop utility that automatically uploads Rocket League replay files to ballchasing.com. Built as an open-source replacement for BakkesMod's built-in auto-upload feature, which was removed after Easy Anti-Cheat integration prevented BakkesMod from handling uploads directly. While originally developed as part of PEARL, this tool is packaged separately for the wider Rocket League community.

How It Works

The uploader uses native OS filesystem APIs through the notify crate — not polling. On Windows this means ReadDirectoryChangesW, on Linux inotify, and on macOS FSEvents. When Rocket League finishes writing a .replay file to the Demos folder, the OS fires an event, a 500ms debouncer waits for the file to be fully written, and the upload pipeline kicks in.

Before uploading, the tool computes a SHA256 hash of the replay file and checks it against a persisted deduplication cache. This prevents re-uploading the same replay if you restart the app or if the watcher fires duplicate events. Failed uploads are enqueued in a persistent retry queue (max 5 attempts) that survives app restarts.

Key Features

  • OS-native filesystem watching (no polling) with 500ms debounce
  • SHA256 file hashing for deduplication
  • Persistent upload retry queue across app restarts
  • API key verification with account tier and rate limit display
  • Configurable visibility (public/unlisted/private)
  • egui desktop GUI with real-time upload log
  • Auto-detection of Rocket League replay folder
  • Manual folder picker for custom locations
  • Cross-platform config storage (AppData/config/Library)

Related Projects