Flywheel customer CLI — authenticate and bulk-upload field data to your workspace.
Project description
flywheel-cli
The Flywheel customer CLI: authenticate and bulk-upload field data straight to your workspace's storage bucket, then let the platform ingest poller pull frames into your corpus.
PyPI distribution: ydderd-flywheel-cli · Homebrew formula: flywheel-cli · command: flywheel.
(The clean flywheel-cli PyPI name was taken, so the distribution carries the ydderd- prefix;
the import package flywheel_cli, the flywheel command, and the brew name are unaffected.)
Why this is a separate package
The CLI talks to the Flywheel API purely over HTTP (and to R2 over S3). It shares no Python
code with the backend, so it ships with a tiny dependency set — httpx + boto3 — instead of
the full server stack (torch, opencv, fastapi, …). That keeps the install small and avoids
shipping the backend's AGPL detector to customers.
Install
brew install ydderd/flywheel/flywheel-cli
# or:
pipx install ydderd-flywheel-cli
flywheel --help
Usage
flywheel auth login # opens a browser; a workspace admin approves
flywheel auth whoami # confirm tenant
flywheel upload ./your-data --scan # bulk upload + trigger ingest
flywheel ingest status # ingest ledger stats
For headless/CI use, skip the browser with a token minted by a workspace admin:
flywheel auth login --token <fw_cli_…>.
Config is stored at ~/.flywheel/config.json. Auth precedence: FLYWHEEL_CLI_TOKEN env >
config file.
Developer notes
These knobs exist for Flywheel developers and are intentionally hidden from customer-facing help and docs:
--api-url <url>onflywheel auth login— persist a non-production API base URL to the config (e.g. a local API). Hidden viaargparse.SUPPRESS.FLYWHEEL_API_URLenv — override the API base per-invocation. Takes precedence over the config file.
Precedence for the API base URL: FLYWHEEL_API_URL env > api_url in config > default
(https://flywheeling.fly.dev — swap to a custom domain once one is live).
Point the CLI at a local backend during development:
FLYWHEEL_API_URL=http://localhost:8000 flywheel auth whoami
# or persist it:
flywheel auth login --token <fw_cli_…> --api-url http://localhost:8000
Local development
cd cli
uv sync
uv run flywheel --help
uv run pytest
Releasing (PyPI + Homebrew)
PyPI is the source of truth; the Homebrew formula wraps the published PyPI sdist.
1. Publish to PyPI — via GitHub Actions (Trusted Publishing, no token)
The .github/workflows/publish-cli.yml workflow builds and publishes over OIDC. Cut a release
by pushing a namespaced tag from the monorepo default branch:
git tag cli-v0.1.0 && git push origin cli-v0.1.0
The PyPI project is ydderd-flywheel-cli, published from ydderd/flywheel via the pypi
environment. (First publish activates the "pending" Trusted Publisher and creates the project.)
2. Update the Homebrew tap formula
After the PyPI release exists, point release.sh at your tap checkout — with SKIP_PUBLISH=1
it skips the upload and only fetches the published sdist's url/sha256, rewrites the formula,
and regenerates its Python resource blocks:
SKIP_PUBLISH=1 \
FORMULA_PATH=/path/to/homebrew-flywheel/Formula/flywheel-cli.rb \
cli/scripts/release.sh
Then commit + push the tap. Customers install with:
brew install ydderd/flywheel/flywheel-cli
release.shcan also publish to PyPI itself (UV_PUBLISH_TOKEN=pypi-… cli/scripts/release.sh) if you prefer a token-based local release over the GitHub Action.
Bumping a release: change version in pyproject.toml, push a new cli-v* tag, then re-run
step 2.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ydderd_flywheel_cli-0.2.1.tar.gz.
File metadata
- Download URL: ydderd_flywheel_cli-0.2.1.tar.gz
- Upload date:
- Size: 17.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4f0939159c460ed4c0979db1498f74970afcdc56ebc95bb00d47f2e380e8291
|
|
| MD5 |
c187f94da3fc9e21596b99c6e1056755
|
|
| BLAKE2b-256 |
0482e8bfe510a586ba73c18713e77a4d4ee506648b6a94042563c5fcdf55105c
|
Provenance
The following attestation bundles were made for ydderd_flywheel_cli-0.2.1.tar.gz:
Publisher:
publish-cli.yml on ydderd/flywheel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ydderd_flywheel_cli-0.2.1.tar.gz -
Subject digest:
d4f0939159c460ed4c0979db1498f74970afcdc56ebc95bb00d47f2e380e8291 - Sigstore transparency entry: 2088197615
- Sigstore integration time:
-
Permalink:
ydderd/flywheel@2a47e7d3057744acd3f3629b5c9eccabb130c811 -
Branch / Tag:
refs/tags/cli-v0.2.1 - Owner: https://github.com/ydderd
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-cli.yml@2a47e7d3057744acd3f3629b5c9eccabb130c811 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ydderd_flywheel_cli-0.2.1-py3-none-any.whl.
File metadata
- Download URL: ydderd_flywheel_cli-0.2.1-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
987ccddc5485e54cc56ecde9056b7581630f7e8532cc78709d5c993799648f2a
|
|
| MD5 |
713a0e21357bd8195240d651947f331f
|
|
| BLAKE2b-256 |
a75455866557363fbb382dbd5bd388c0264d5c48518a6388d349f8c578ba3fea
|
Provenance
The following attestation bundles were made for ydderd_flywheel_cli-0.2.1-py3-none-any.whl:
Publisher:
publish-cli.yml on ydderd/flywheel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ydderd_flywheel_cli-0.2.1-py3-none-any.whl -
Subject digest:
987ccddc5485e54cc56ecde9056b7581630f7e8532cc78709d5c993799648f2a - Sigstore transparency entry: 2088197770
- Sigstore integration time:
-
Permalink:
ydderd/flywheel@2a47e7d3057744acd3f3629b5c9eccabb130c811 -
Branch / Tag:
refs/tags/cli-v0.2.1 - Owner: https://github.com/ydderd
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-cli.yml@2a47e7d3057744acd3f3629b5c9eccabb130c811 -
Trigger Event:
push
-
Statement type: