From 1557b0c949d1db32bcfd1571e9b1c6c859b58440 Mon Sep 17 00:00:00 2001 From: cori schlegel <46317+cori@users.noreply.github.com> Date: Sat, 11 Apr 2026 02:29:32 +0000 Subject: [PATCH 1/4] Add fpv-rate-profile-playground: apps/fpv-rate-profile-playground/config.json --- apps/fpv-rate-profile-playground/config.json | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 apps/fpv-rate-profile-playground/config.json diff --git a/apps/fpv-rate-profile-playground/config.json b/apps/fpv-rate-profile-playground/config.json new file mode 100644 index 0000000..84cab65 --- /dev/null +++ b/apps/fpv-rate-profile-playground/config.json @@ -0,0 +1,21 @@ +{ + "name": "FPV Rate Profile Playground", + "id": "fpv-rate-profile-playground", + "available": true, + "short_desc": "Visualize, compare, and share Betaflight Actual Rates profiles with a shareable URL API", + "author": "cori", + "port": 8386, + "categories": ["utilities"], + "description": "FPV Rate Profile Playground is a web-based tool for interactively configuring and comparing Betaflight Actual Rates profiles. Adjust roll, pitch, yaw, and throttle parameters with live graph updates, then generate a shareable URL to compare multiple profiles side-by-side. Includes a REST API so LLMs and scripts can POST profile data and receive a visualization URL in return. Import settings from Betaflight CLI dumps and export CLI commands to paste back into your FC.", + "tipi_version": 1, + "min_tipi_version": "4.5.0", + "version": "sha-afc4f58", + "source": "https://github.com/cori/fpv-rate-profile-playground", + "website": "https://github.com/cori/fpv-rate-profile-playground", + "exposable": true, + "supported_architectures": ["arm64", "amd64"], + "created_at": 1744934400000, + "updated_at": 1744934400000, + "dynamic_config": true, + "form_fields": [] +} From 64e9f3e12f34fc0541f0d76b4b92362b1dbf9fe0 Mon Sep 17 00:00:00 2001 From: cori schlegel <46317+cori@users.noreply.github.com> Date: Sat, 11 Apr 2026 02:29:33 +0000 Subject: [PATCH 2/4] Add fpv-rate-profile-playground: apps/fpv-rate-profile-playground/docker-compose.json --- .../docker-compose.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 apps/fpv-rate-profile-playground/docker-compose.json diff --git a/apps/fpv-rate-profile-playground/docker-compose.json b/apps/fpv-rate-profile-playground/docker-compose.json new file mode 100644 index 0000000..7f969a6 --- /dev/null +++ b/apps/fpv-rate-profile-playground/docker-compose.json @@ -0,0 +1,15 @@ +{ + "schemaVersion": 2, + "services": [ + { + "name": "fpv-rate-profile-playground", + "image": "ghcr.io/cori/fpv-rate-profile-playground:sha-afc4f58", + "isMain": true, + "internalPort": "3000", + "environment": [ + { "key": "NODE_ENV", "value": "production" }, + { "key": "PORT", "value": "3000" } + ] + } + ] +} From f8e120cec37003a509e7f42fd8f986d30f9d752d Mon Sep 17 00:00:00 2001 From: cori schlegel <46317+cori@users.noreply.github.com> Date: Sat, 11 Apr 2026 02:29:33 +0000 Subject: [PATCH 3/4] Add fpv-rate-profile-playground: apps/fpv-rate-profile-playground/metadata/description.md --- .../metadata/description.md | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 apps/fpv-rate-profile-playground/metadata/description.md diff --git a/apps/fpv-rate-profile-playground/metadata/description.md b/apps/fpv-rate-profile-playground/metadata/description.md new file mode 100644 index 0000000..c950400 --- /dev/null +++ b/apps/fpv-rate-profile-playground/metadata/description.md @@ -0,0 +1,56 @@ +# FPV Rate Profile Playground + +A web-based tool for visualizing, comparing, and sharing Betaflight Actual Rates profiles in real time. + +## Features + +- **Interactive rate curves** — Roll, pitch, and yaw overlaid on a single graph with live updates as you adjust sliders +- **Throttle curve** — Adjustable mid-point and expo with visual feedback +- **Multi-profile comparison** — Load up to 5 profiles simultaneously; first profile is editable, additional profiles appear as dashed reference overlays +- **Shareable URLs** — Every profile state is encodable as a URL you can bookmark or share +- **CLI import / export** — Paste a Betaflight dump to populate all sliders; copy CLI commands to apply settings on your FC +- **LLM-friendly REST API** — POST rate profiles to `/api/share`, receive a visualization URL back + +## API + +The app exposes a small REST API for programmatic use: + +| Endpoint | Description | +|---|---| +| `POST /api/share` | Submit 1–5 profiles, receive a shareable comparison URL | +| `GET /openapi.json` | OpenAPI 3.0 spec for the API | +| `GET /.well-known/ai-plugin.json` | AI plugin manifest for LLM discoverability | + +### Example: compare two profiles + +```bash +curl -s -X POST http://your-server:8386/api/share \ + -H 'Content-Type: application/json' \ + -d '{ + "profiles": [ + {"name":"Freestyle","roll_rc_rate":70,"roll_rate":670,"roll_expo":0, + "pitch_rc_rate":70,"pitch_rate":670,"pitch_expo":0, + "yaw_rc_rate":70,"yaw_rate":600,"yaw_expo":0,"thr_mid":50,"thr_expo":0}, + {"name":"Cinematic","roll_rc_rate":40,"roll_rate":400,"roll_expo":40, + "pitch_rc_rate":40,"pitch_rate":400,"pitch_expo":40, + "yaw_rc_rate":40,"yaw_rate":350,"yaw_expo":40,"thr_mid":55,"thr_expo":30} + ] + }' | jq -r .url +``` + +Open the returned URL in a browser to see both profiles compared side-by-side. + +## Rate Parameters + +| Field | Range | Description | +|---|---|---| +| `roll_rc_rate` / `pitch_rc_rate` / `yaw_rc_rate` | 0–255 | Center sensitivity | +| `roll_rate` / `pitch_rate` / `yaw_rate` | 200–2000 | Max rate in deg/s | +| `roll_expo` / `pitch_expo` / `yaw_expo` | 0–100 | Expo (0 = linear) | +| `thr_mid` | 0–100 | Throttle mid-point | +| `thr_expo` | 0–100 | Throttle expo | + +## Resources + +- [Source Code](https://github.com/cori/fpv-rate-profile-playground) +- [API Spec](/openapi.json) From 7a2cf418a5aba249538a6186867311b609ae2825 Mon Sep 17 00:00:00 2001 From: cori schlegel <46317+cori@users.noreply.github.com> Date: Sat, 11 Apr 2026 02:29:34 +0000 Subject: [PATCH 4/4] Add fpv-rate-profile-playground: apps/fpv-rate-profile-playground/metadata/logo.jpg --- .../fpv-rate-profile-playground/metadata/logo.jpg | Bin 0 -> 149 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/fpv-rate-profile-playground/metadata/logo.jpg diff --git a/apps/fpv-rate-profile-playground/metadata/logo.jpg b/apps/fpv-rate-profile-playground/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca7c410a0a19ffb0520a38d17a80597efc053f56 GIT binary patch literal 149 zcmex=