Rates is a Betaflight-first browser tool for viewing, tweaking, and sharing FPV rate setups.
It is built as a simple static site for GitHub Pages, with an optional Cloudflare Worker for shortlinks.
Live URLs:
- app:
https://rates.fpvtools.co.uk - shortlinks:
https://r.fpvtools.co.uk
- supports
ActualandBetaflightrate models - shows a live rate curve preview
- shows a throttle curve preview
- supports roll / pitch linking
- stores pilot tag, model name, setup name, and Betaflight version in shared state
- shares setups by readable URL
- creates branded shortlinks through Cloudflare Workers KV
- imports pasted Betaflight CLI
- exports a Betaflight CLI block
This project is intentionally Betaflight-oriented.
Current support:
ActualBetaflight- per-axis roll, pitch, yaw editing
- throttle hover, mid, expo, and throttle limit
- share view
- custom shortlink aliases
Not in scope yet:
- simulator-specific formats
- every historical Betaflight edge case
- claiming exact parity with Betaflight Configurator graph math
Normal share URLs use readable query params.
Example fields:
pilotmodelnamebftypelinkthrHoverthrMidthrExthrLimitTypethrLimitrollRc,rollSr,rollExpitchRc,pitchSr,pitchExyawRc,yawSr,yawEx
Shortlinks store a compact internal state payload in KV and redirect back to the main app in share view.
Older compact s= links still load for compatibility.
The tool imports and exports common Betaflight CLI fields including:
rates_typeroll_rc_rate,roll_srate,roll_expopitch_rc_rate,pitch_srate,pitch_expoyaw_rc_rate,yaw_srate,yaw_expothr_hoverthr_midthr_expothrottle_limit_typethrottle_limit_percent
Rate fields are treated as integers in the UI to better match what Betaflight expects. Expo remains decimal in the editor and percent-based in CLI export.
Serve the root directory with any static server:
python3 -m http.server 8000Then open:
http://localhost:8000
The Worker lives in worker/ and uses one KV namespace bound as SHORTLINKS.
Current worker routes:
POST /api/shortenGET /:idGET /health
Worker setup:
cd workerwrangler loginwrangler kv namespace create SHORTLINKSor another title such asSHORTLINKS_CLEAN- copy the returned namespace ID into
worker/wrangler.tomlunder theSHORTLINKSbinding wrangler deploy
Production worker config currently expects:
APP_BASE_URL = "https://rates.fpvtools.co.uk/"PUBLIC_BASE_URL = "https://r.fpvtools.co.uk"
- Oscar Liang rates guide: https://oscarliang.com/rates/
- Oscar Liang throttle mid / expo guide: https://oscarliang.com/throttle-mid-expo/
- Oscar Liang throttle scale guide: https://oscarliang.com/throttle-scale/
- Betaflight profiles and rate profiles: https://www.betaflight.com/docs/development/Profiles
- Betaflight CLI docs: https://www.betaflight.com/docs/development/Cli
- the graph and throttle preview are meant to be useful and close, but should still be sanity-checked against Betaflight Configurator when exact parity matters
- readable share URLs are the public default; compact state is mainly for shortlink storage and legacy compatibility
- rotating or replacing the KV namespace will invalidate existing shortlinks, but not readable share URLs