Rodrigo Chagas
EST. 2005 · BH/BR · UTC−3
← All work

SpeedSync Studio

Desktop app that overlays GPS-derived speed, lap timing and G-force onto GoPro footage via a zero-disk-write FFmpeg pipeline.

Role

Solo engineer — architecture, Rust backend, React frontend, all widget rendering

Stack

Rust · Tauri · React · TypeScript · FFmpeg · OffscreenCanvas

Result

10–20×

faster export — from raw race footage to a finished, shareable clip

Screenshots
Fig. 01 / 02
Fig. 02 / 02
In the field
Fig. 01 / 02
Fig. 02 / 02
Demo Videos

§ 01Context

Action-camera footage (GoPro, DJI) embeds a GPMF telemetry stream — GPS, accelerometer, gyroscope — that's rarely used past the stock app's static stat screen. I wanted speed, lap times and G-force burned into the video itself, as configurable on-screen widgets, without round-tripping through a video editor. That meant parsing an undocumented binary telemetry format and building a rendering pipeline that could composite 20–30 animated widgets per frame at video framerate, then hand off to hardware-accelerated encoding — all inside a native desktop shell.

§ 02What I built

A Tauri v2 app: Rust backend for GPMF stream extraction, FFmpeg process management and video probing; React/TypeScript frontend for the editor and widget system. The first export pipeline used DOM capture (html-to-image) to rasterize each frame, which worked but crashed WebKit's render process after enough frames due to accumulated getComputedStyle calls. I rewrote the entire render path as Canvas2D. Every widget (28 speedometer variants, GPS circuit map, lap timer, G-force ball, compass) got a from-scratch canvas renderer running inside a Web Worker on an OffscreenCanvas, off the main thread entirely. Frames are piped as PNG bytes over IPC directly into FFmpeg's stdin via image2pipe, so encoding starts immediately and runs concurrently with rendering. No frame ever touches disk, and export time approaches max(render, encode) instead of their sum. Lap detection uses a direction-aware crossing check with a consensus-track algorithm (arc-length resampling + median across laps) to reject false positives from GPS noise near the start/finish line.

§ 03Outcome

A tool for athletes and motorsport enthusiasts who record with action cameras and want more than a stock highlight reel. They get full control over how their own speed, lap times and G-force show up on screen. I owned the entire arc solo: the original idea, the implementation, testing against real kart-racing footage race weekend after race weekend, and sharing it with the racing community it was built for. Currently a working macOS build I use every session, with public distribution (code signing, notarization) as the next step.