Spaces:
Running
Running
| title: Grabette Fleet | |
| emoji: ๐ | |
| colorFrom: yellow | |
| colorTo: indigo | |
| sdk: docker | |
| app_port: 7860 | |
| pinned: false | |
| hf_oauth: true | |
| hf_oauth_expiration_minutes: 480 | |
| # Grabette fleet โ operator dashboard + command broker | |
| A **Docker** HuggingFace Space (runs fine on the **free CPU tier**). It is the | |
| operator dashboard *and* an in-memory command broker for one user's fleet. | |
| ``` | |
| operator (this Space, HF login) โโqueue commandโโโถ in-memory broker โโโshort-pollโโ device (Pi) | |
| โโโdevice statusโโ (Bearer hf_token) | |
| device captured data โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ HF dataset (durable) | |
| ``` | |
| - **Operator** signs in with HuggingFace (native Space OAuth) and controls only | |
| their own devices. | |
| - **Devices** connect outbound with `Authorization: Bearer <hf_token>`; the Space | |
| resolves the owner via `whoami` and groups devices by HF identity. | |
| - **Transport** is short-polling โ which also keeps the free Space awake (sleep | |
| is timed from the last request). | |
| State is in-memory: a restart drops it and devices re-register on their next | |
| poll. Durable data (device history, captured datasets) lives in HF datasets, not | |
| here. | |
| ## Duplicate for your own fleet | |
| One Space = one owner = one fleet. Click **โฎ โ Duplicate this Space** to run your | |
| own โ `hf_oauth` is auto-provisioned, so there's nothing to configure. Then point | |
| your devices at it with `GRABETTE_RELAY_URL=https://<you>-grabette-fleet.hf.space`. | |
| Devices are run with `device_app.py` from the grabette_connector project. |