Agent skill
fiftyone-code-style
Writes Python code following FiftyOne's official conventions. Use when contributing to FiftyOne, developing plugins, or writing code that integrates with FiftyOne's codebase.
Install this agent skill to your Project
npx add-skill https://github.com/voxel51/fiftyone-skills/tree/main/skills/fiftyone-code-style
SKILL.md
FiftyOne Code Style
Module Template
"""
Module description.
| Copyright 2017-2026, Voxel51, Inc.
| `voxel51.com <https://voxel51.com/>`_
|
"""
import logging
import os
import numpy as np
import eta.core.utils as etau
import fiftyone as fo
import fiftyone.core.fields as fof
import fiftyone.core.labels as fol
import fiftyone.core.utils as fou
logger = logging.getLogger(__name__)
def public_function(arg):
"""Public API function."""
return _helper(arg)
def _helper(arg):
"""Private helper."""
return arg
Import Organization
Four groups, alphabetized within each, separated by blank lines:
| Group | Example |
|---|---|
| 1. Standard library | import logging, import os |
| 2. Third-party | import numpy as np |
| 3. eta packages | import eta.core.utils as etau |
| 4. FiftyOne | import fiftyone.core.labels as fol |
FiftyOne Import Aliases
| Module | Alias |
|---|---|
fiftyone |
fo |
fiftyone.core.labels |
fol |
fiftyone.core.fields |
fof |
fiftyone.core.media |
fom |
fiftyone.core.storage |
fos |
fiftyone.core.utils |
fou |
fiftyone.utils.image |
foui |
fiftyone.utils.video |
fouv |
Docstrings (Google-Style)
def get_operator(operator_uri, enabled=True):
"""Gets the operator with the given URI.
Args:
operator_uri: the operator URI
enabled (True): whether to include only enabled operators (True) or
only disabled operators (False) or all operators ("all")
Returns:
an :class:`fiftyone.operators.Operator`
Raises:
ValueError: if the operator is not found
"""
Key patterns:
- Args with defaults:
param (default): description - Multi-line descriptions: indent continuation
- Cross-references:
:class:fiftyone.module.Class``
Lazy Imports
Use fou.lazy_import() for optional/heavy dependencies:
o3d = fou.lazy_import("open3d", callback=lambda: fou.ensure_package("open3d"))
mask_utils = fou.lazy_import(
"pycocotools.mask", callback=lambda: fou.ensure_import("pycocotools")
)
Guard Patterns
Use hasattr() for optional attributes:
if hasattr(label, "confidence"):
if label.confidence is None or label.confidence < threshold:
label = label.__class__()
Error Handling
Use logger.warning() for non-fatal errors:
try:
result = process_data(data)
except Exception as e:
logger.warning("Failed to process data: %s", e)
Avoid Redundant Code
Before writing new functions, search for existing implementations:
- Local: search the FiftyOne source if available in the environment
- Remote: search
https://github.com/voxel51/fiftyone - Check
fiftyone/core/utils.pyandfiftyone/utils/*first
Common Utilities
| Module | Functions |
|---|---|
fou |
lazy_import(), ensure_package(), extract_kwargs_for_class() |
etau |
guess_mime_type(), ensure_dir(), make_temp_dir() |
Quick Reference
| Pattern | Convention |
|---|---|
| Module structure | Docstring → imports → logger → public → private |
| Private functions | _prefix |
| Docstrings | Google-style with Args/Returns/Raises |
| Error handling | logger.warning() for non-fatal |
| Lazy imports | fou.lazy_import() for optional deps |
| Guard patterns | hasattr() checks |
| Import aliases | fo, fol, fof, fom, fos, fou |
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
fiftyone-create-notebook
Creates Jupyter notebooks for FiftyOne workflows including getting-started guides, tutorials, recipes, and full ML pipelines. Use when creating notebooks, writing tutorials, building demos, or generating FiftyOne walkthroughs covering data loading, exploration, inference, evaluation, and export.
fiftyone-dataset-export
Exports FiftyOne datasets to standard formats (COCO, YOLO, VOC, CVAT, CSV, etc.) and Hugging Face Hub. Use when converting datasets, exporting for training, creating archives, sharing data in specific formats, or publishing datasets to Hugging Face.
fiftyone-embeddings-visualization
Visualizes datasets in 2D using embeddings with UMAP or t-SNE dimensionality reduction. Use when exploring dataset structure, finding clusters, identifying outliers, or understanding data distribution.
fiftyone-voodo-design
Build FiftyOne UIs using VOODO (@voxel51/voodo), the official React component library. Use when building plugin panels, creating interactive UIs, or styling FiftyOne applications. Fetches complete component API reference dynamically.
fiftyone-dataset-import
Imports datasets into FiftyOne with automatic format detection. Supports all media types (images, videos, point clouds), label formats (COCO, YOLO, VOC, KITTI), multimodal grouped datasets, and Hugging Face Hub datasets. Use when importing datasets from local files or Hugging Face, loading autonomous driving data, or creating grouped datasets.
fiftyone-model-evaluation
Evaluate model predictions against ground truth using COCO, Open Images, or custom protocols. Use when computing mAP, precision, recall, confusion matrices, or analyzing TP/FP/FN examples for detection, classification, segmentation, or regression tasks.
Didn't find tool you were looking for?