fiftyone · git:20260917.a8b1c33 · 2026-09-17 · sha256 9fd603922b6f91b5
fiftyone git:20260917.a8b1c33A
Immutable. This exact content never changes and is served at /api/v1/blob/9fd603922b6f91b5.
--- name: fiftyone description: Use when deploying, launching, loading data into, or reviewing the FiftyOne workbench dataset curation and visualization tool. --- # FiftyOne The PAIDF worker image remains contract-attested and non-root for SkyPilot 0.12.2, with passwordless sudo, SSH/rsync/service prerequisites, writable paths, and a forwarding entrypoint. Submit the verified immutable digest; never use a `runAsUser: 0` workflow override. Verify the actual bootstrap behavior for each replacement digest; the OCI label alone does not prove that setup, SSH and command forwarding work. FiftyOne is the dataset curation and visualization tool. It is CPU-only and does not require a GPU. ## Interfaces API: - `POST /load-dataset` - `GET /status` - `GET /system-info` CLI: ```bash npa workbench fiftyone deploy npa workbench fiftyone launch npa workbench fiftyone load-dataset npa workbench fiftyone curate-augmented # real FiftyOne Brain curation of a paidf run npa workbench fiftyone status npa workbench fiftyone system-info npa workbench fiftyone list ``` `npa workbench fiftyone open` maintains a verified SSH tunnel for a VM or `kubectl port-forward` for Kubernetes; callers should not need raw tunnel commands. ## Deployment And Access The App is an operator interface with access to service-readable files. Bind it to `127.0.0.1` and access it through authenticated SSH or Kubernetes port-forward. `--public-ip`, non-loopback `--address`, and application ingress are rejected. Kubernetes uses a ClusterIP Service only as a port-forward target; the pod's App and its exec readiness check use loopback. Keep Kubernetes port-forward RBAC limited to authorized operators. CORS does not provide authentication. Stock FiftyOne App has no `/health` endpoint: `GET /` returns 200 and `GET /health` returns 307. Managed VM `deploy` defaults to in-place updates for existing aliases. Terraform plans that would destroy or replace critical infrastructure are blocked unless the operator passes `--replace` and confirms with `--yes` for automation. VM and BYOVM deploys record `endpoint_strategy: ssh_fallback`. Live status and GraphQL requests always create a fresh SSH forward with verified host keys, including for older aliases that recorded a public endpoint. Launch and dataset loading run over SSH. Use `open` to keep a browser tunnel alive. Unknown or changed SSH host keys fail closed; provide an independently verified `NPA_SSH_KNOWN_HOSTS` file for a BYOVM host without a provider pin. Redeploy old Kubernetes and container deployments to replace public listeners; native VM launch also migrates its service environment to loopback. Redeploy older versions to use the current validated image; existing tags retain their original bytes. ## Real Curation (Brain) The image ships FiftyOne Brain (uniqueness / similarity / visualization) so it can do *real* curation, not just viewing. `npa workbench fiftyone curate-augmented --augment-uri <cosmos_augmented/> --curator-report-uri <curation/cosmos_curator.json> --report-uri <curation/report.json>` runs the Physical AI Data Factory curation in-container: it builds a real `fiftyone.Dataset` from the augmented scenario variants, computes a GPU-free per-variant embedding (downsampled RGB + color histogram, via Pillow/numpy), and runs `fob.compute_uniqueness` + `fob.compute_similarity(...).find_duplicates()` + `fob.compute_visualization(method="pca")`. The report records `curation_engine: fiftyone-brain`, per-variant `uniqueness`, near-duplicate clusters, and which variants were kept vs dropped. A completed real Cosmos Curator report is required via `--curator-report-uri`; missing/unavailable Curator or FiftyOne Brain is always a hard failure. The shipped PAIDF workflow also passes `--require-fiftyone` as an explicit compatibility assertion through the `workbench.fiftyone.curate_augmented` toolRef, so a claimed PAIDF FiftyOne review always means both real stages ran. The container functional smoke (`docker/workbench/fiftyone/smoke_functional.py`) exercises this Brain path. The `npa-fiftyone` image bundles `mongod` (the prebuilt `fiftyone_db` wheel ships no mongod for trixie) into `fiftyone/db/bin/` so FiftyOne launches its own metadata DB. The CPU golden evaluation runs the standalone functional smoke: version, dataset creation and query, Brain curation, and App launch on loopback. Qualify the bundled database and repeat the dependency check after the actual initial NPA source install in the selected FiftyOne interpreter. MongoDB Community Server uses SSPL v1, not an OSI-approved license. Its notices, matching corresponding source and recipient access need verification before public image redistribution; service-use obligations remain a separate review. The supported FiftyOne 1.21 release includes a verified source annex and passes the actual initial NPA install, dependency and functional gates. Repeat these checks for each replacement digest. Follow the [release requirements and validator command](../../../npa/docker/workbench/fiftyone/RELEASE.md) to bind the exact local image ID and committed source revision, check real bootstrap and functional behavior, and retain raw evidence in a private directory. Only the allowlisted public summary belongs in the CI artifact. Do not infer publication readiness from the Dockerfile or license labels. ## Data Patterns FiftyOne Brain uses `fob.compute_visualization` for CLIP UMAP embeddings. Brain methods also accept precomputed `embeddings=` (no model / GPU) — that is how the paidf `curate-augmented` path runs uniqueness/similarity/visualization CPU-only. FiftyOne supports custom field schemas. Do not assume generic auto-extracted fields are required. Open the selected BDD100K demo dataset through the same authenticated local route.