|
1 | | -# aloha-template |
| 1 | +## FiftyOne Plugin Examples 🔌🚀 |
2 | 2 |
|
3 | | -<!-- markdownlint-disable no-inline-html line-length --> |
4 | | -<div align="center"> |
5 | | -<p align="center"> |
| 3 | +FiftyOne provides a powerful |
| 4 | +[plugin framework](https://docs.voxel51.com/plugins/index.html) that allows for |
| 5 | +extending and customizing the functionality of the tool. |
6 | 6 |
|
7 | | -<img src="https://user-images.githubusercontent.com/25985824/106288517-2422e000-6216-11eb-871d-26ad2e7b1e59.png" height="55px" alt="Voxel51 logo"> |
8 | | -<img src="https://user-images.githubusercontent.com/25985824/106288518-24bb7680-6216-11eb-8f10-60052c519586.png" height="50px" alt="FiftyOne logo"> |
| 7 | +With plugins, you can add new functionality to the FiftyOne App, create |
| 8 | +integrations with other tools and APIs, render custom panels, and add custom |
| 9 | +buttons to menus. |
9 | 10 |
|
10 | | -</p> |
11 | | -</div> |
12 | | -<!-- markdownlint-enable no-inline-html line-length --> |
| 11 | +With |
| 12 | +[FiftyOne Teams](https://docs.voxel51.com/teams/teams_plugins.html#delegated-operations), |
| 13 | +you can even write plugins that allow users to execute long-running tasks from |
| 14 | +within the App that run on a connected compute cluster. |
13 | 15 |
|
14 | | ---- |
| 16 | +This repository contains a comprehensive collection of **FiftyOne Plugin Examples** |
| 17 | +designed to inspire and educate you on how to build your own plugins. Each example |
| 18 | +demonstrates different aspects of the plugin system and serves as a learning resource |
| 19 | +for developers looking to extend FiftyOne's functionality. |
15 | 20 |
|
16 | | -Aloha Team Template. Files in this repository include: |
| 21 | +For example, here's a taste of what you can build with the plugin framework! |
17 | 22 |
|
18 | | -1. .github/CODEOWNERS |
19 | | -1. .github/pull_request_template.md |
20 | | -1. .github/workflows/pre-commit.yml |
21 | | -1. .markdownlint.yaml |
22 | | -1. .pre-commit-config.yaml |
23 | | -1. .tool-versions |
24 | | -1. Makefile |
| 23 | +https://github.com/voxel51/fiftyone-plugins/assets/25985824/128d9fbd-9835-49e8-bbb9-93ea5093871f |
| 24 | + |
| 25 | +## Table of Contents |
| 26 | + |
| 27 | +This repository contains a curated collection of |
| 28 | +[FiftyOne Plugin Examples](https://docs.voxel51.com/plugins/index.html), organized into |
| 29 | +the following categories: |
| 30 | + |
| 31 | +- [Core Examples](#core-examples): fundamental examples that demonstrate essential plugin concepts and patterns |
| 32 | +- [Operator Examples](#operator-examples): examples showing how to build custom operators and operations |
| 33 | +- [Panel Examples](#panel-examples): examples demonstrating how to create custom panels and visualizations |
| 34 | +- [Integration Examples](#integration-examples): examples showing how to integrate with external tools and APIs |
| 35 | +- [Advanced Examples](#advanced-examples): complex examples showcasing advanced plugin capabilities |
| 36 | + |
| 37 | +## Core Examples |
| 38 | + |
| 39 | +<table> |
| 40 | + <tr> |
| 41 | + <th>Name</th> |
| 42 | + <th>Description</th> |
| 43 | + </tr> |
| 44 | + <tr> |
| 45 | + <td><b><a href="plugins/skeleton">skeleton</a></b></td> |
| 46 | + <td>🦴 A minimal plugin template showing the basic structure and components needed to get started</td> |
| 47 | + </tr> |
| 48 | + <tr> |
| 49 | + <td><b><a href="plugins/hello-world">hello-world</a></b></td> |
| 50 | + <td>👋 A simple example that contains both Python and JavaScript components to demonstrate cross-language plugin development</td> |
| 51 | + </tr> |
| 52 | + <tr> |
| 53 | + <td><b><a href="plugins/basic-operator">basic-operator</a></b></td> |
| 54 | + <td>⚙️ Learn how to create your first custom operator with input/output schemas and execution logic</td> |
| 55 | + </tr> |
| 56 | + <tr> |
| 57 | + <td><b><a href="plugins/basic-panel">basic-panel</a></b></td> |
| 58 | + <td>📊 Create your first custom panel to display data and interact with your FiftyOne datasets</td> |
| 59 | + </tr> |
| 60 | +</table> |
| 61 | + |
| 62 | +## Operator Examples |
| 63 | + |
| 64 | +<table> |
| 65 | + <tr> |
| 66 | + <th>Name</th> |
| 67 | + <th>Description</th> |
| 68 | + </tr> |
| 69 | + <tr> |
| 70 | + <td><b><a href="plugins/operator-examples">operator-examples</a></b></td> |
| 71 | + <td>⚙️ A comprehensive collection of example operators showing how to use the operator type system to build custom FiftyOne operations</td> |
| 72 | + </tr> |
| 73 | + <tr> |
| 74 | + <td><b><a href="plugins/data-transformation">data-transformation</a></b></td> |
| 75 | + <td>🔄 Examples of operators that transform and manipulate dataset fields and metadata</td> |
| 76 | + </tr> |
| 77 | + <tr> |
| 78 | + <td><b><a href="plugins/external-api">external-api</a></b></td> |
| 79 | + <td>🌐 Learn how to build operators that integrate with external APIs and services</td> |
| 80 | + </tr> |
| 81 | + <tr> |
| 82 | + <td><b><a href="plugins/batch-processing">batch-processing</a></b></td> |
| 83 | + <td>📦 Examples of operators that process multiple samples efficiently</td> |
| 84 | + </tr> |
| 85 | +</table> |
| 86 | + |
| 87 | +## Panel Examples |
| 88 | + |
| 89 | +<table> |
| 90 | + <tr> |
| 91 | + <th>Name</th> |
| 92 | + <th>Description</th> |
| 93 | + </tr> |
| 94 | + <tr> |
| 95 | + <td><b><a href="plugins/panel-examples">panel-examples</a></b></td> |
| 96 | + <td>📊 A collection of example panels demonstrating common patterns for building Python panels</td> |
| 97 | + </tr> |
| 98 | + <tr> |
| 99 | + <td><b><a href="plugins/visualization-panels">visualization-panels</a></b></td> |
| 100 | + <td>📈 Examples of custom visualization panels using popular charting libraries</td> |
| 101 | + </tr> |
| 102 | + <tr> |
| 103 | + <td><b><a href="plugins/interactive-panels">interactive-panels</a></b></td> |
| 104 | + <td>🖱️ Learn how to build interactive panels that respond to user input and selections</td> |
| 105 | + </tr> |
| 106 | + <tr> |
| 107 | + <td><b><a href="plugins/data-exploration">data-exploration</a></b></td> |
| 108 | + <td>🔍 Examples of panels designed for exploring and analyzing dataset characteristics</td> |
| 109 | + </tr> |
| 110 | +</table> |
| 111 | + |
| 112 | +## Integration Examples |
| 113 | + |
| 114 | +<table> |
| 115 | + <tr> |
| 116 | + <th>Name</th> |
| 117 | + <th>Description</th> |
| 118 | + </tr> |
| 119 | + <tr> |
| 120 | + <td><b><a href="plugins/ml-framework-integration">ml-framework-integration</a></b></td> |
| 121 | + <td>🤖 Examples showing how to integrate with popular ML frameworks like PyTorch, TensorFlow, and scikit-learn</td> |
| 122 | + </tr> |
| 123 | + <tr> |
| 124 | + <td><b><a href="plugins/cloud-integration">cloud-integration</a></b></td> |
| 125 | + <td>☁️ Learn how to build plugins that work with cloud storage and compute services</td> |
| 126 | + </tr> |
| 127 | + <tr> |
| 128 | + <td><b><a href="plugins/database-integration">database-integration</a></b></td> |
| 129 | + <td>🗄️ Examples of plugins that integrate with external databases and data sources</td> |
| 130 | + </tr> |
| 131 | + <tr> |
| 132 | + <td><b><a href="plugins/annotation-integration">annotation-integration</a></b></td> |
| 133 | + <td>✏️ Learn how to integrate with annotation tools and workflows</td> |
| 134 | + </tr> |
| 135 | +</table> |
| 136 | + |
| 137 | +## Advanced Examples |
| 138 | + |
| 139 | +<table> |
| 140 | + <tr> |
| 141 | + <th>Name</th> |
| 142 | + <th>Description</th> |
| 143 | + </tr> |
| 144 | + <tr> |
| 145 | + <td><b><a href="plugins/delegated-operations">delegated-operations</a></b></td> |
| 146 | + <td>📡 Examples of plugins that use FiftyOne Teams delegated operations for long-running tasks</td> |
| 147 | + </tr> |
| 148 | + <tr> |
| 149 | + <td><b><a href="plugins/custom-workflows">custom-workflows</a></b></td> |
| 150 | + <td>🔄 Complex examples showing how to build multi-step workflows and pipelines</td> |
| 151 | + </tr> |
| 152 | + <tr> |
| 153 | + <td><b><a href="plugins/real-time-integration">real-time-integration</a></b></td> |
| 154 | + <td>⚡ Examples of plugins that handle real-time data streams and live updates</td> |
| 155 | + </tr> |
| 156 | + <tr> |
| 157 | + <td><b><a href="plugins/performance-optimization">performance-optimization</a></b></td> |
| 158 | + <td>🚀 Advanced examples demonstrating techniques for optimizing plugin performance</td> |
| 159 | + </tr> |
| 160 | +</table> |
| 161 | + |
| 162 | +## Using Examples |
| 163 | + |
| 164 | +### Install FiftyOne |
| 165 | + |
| 166 | +If you haven't already, install |
| 167 | +[FiftyOne](https://github.com/voxel51/fiftyone): |
| 168 | + |
| 169 | +```shell |
| 170 | +pip install fiftyone |
| 171 | +``` |
| 172 | + |
| 173 | +### Running examples |
| 174 | + |
| 175 | +To explore these examples, you can clone this repository and run them locally: |
| 176 | + |
| 177 | +```shell |
| 178 | +git clone https://github.com/voxel51/fiftyone-plugin-examples |
| 179 | +cd fiftyone-plugin-examples |
| 180 | +``` |
| 181 | + |
| 182 | +Each example directory contains: |
| 183 | +- A `README.md` with detailed instructions |
| 184 | +- Source code demonstrating the concept |
| 185 | +- Any necessary configuration files |
| 186 | +- Instructions for testing and running the example |
| 187 | + |
| 188 | +### Example management |
| 189 | + |
| 190 | +You can use the |
| 191 | +[CLI commands](https://docs.voxel51.com/cli/index.html#fiftyone-plugins) below |
| 192 | +to manage examples you've installed: |
| 193 | + |
| 194 | +```shell |
| 195 | +# List all plugins you've downloaded |
| 196 | +fiftyone plugins list |
| 197 | + |
| 198 | +# List the available operators and panels |
| 199 | +fiftyone operators list |
| 200 | + |
| 201 | +# Disable a particular plugin |
| 202 | +fiftyone plugins disable <name> |
| 203 | + |
| 204 | +# Enable a particular plugin |
| 205 | +fiftyone plugins enable <name> |
| 206 | +``` |
| 207 | + |
| 208 | +### Local development |
| 209 | + |
| 210 | +If you plan to develop plugins locally, you can clone the repository and |
| 211 | +symlink it into your FiftyOne plugins directory like so: |
| 212 | + |
| 213 | +```shell |
| 214 | +cd /path/to/fiftyone-plugin-examples |
| 215 | +ln -s "$(pwd)" "$(fiftyone config plugins_dir)/fiftyone-plugin-examples" |
| 216 | +``` |
| 217 | + |
| 218 | +### Contributing to this repository 🙌 |
| 219 | + |
| 220 | +You're also welcome to contribute to the examples that live natively in this |
| 221 | +repository. Check out the [contributions guide](CONTRIBUTING.md) for |
| 222 | +instructions. |
| 223 | + |
| 224 | +## Join the Community |
| 225 | + |
| 226 | +If you want join a fast-growing community of engineers, researchers, and |
| 227 | +practitioners who love computer vision, join the |
| 228 | +[FiftyOne Discord community](https://community.voxel51.com/?_gl=1*1ph47fb*_gcl_au*NjI4MTMwMzIxLjE3MzY0NTM0MDc.) 🚀🚀🚀 |
| 229 | + |
| 230 | +**💡 Pro tip:** the `#plugins` channel is a great place to discuss plugin development! |
| 231 | + |
| 232 | +## About FiftyOne |
| 233 | + |
| 234 | +If you've made it this far, we'd greatly appreciate if you'd take a moment to |
| 235 | +check out [FiftyOne](https://github.com/voxel51/fiftyone) and give us a star! |
| 236 | + |
| 237 | +FiftyOne is an open source library for building high-quality datasets and |
| 238 | +computer vision models. It's the engine that powers this project. |
| 239 | + |
| 240 | +Thanks for visiting! 😊 |
0 commit comments