Skip to content

Commit

Permalink
Merge pull request #4647 from voxel51/release-notes
Browse files Browse the repository at this point in the history
Release notes v0.25.0
  • Loading branch information
brimoor authored Aug 20, 2024
2 parents dbd13b9 + 9ea7b21 commit e21f1ba
Show file tree
Hide file tree
Showing 6 changed files with 239 additions and 24 deletions.
2 changes: 2 additions & 0 deletions docs/source/deprecation.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.. _deprecation-notices:

FiftyOne Deprecation Notices
============================

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
53 changes: 31 additions & 22 deletions docs/source/plugins/developing_plugins.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2471,12 +2471,12 @@ panel layout based on user input.
.. code-block:: python
:linenos:
class DropdownMenuPanel(foo.Panel):
class DropdownMenuExample(foo.Panel):
@property
def config(self):
return foo.PanelConfig(
name="example_dropdown_menu",
label="Python Panel Example: Dropdown Menu",
label="Examples: Dropdown Menu",
)
def on_load(self, ctx):
Expand All @@ -2492,7 +2492,7 @@ panel layout based on user input.
ctx.ops.reload_samples()
def say_hi(self, ctx):
ctx.ops.notify("Hi!")
ctx.ops.notify("Hi!", variant="success")
def render(self, ctx):
panel = types.Object()
Expand All @@ -2506,7 +2506,7 @@ panel layout based on user input.
""",
name="header",
width="500px",
width=50, # 50% of current panel width
height="200px",
)
Expand Down Expand Up @@ -2594,18 +2594,20 @@ the App.
import fiftyone.operators.types as types
from fiftyone import ViewField as F
class InteractiveHistogram(foo.Panel):
class InteractivePlotExample(foo.Panel):
@property
def config(self):
return foo.PanelConfig(
name="interactive_histogram_example",
label="Interactive Histogram Example",
name="example_interactive_plot",
label="Examples: Interactive Plot",
icon="bar_chart",
)
def on_load(self, ctx):
# Get target field
target_field = ctx.panel.state.target_field or "ground_truth.detections.label"
target_field = (
ctx.panel.state.target_field or "ground_truth.detections.label"
)
ctx.panel.state.target_field = target_field
# Compute target histogram for current dataset
Expand All @@ -2616,7 +2618,7 @@ the App.
ctx.panel.data.histogram = {"x": keys, "y": values, "type": "bar"}
# Launch panel in a horizontal split view
ctx.ops.split_panel("interactive_histogram_example", layout="horizontal")
ctx.ops.split_panel("example_interactive_plot", layout="horizontal")
def on_change_view(self, ctx):
# Update histogram when current view changes
Expand All @@ -2628,10 +2630,11 @@ the App.
# Create a view that matches the selected histogram bar
field = ctx.panel.state.target_field
view = get_view(ctx.dataset, field, value)
view = _make_matching_view(ctx.dataset, field, value)
if view:
ctx.ops.set_view(view)
# Load view in App
if view is not None:
ctx.ops.set_view(view=view)
def reset(self, ctx):
ctx.ops.clear_view()
Expand All @@ -2657,7 +2660,10 @@ the App.
)
panel.btn(
"reset", label="Reset Chart", on_click=self.reset, variant="contained"
"reset",
label="Reset Chart",
on_click=self.reset,
variant="contained",
)
return types.Property(
Expand All @@ -2673,7 +2679,7 @@ the App.
),
)
def get_view(dataset, field, value):
def _make_matching_view(dataset, field, value):
if field.endswith(".label"):
root_field = field.split(".")[0]
return dataset.filter_labels(root_field, F("label") == value)
Expand All @@ -2700,12 +2706,12 @@ guided workflow.
.. code-block:: python
:linenos:
class WalkthroughTutorialPanel(foo.Panel):
class WalkthroughExample(foo.Panel):
@property
def config(self):
return foo.PanelConfig(
name="example_walkthrough_tutorial",
label="Python Panel Example: Walkthrough Tutorial",
name="example_walkthrough",
label="Examples: Walkthrough",
)
def on_load(self, ctx):
Expand Down Expand Up @@ -2739,7 +2745,9 @@ guided workflow.
stack = panel.v_stack(
"welcome", gap=2, width=75, align_x="center", align_y="center"
)
button_container = types.GridView(gap=2, align_x="left", align_y="center")
button_container = types.GridView(
gap=2, align_x="left", align_y="center"
)
page = ctx.panel.state.get("page", 1)
Expand Down Expand Up @@ -2842,11 +2850,12 @@ forms of image and video data.
.. code-block:: python
:linenos:
class ImagePanel(foo.Panel):
class ImageExample(foo.Panel):
@property
def config(self):
return foo.PanelConfig(
name="example_image", label="Python Panel Example: Image"
name="example_image",
label="Examples: Image",
)
def on_load(self, ctx):
Expand Down Expand Up @@ -2903,12 +2912,12 @@ forms of image and video data.
.. code-block:: python
:linenos:
class MediaPlayerPanel(foo.Panel):
class MediaPlayerExample(foo.Panel):
@property
def config(self):
return foo.PanelConfig(
name="example_media_player",
label="Python Panel Example: Media Player",
label="Examples: Media Player",
)
def on_load(self, ctx):
Expand Down
9 changes: 9 additions & 0 deletions docs/source/plugins/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ these plugins available in the
+-------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
| `@voxel51/brain <https://github.com/voxel51/fiftyone-plugins/blob/main/plugins/brain/README.md>`_ | 🧠 Utilities for working with the FiftyOne Brain |
+-------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
| `@voxel51/dashboard <https://github.com/voxel51/fiftyone-plugins/blob/main/plugins/dashboard/README.md>`_ | 📊 Create your own custom dashboards from within the App |
+-------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
| `@voxel51/evaluation <https://github.com/voxel51/fiftyone-plugins/blob/main/plugins/evaluation/README.md>`_ | ✅ Utilities for evaluating models with FiftyOne |
+-------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
| `@voxel51/io <https://github.com/voxel51/fiftyone-plugins/blob/main/plugins/io/README.md>`_ | 📁 A collection of import/export utilities |
Expand Down Expand Up @@ -80,6 +82,13 @@ plugin and proceed with other work while the execution happens in the background

.. image:: /images/plugins/operators/examples/embeddings.gif

Want to create a custom dashboard that displays statistics of interest about
the current dataset? Just install the
`@voxel51/dashboard <https://github.com/voxel51/fiftyone-plugins/blob/main/plugins/dashboard/README.md>`_
plugin and build away:

.. image:: /images/plugins/panels/dashboard-panel.gif

.. note::

When you choose :ref:`delegated execution <delegated-operations>` in the
Expand Down
186 changes: 186 additions & 0 deletions docs/source/release-notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,192 @@ FiftyOne Release Notes

.. default-role:: code

FiftyOne Teams 2.0.0
--------------------
*Released August 20, 2024*

Includes all updates from :ref:`FiftyOne 0.25.0 <release-notes-v0.25.0>`, plus:

What's New

- Added a :ref:`Can tag <teams-can-tag>` permission to allow users to tag
samples/labels but not otherwise perform edits
- Added support for authorized user credentials and external account
credentials when configuring :ref:`GCP credentials <teams-google-cloud>`
- All :ref:`plugin execution <teams-plugins>` is now user-aware and will
respect the executing user’s role and dataset permissions
- All deployments now include a LICENSE file that enforces user quotas
- Guests can no longer access operators/panels in custom plugins

App

- Added a caching layer to optimize media serving in the App
- Cloning an entire dataset via the `Clone` button now includes saved views,
saved workspaces, and runs
- Optimized the performance and UX of the `Settings > Users` page
- The users table on the `Settings > Users` page is now sortable
- Fixed a bug when updating the user role of a pending invitation
- Fixed a bug that prevented the Recent views widget from showing all recently
loaded views as intended

CAS

- Added an `Audit` page to the :ref:`Super Admin UI <super-admin-ui>` that
shows current license utilization and RBAC settings
- Super admins can now disable manual group management in the App. This is
useful, for example, if groups are defined via hooks
- Legacy mode deployments now have access to the relevant pages of the Super
Admin UI

SDK

- Added a :mod:`user_groups <fiftyone.management.user_groups>` module to the
Management SDK for programmatically managing user groups
- The `fiftyone delegated` CLI command is now available to Teams users
- Upgraded the :ref:`upload_media() <teams-cloud-media-python>` function to
gracefully support fields with missing media paths
- Added an `overwrite` parameter to
:meth:`add_cloud_credentials() <fiftyone.management.cloud_credentials.add_cloud_credentials>`
to control whether existing cloud credentials with the same prefix for a
provider are overwritten

.. _release-notes-v0.25.0:

FiftyOne 0.25.0
---------------
*Released August 20, 2024*

What's New

- Introducing :ref:`Python panels <developing-panels>`, a powerful framework for
building custom App panels via a simple Python interface that includes a
wealth of builtin components to convey information, create tutorials, show
interactive graphs, trigger operations, and more
- Released a
`Dashboard panel <https://github.com/voxel51/fiftyone-plugins/tree/main/plugins/dashboard>`_
that allows users to build custom no-code dashboards that display statistics
of interest about the current dataset (and beyond)
- Added `Segment Anything 2 <https://ai.meta.com/sam2>`_ to the
:ref:`model zoo <segment-anything-2-hiera-small-video-torch>`!
`#4671 <https://github.com/voxel51/fiftyone/pull/4671>`_
- Added an :ref:`Elasticsearch integration <elasticsearch-integration>` for
native text and image searches on FiftyOne datasets!
- Added an :ref:`image representativeness <brain-image-representativeness>`
method to the Brain that can be used to find the most common/uncommon types
of images in your datasets

App

- You can now
:ref:`link directly to a sample or group <loading-a-sample-or-group>`
in the App by copy + pasting URLs into your browser bar or programmatically
via your App `session`
`#4281 <https://github.com/voxel51/fiftyone/pull/4281>`_
- Added a config option to
:ref:`disable frame filtering <dataset-app-config-disable-frame-filtering>`
in the App globally or on specific datasets
`#4604 <https://github.com/voxel51/fiftyone/pull/4604>`_
- Added support for dynamically adjusting 3D label linewidths
`#4590 <https://github.com/voxel51/fiftyone/pull/4590>`_
- Added a status bar when loading large 3D assets in the modal
`#4546 <https://github.com/voxel51/fiftyone/pull/4546>`_
- Added support for visualizing :ref:`heatmaps <heatmaps>` in `.jpg` format
`#4531 <https://github.com/voxel51/fiftyone/pull/4531>`_
- Exposed camera position as a recoil atom
`#4535 <https://github.com/voxel51/fiftyone/pull/4535>`_
- Added anonymous analytics collection on an opt-in basis
`#4559 <https://github.com/voxel51/fiftyone/pull/4559>`_
- Fixed a bug when viewing :ref:`dynamic groups <app-dynamic-groups>` of 3D
scenes in the modal
`#4527 <https://github.com/voxel51/fiftyone/pull/4527>`_
- Fixed a bug when rendering scenes with relative 3D asset paths on Windows
`#4579 <https://github.com/voxel51/fiftyone/pull/4579>`_
- Fixed keyboard shortcuts when viewing dynamic groups in the modal
`#4510 <https://github.com/voxel51/fiftyone/pull/4510>`_

Annotation

- Added support for annotating :ref:`frame views <frame-views>`
`#4477 <https://github.com/voxel51/fiftyone/pull/4477>`_
- Added support for annotating :ref:`clip views <clip-views>`
`#4511 <https://github.com/voxel51/fiftyone/pull/4511>`_
- Added support for preserving existing COCO IDs when exporting in
:ref:`COCO format <COCODetectionDataset-export>`
`#4530 <https://github.com/voxel51/fiftyone/pull/4530>`_

Core

- Added support for :ref:`save contexts <efficient-batch-edits>` to generated
views (patches, frames, and clips)
`#4636 <https://github.com/voxel51/fiftyone/pull/4636>`_
- Added support for downloading plugins from branches that contain slashes `/`
`#4614 <https://github.com/voxel51/fiftyone/pull/4614>`_
- Added support for including index statistics in
:meth:`Dataset.stats() <fiftyone.core.dataset.Dataset.stats>`
`#4653 <https://github.com/voxel51/fiftyone/pull/4653>`_
- Added a source install script for Windows
`#4582 <https://github.com/voxel51/fiftyone/pull/4582>`_
- Ubuntu 24.04 users no longer have to manually install MongoDB
`#4533 <https://github.com/voxel51/fiftyone/pull/4533>`_
- Removed Python 3.7 support and marked Python 3.8 as
:ref:`deprecated <deprecation-notices>`
`#4538 <https://github.com/voxel51/fiftyone/pull/4538>`_
- Fixed a bug that could cause side effects when creating clip views defined
by expressions
`#4492 <https://github.com/voxel51/fiftyone/pull/4492>`_
- Fixed a concatenation bug when downloading videos from
:ref:`CVAT <cvat-integration>`
`#4674 <https://github.com/voxel51/fiftyone/pull/4674>`_

Plugins

- The actions row now automatically overflows into a `More items` menu as
necessary when there is insufficient horizontal space
`#4595 <https://github.com/voxel51/fiftyone/pull/4595>`_
- Added a
:meth:`set_active_fields() <fiftyone.operators.operations.Operations.set_active_fields>`
operator for programmatically controlling the selected fields in the sidebar
`#4482 <https://github.com/voxel51/fiftyone/pull/4482>`_
- Added a
:meth:`notify() <fiftyone.operators.operations.Operations.notify>`
operator for programmatically showing notifications in the App
`#4344 <https://github.com/voxel51/fiftyone/pull/4344>`_
- Added
:meth:`ctx.extended_selection <fiftyone.operators.executor.ExecutionContext.extended_selection>`
to retrieve the current extended selection
`#4413 <https://github.com/voxel51/fiftyone/pull/4413>`_
- Added a
:meth:`set_extended_selection() <fiftyone.operators.operations.Operations.set_extended_selection>`
operator for programmatically setting the extended selection
`#4409 <https://github.com/voxel51/fiftyone/pull/4409>`_
- Added a
:meth:`track_event() <fiftyone.operators.operations.Operations.track_event>`
operator for logging plugin events in the App
`#4489 <https://github.com/voxel51/fiftyone/pull/4489>`_

Zoo

- Added :ref:`YOLOv10 and RT-DETR models <ultralytics-object-detection>`
to the zoo
`#4544 <https://github.com/voxel51/fiftyone/pull/4544>`_
- Added :ref:`YOLOv8 classification models <ultralytics-image-classification>`
to the zoo
`#4549 <https://github.com/voxel51/fiftyone/pull/4549>`_
- Added support for storing object track IDs if present when running
:ref:`Ultralytics models <ultralytics-integration>` from the zoo
`#4569 <https://github.com/voxel51/fiftyone/pull/4569>`_
- Added support for GPU inference when running
:ref:`Hugging Face Transformers <huggingface-transformers>` models from the
zoo
`#4587 <https://github.com/voxel51/fiftyone/pull/4587>`_
- Extended support for group datasets, masks, heatmaps, and thumbnails when
uploading FiftyOne datasets to :ref:`Hugging Face Hub <huggingface-hub>`
`#4566 <https://github.com/voxel51/fiftyone/pull/4566>`_
- Allow `ragged_batches` to be configured when using Torch models with custom
transforms
`#4509 <https://github.com/voxel51/fiftyone/pull/4509>`_,
`#4512 <https://github.com/voxel51/fiftyone/pull/4512>`_

FiftyOne Teams 1.7.1
--------------------
*Released June 11, 2024*
Expand Down
Loading

0 comments on commit e21f1ba

Please sign in to comment.