From f77fca7654aba9f1ec0f1149965ec59eeac1edbe Mon Sep 17 00:00:00 2001 From: Nick Skriabin Date: Tue, 24 Jun 2025 02:35:53 +0100 Subject: [PATCH 1/5] Add Bitmask docs --- docs/source/guide/release_notes.md | 390 ++++++++++++++++++++++++++++- docs/source/tags/bitmask.md | 28 +++ docs/source/tags/bitmasklabels.md | 27 ++ 3 files changed, 444 insertions(+), 1 deletion(-) create mode 100644 docs/source/tags/bitmask.md create mode 100644 docs/source/tags/bitmasklabels.md diff --git a/docs/source/guide/release_notes.md b/docs/source/guide/release_notes.md index 1f15648115fa..152112f6655f 100644 --- a/docs/source/guide/release_notes.md +++ b/docs/source/guide/release_notes.md @@ -19,6 +19,394 @@ meta_description: Review new features, enhancements, and bug fixes for on-premis Before upgrading, review the steps outlined in [Upgrade Label Studio Enterprise](upgrade_enterprise) and ensure that you complete the recommended tests after each upgrade.
+ + +## Label Studio Enterprise 2.25.0 + +
Prompts on-prem availability, storage proxies, PDF tag, KeyPointLabels support, multi-task JSON imports for cloud
+ +*Jun 17, 2025* + +Helm Chart version: [1.9.15](https://github.com/HumanSignal/charts/blob/master/heartex/label-studio/Chart.yaml) + +### New features + +#### Prompts availability for on-prem deployments + +You can now configure your on-prem environment to use Prompts! + +Prompts is an interface to easily integrate LLMs into your own Label Studio deployment. Leading teams use it to pre-label data, compare models, and generate synthetic samples. + +You can find out more here: + +* [Prompts overview](prompts_overview) +* [Prompts product page](https://humansignal.com/platform/prompts/) +* [Blog - How to Generate Synthetic Data with Prompts in Label Studio](https://humansignal.com/blog/how-to-generate-synthetic-data-with-prompts-in-label-studio/) + + +Installing Prompts requires license enablement and [additional install steps](install_prompts). Reach out to your CSM to enable a free trial! + +![Stylized image of Prompts](/images/releases/dog-prompts.png) + +#### Storage proxies for cloud files + +Label Studio now uses a proxy when accessing media files in connect cloud storages. For more information, see [Pre-signed URLs vs. storage proxies](https://docs.humansignal.com/guide/storage#Pre-signed-URLs-vs-Storage-proxies). + +Proxy mode is only used when the **Use pre-signed URLs** option is disabled in source storage. + +Storage proxies offer secure media access, simplified configuration, and improved performance. + +- Keeps data access within Label Studio's network boundary, ideal for on-premise environments +- Enforces strict task-level access control, even for cached files +- Eliminates the need for presigned URLs and CORS configuration +- Solves performance and reliability issues for large files, videos, and audio +- Media is now streamed via proxy, improving compatibility and scalability + +#### New PDF tag + +A [new PDF tag](/tags/pdf) lets you directly ingest PDF URLs for classification without needing to use hypertext tags. + +This also simplifies the process for using PDFs with Prompts for summarization and classification tasks. + + + +### Enhancements + +#### KeyPointLabels exports for COCO and YOLO + +COCO and YOLO export formats now available for `KeyPointLabels`. For more information, see [our docs](https://docs.humansignal.com/guide/export#COCO). + +#### Multi-task JSON imports for cloud + +Previously, if you loaded JSON tasks from source storage, you could only configure one task per JSON file. + +This restriction has been removed, and you can now specify multiple tasks per JSON file as long as all tasks follow the same format. + +For more information, see the examples in our [our docs](https://docs.humansignal.com/guide/storage#Off). + + +#### Miscellaneous + +- The **Export Underlying Data** option was recently introduced and is available from the Annotations chart in the [annotator performance dashboard](dashboard_annotator). This allows you to export information about the tasks that the selected users have annotated. + + Previously, users were only identified by user ID within the CSV. With this update, you can also identify users by email. + +- User interface enhancements for the AI Assistant, including a new icon. + + +### Bug fixes + +- Fixed various user interface issues associated with the new dark mode feature. + +- Fixed an issue where the **Not Activated** role was hidden by default on the Organization page. + +- Fixed several small issues related to the annotator agreement score popover. + +- Fixed an issue where when moving around panels in the labeling interface, groups were not sticking in place. + +- Fixed an issue where the token refresh function was not using the user-supplied `httpx_client`. + +- Fixed an issue with cloud storage in which tasks would not resolve correctly if they referenced data in different buckets. + +- Fixed an issue where the drop-down menu to select a user role was overflowing past the page edge. + + + + + + + +
+ + +## Label Studio Enterprise 2.24.0 + +
Dark mode, new home page, annotator evaluation settings, plugins library, and multiple usability enhancements
+ +*May 20, 2025* + +Helm Chart version: 1.9.10 + +### New features + +#### Dark mode + +Label Studio can now be used in dark mode. + +Click your avatar in the upper right to find the toggle for dark mode. + +- **Auto** - Use your system settings to determine light or dark mode. +- **Light** - Use light mode. +- **Dark** - Use dark mode. + +!!! note + Dark mode is not available for environments that use white labeling. + +![Screenshot of dark mode](/images/releases/2-24-dark-mode.png) + +![Animated gif of dark mode](/images/releases/2-24-darkmode.gif) + +![Screenshot of dark mode](/images/releases/2-24-dark-mode2.png) + + +#### New Label Studio Home page + +When you open Label Studio, you will see a new Home page. Here you can find links to your most recent projects, shortcuts to common actions, and links to frequently used resources + +![Screenshot of home page](/images/releases/2-24-home.png) + +!!! note + The home page is not available for environments using whitelabeling. + +#### Annotator Evaluation settings + +There is a new Annotator Evaluation section under **Settings > Quality**. + +When there are ground truth annotations within the project, an annotator will be paused if their ground truth agreement falls below a certain threshold. + +For more information, see [**Annotator Evaluation**](https://docs.humansignal.com/guide/project_settings_lse#annotator-eval). + +Screenshot of evaluation settings + +#### New Insert Plugins menu and Testing interface + +There are a number of new features and changes related to plugins: + +- There is a new **Insert Plugins** menu available. From here you can insert a pre-built plugin that you can customize as necessary. +- When you add a plugin, you will see a new **Testing** panel below the plugin editing field. You can use this to verify what events are triggered, manually trigger events, and modify the sample data as necessary. +- To accompany the new **Insert Plugins** menu, there is [a new Plugins gallery](https://docs.humansignal.com/plugins/) in the documentation that discusses each option and has information on creating your own custom plugs. +- There is also a new setting that allows you to restrict access to the Plugins tab to Administrator users. By default, it is also available to Managers. This can be set through the Django admin panel. + +![Screenshot of plugins](/images/releases/2-24-plugin-menu.png) + +![Screenshot of plugins](/images/releases/2-24-plugin-test.png) + +### Enhancements + +#### Agreement score popover in Data Manager + +Click any agreement score to view pairwise agreement scores with others. + +![Screenshot of agreement popover](/images/releases/2-24-agreement-popover.png) + +#### Adjustable text spans + +You can now click and drag to adjust text span regions. + +![Animated gif of text span drag and drop](/images/releases/2-24-text-drag.gif) + +#### Dynamic brush sizes + +The cursor now adjusts dynamically to brush size to allow for more precision in segmentation tasks. + + + +#### Support for BrushLabels export to COCO format + +You can now export polygons created using the BrushLabels tag to COCO format. + +#### Create support tickets through AI Assistant + +If you have AI Assistant enabled and ask multiple questions without coming to a resolution, it will offer to create a support ticket on your behalf: + +Screenshot of AI assistant + +#### Clear chat history in AI Assistant + +You can now clear your chat history to start a new chat. + +Screenshot of AI assistant + +#### Export underlying data from the Annotator Performance dashboard + +There is a new **Export Underlying Data** action for the Annotations chart. + +![Screenshot of agreement popover](/images/releases/2-24-export.png) + +#### Annotators can now view their own performance dashboard metrics + +When logging in, annotators will now see a link to the Annotator performance dashboard, where they can see their own performance metrics. + +Screenshot of annotator dashboard button + +#### Improved drop-down selectors + +When there are a large number of options in a drop-down menu, you can now search through the list of available options. + +Screenshot of annotator dashboard button + +#### Label Studio Converter CLI + +When you install the Label Studio SDK, you can now use the `label-studio-converter` command from your terminal. + +#### Miscellaneous + +- Performance enhancements around how membership API requests are made. + +- Added a new API call to rotate JWT tokens: [POST api/token/rotate](https://app.heartex.com/api/token/rotate/) + + +### Security + +- Addressed a CSP issue by removing `unsafe-eval` usage. + +- Added a rule that password resets will be limited to 5 per hour. + +- Upgraded Babel to address vulnerabilities. + +- Improved security on CSV exports. + +- Removed an unused endpoint. + +- By default, CORS is permissive. However, you can now set an environment variable to ensure it is in strict mode. Set **one** of the following: + - `CORS_ALLOWED_ORIGINS` + A comma-separated list of Origin header values the Label Studio server will receive, e.g. `https://example.org,https://example.net` + + - `CORS_ALLOWED_ORIGIN_REGEXES` + Same as above, except using regex. + - `CORS_ALLOW_ALL_ORIGINS` + Set to `false` or `0` to reject all Origin header values (that is, allow no cross-origin requests). By default this is set to `true`. + + + +### Bug fixes + +- Fixed an issue where interacting with the Manage Members modal would sometimes throw an error. + +- Fixed an issue where white-labeled Label Studios instances were showing the incorrect logo. + +- Fixed an issue where the `Filter` tag did not work with `Choices` tags. + +- Fixed an issue where annotators were seeing a misleading message that a project was not ready, even though the project was completed. + +- Fixed a server worker error related to regular expressions. + +- Fixed several small visual issues with the AI assistant. + +- Fixed an issue that was causing multiple annotators to be assigned to tasks beyond the overlap settings. + +- Fixed an issue where “Deleted User” repeatedly appeared in filter drop-down menus. + +- Fixed an issue where clicking on the timeline region in the region list did not move the slider to the correct position. + +- Fixed an issue where a "Script running successfully" message continuously appeared for users who had plugins enabled. + +- Fixed an issue where the drop-down menu to select a user role was overflowing past the page edge. + +- Fixed an issue where the `visibleWhen` parameter was not working when used with a taxonomy. + +- Fixed an issue where there were some UI inconsistencies that would occur during certain page navigations. + +- Fixed an issue where certain drop-down menus were inaccessible at different zoom levels. + +- Fixed an issue where the Data Manager would go blank when filtering by the predicted model version. + +- Fixed an issue where, if a 500 error was returned when syncing storage, the user would not see the error. + +- Fixed an issue where forward and rewind hotkeys for audio were not working. + +- Fixed an issue where the bars in the Tasks graph on the project dashboard were not accurately grouped by `reviewed_at` or `completed_at`. + + + + + + +
+ + +## Label Studio Enterprise 2.23.0 + +
Google Cloud Storage WIF, drag-and-drop for video timelines, multiple security enhancements
+ +*Apr 22, 2025* + +Helm Chart version: 1.9.9 + +### New features + +#### Support for Google Cloud Storage Workload Identity Federation (WIF) + +When adding project storage, you now have the option to choose Google Cloud Storage WIF. + +Unlike the the standard GCS connection using application credentials, this allows Label Studio to request temporary credentials when connecting to your storage. + +For more information, see [Google Cloud Storage with Workload Identity Federation (WIF)](https://docs.humansignal.com/guide/storage#Google-Cloud-Storage-with-Workload-Identity-Federation-WIF). + +![Screenshot of WIF](/images/releases/2-23-wif.png) + +!!! note + While this option is available for on-prem users, the typical way to set up GCS in an on-prem environment is through persistent storage as documented [here](https://docs.humansignal.com/guide/persistent_storage.html#Configure-the-GCS-bucket). + + +### Enhancements + +#### Drag-and-drop adjustment for video timeline segments + +You can now drag and drop to adjust the length of video timeline segments. + +![Screenshot of video timeline](/images/releases/2-23-drag-drop.png) + +#### "Custom Scripts" are now "Plugins" + +We have renamed "Custom Scripts" to "Plugins." This is reflected in the UI and [in our docs](/plugins). + +![Screenshot of video timeline](/images/releases/2-23-plugins.png) + +#### Miscellaneous + +- Improved tooltips related to [pausing annotators](quality). + +- Ensured that when a user is deactivated, they are also automatically logged out. Previously they lost all access, but were not automatically logged out of active sessions. + +- Multiple performance improvements for our [AI Assistant](ask_ai). + + +### Security + +- Made security improvements around the verbosity of certain API calls. + +- Made security improvements around SAML. + +- Made security improvements around project parameter validation. + +- Made security improvements around exception error messages. + +- Made security improvements around workspace permission checks. + + +### Bug fixes + +- Fixed an issue where importing from the UI would fail when importing from a URL. + +- Fixed an issue where users were unable to edit custom agreement metrics if using manual distribution mode. + +- Fixed an issue where regions would be added to the wrong task when moving quickly between tasks. + +- Fixed an issue where **Exact frames matching for video** was always showing as an option for agreement metrics regardless of whether the labeling config referenced a video. + +- Fixed an issue where the `prediction-changed` value was not being reset after making manual changes to pre-annotations. + +- Fixed an issue where a paused annotator is unpaused when a reviewer rejects their annotation and the project is configured to requeue tasks back to the annotator. + +- Fixed an issue where some segments were not previewable when annotating videos with the TimeLineLabels tag. + +- Fixed several small issues with how labeled regions appear when completing OCR tasks. + + + + + + + + + + + + +
## Label Studio Enterprise 2.22.1 @@ -197,7 +585,7 @@ There is a new **Bulk label** action available from the Data Manager. You can us This feature also includes enhancements to the Grid View in the Data Manager. Now when viewing images, you can zoom in/out, scroll, and pan. -For more information, see the [Bulk labeling documentation](#Bulk-labeling) and [Bulk Labeling: How to Classify in Batches](https://humansignal.com/blog/bulk-labeling-how-to-classify-in-batches/). +For more information, see the [Bulk labeling documentation](labeling_bulk) and [Bulk Labeling: How to Classify in Batches](https://humansignal.com/blog/bulk-labeling-how-to-classify-in-batches/). ![Screenshot of bulk label action](/images/releases/2-21-bulk-label.png) diff --git a/docs/source/tags/bitmask.md b/docs/source/tags/bitmask.md new file mode 100644 index 000000000000..edb38931b4a0 --- /dev/null +++ b/docs/source/tags/bitmask.md @@ -0,0 +1,28 @@ +--- +title: Bitmask +type: tags +order: 401 +meta_title: Bitmask Tag for Image Segmentation Labeling +meta_description: Customize Label Studio with bitmask pixel-wise tags for image segmentation labeling for machine learning and data science projects. +--- + +The `Bitmask` tag is used for pixel-wise image segmentation tasks where you want to apply a mask or use a brush to draw a region on the image. + +Use with the following data types: image. + +{% insertmd includes/tags/bitmask.md %} + +### Example + +Basic image segmentation labeling configuration: + +```xml + + + + + + +``` diff --git a/docs/source/tags/bitmasklabels.md b/docs/source/tags/bitmasklabels.md new file mode 100644 index 000000000000..5536c4b22e81 --- /dev/null +++ b/docs/source/tags/bitmasklabels.md @@ -0,0 +1,27 @@ +--- +title: BitmaskLabels +type: tags +order: 402 +meta_title: Bitmask Label Tag for Pixel-Wise Image Segmentation Labeling +meta_description: Customize Label Studio with bitmask pixel-wise label tags for image segmentation labeling for machine learning and data science projects. +--- + +The `BitmaskLabels` tag for pixel-wise image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image. + +Use with the following data types: image. + +{% insertmd includes/tags/bitmasklabels.md %} + +### Example + +Basic image segmentation labeling configuration + +```html + + + + + +``` From 15e52504902b687693979d2b4c32489e398ff2ab Mon Sep 17 00:00:00 2001 From: Nick Skriabin Date: Mon, 30 Jun 2025 18:40:00 +0100 Subject: [PATCH 2/5] Create tag autocomplete --- docs/source/guide/release_notes.md | 390 +----------------- web/libs/core/src/lib/utils/schema/tags.json | 404 +++++++++++++------ 2 files changed, 290 insertions(+), 504 deletions(-) diff --git a/docs/source/guide/release_notes.md b/docs/source/guide/release_notes.md index 152112f6655f..1f15648115fa 100644 --- a/docs/source/guide/release_notes.md +++ b/docs/source/guide/release_notes.md @@ -19,394 +19,6 @@ meta_description: Review new features, enhancements, and bug fixes for on-premis Before upgrading, review the steps outlined in [Upgrade Label Studio Enterprise](upgrade_enterprise) and ensure that you complete the recommended tests after each upgrade.
- - -## Label Studio Enterprise 2.25.0 - -
Prompts on-prem availability, storage proxies, PDF tag, KeyPointLabels support, multi-task JSON imports for cloud
- -*Jun 17, 2025* - -Helm Chart version: [1.9.15](https://github.com/HumanSignal/charts/blob/master/heartex/label-studio/Chart.yaml) - -### New features - -#### Prompts availability for on-prem deployments - -You can now configure your on-prem environment to use Prompts! - -Prompts is an interface to easily integrate LLMs into your own Label Studio deployment. Leading teams use it to pre-label data, compare models, and generate synthetic samples. - -You can find out more here: - -* [Prompts overview](prompts_overview) -* [Prompts product page](https://humansignal.com/platform/prompts/) -* [Blog - How to Generate Synthetic Data with Prompts in Label Studio](https://humansignal.com/blog/how-to-generate-synthetic-data-with-prompts-in-label-studio/) - - -Installing Prompts requires license enablement and [additional install steps](install_prompts). Reach out to your CSM to enable a free trial! - -![Stylized image of Prompts](/images/releases/dog-prompts.png) - -#### Storage proxies for cloud files - -Label Studio now uses a proxy when accessing media files in connect cloud storages. For more information, see [Pre-signed URLs vs. storage proxies](https://docs.humansignal.com/guide/storage#Pre-signed-URLs-vs-Storage-proxies). - -Proxy mode is only used when the **Use pre-signed URLs** option is disabled in source storage. - -Storage proxies offer secure media access, simplified configuration, and improved performance. - -- Keeps data access within Label Studio's network boundary, ideal for on-premise environments -- Enforces strict task-level access control, even for cached files -- Eliminates the need for presigned URLs and CORS configuration -- Solves performance and reliability issues for large files, videos, and audio -- Media is now streamed via proxy, improving compatibility and scalability - -#### New PDF tag - -A [new PDF tag](/tags/pdf) lets you directly ingest PDF URLs for classification without needing to use hypertext tags. - -This also simplifies the process for using PDFs with Prompts for summarization and classification tasks. - - - -### Enhancements - -#### KeyPointLabels exports for COCO and YOLO - -COCO and YOLO export formats now available for `KeyPointLabels`. For more information, see [our docs](https://docs.humansignal.com/guide/export#COCO). - -#### Multi-task JSON imports for cloud - -Previously, if you loaded JSON tasks from source storage, you could only configure one task per JSON file. - -This restriction has been removed, and you can now specify multiple tasks per JSON file as long as all tasks follow the same format. - -For more information, see the examples in our [our docs](https://docs.humansignal.com/guide/storage#Off). - - -#### Miscellaneous - -- The **Export Underlying Data** option was recently introduced and is available from the Annotations chart in the [annotator performance dashboard](dashboard_annotator). This allows you to export information about the tasks that the selected users have annotated. - - Previously, users were only identified by user ID within the CSV. With this update, you can also identify users by email. - -- User interface enhancements for the AI Assistant, including a new icon. - - -### Bug fixes - -- Fixed various user interface issues associated with the new dark mode feature. - -- Fixed an issue where the **Not Activated** role was hidden by default on the Organization page. - -- Fixed several small issues related to the annotator agreement score popover. - -- Fixed an issue where when moving around panels in the labeling interface, groups were not sticking in place. - -- Fixed an issue where the token refresh function was not using the user-supplied `httpx_client`. - -- Fixed an issue with cloud storage in which tasks would not resolve correctly if they referenced data in different buckets. - -- Fixed an issue where the drop-down menu to select a user role was overflowing past the page edge. - - - - - - - -
- - -## Label Studio Enterprise 2.24.0 - -
Dark mode, new home page, annotator evaluation settings, plugins library, and multiple usability enhancements
- -*May 20, 2025* - -Helm Chart version: 1.9.10 - -### New features - -#### Dark mode - -Label Studio can now be used in dark mode. - -Click your avatar in the upper right to find the toggle for dark mode. - -- **Auto** - Use your system settings to determine light or dark mode. -- **Light** - Use light mode. -- **Dark** - Use dark mode. - -!!! note - Dark mode is not available for environments that use white labeling. - -![Screenshot of dark mode](/images/releases/2-24-dark-mode.png) - -![Animated gif of dark mode](/images/releases/2-24-darkmode.gif) - -![Screenshot of dark mode](/images/releases/2-24-dark-mode2.png) - - -#### New Label Studio Home page - -When you open Label Studio, you will see a new Home page. Here you can find links to your most recent projects, shortcuts to common actions, and links to frequently used resources - -![Screenshot of home page](/images/releases/2-24-home.png) - -!!! note - The home page is not available for environments using whitelabeling. - -#### Annotator Evaluation settings - -There is a new Annotator Evaluation section under **Settings > Quality**. - -When there are ground truth annotations within the project, an annotator will be paused if their ground truth agreement falls below a certain threshold. - -For more information, see [**Annotator Evaluation**](https://docs.humansignal.com/guide/project_settings_lse#annotator-eval). - -Screenshot of evaluation settings - -#### New Insert Plugins menu and Testing interface - -There are a number of new features and changes related to plugins: - -- There is a new **Insert Plugins** menu available. From here you can insert a pre-built plugin that you can customize as necessary. -- When you add a plugin, you will see a new **Testing** panel below the plugin editing field. You can use this to verify what events are triggered, manually trigger events, and modify the sample data as necessary. -- To accompany the new **Insert Plugins** menu, there is [a new Plugins gallery](https://docs.humansignal.com/plugins/) in the documentation that discusses each option and has information on creating your own custom plugs. -- There is also a new setting that allows you to restrict access to the Plugins tab to Administrator users. By default, it is also available to Managers. This can be set through the Django admin panel. - -![Screenshot of plugins](/images/releases/2-24-plugin-menu.png) - -![Screenshot of plugins](/images/releases/2-24-plugin-test.png) - -### Enhancements - -#### Agreement score popover in Data Manager - -Click any agreement score to view pairwise agreement scores with others. - -![Screenshot of agreement popover](/images/releases/2-24-agreement-popover.png) - -#### Adjustable text spans - -You can now click and drag to adjust text span regions. - -![Animated gif of text span drag and drop](/images/releases/2-24-text-drag.gif) - -#### Dynamic brush sizes - -The cursor now adjusts dynamically to brush size to allow for more precision in segmentation tasks. - - - -#### Support for BrushLabels export to COCO format - -You can now export polygons created using the BrushLabels tag to COCO format. - -#### Create support tickets through AI Assistant - -If you have AI Assistant enabled and ask multiple questions without coming to a resolution, it will offer to create a support ticket on your behalf: - -Screenshot of AI assistant - -#### Clear chat history in AI Assistant - -You can now clear your chat history to start a new chat. - -Screenshot of AI assistant - -#### Export underlying data from the Annotator Performance dashboard - -There is a new **Export Underlying Data** action for the Annotations chart. - -![Screenshot of agreement popover](/images/releases/2-24-export.png) - -#### Annotators can now view their own performance dashboard metrics - -When logging in, annotators will now see a link to the Annotator performance dashboard, where they can see their own performance metrics. - -Screenshot of annotator dashboard button - -#### Improved drop-down selectors - -When there are a large number of options in a drop-down menu, you can now search through the list of available options. - -Screenshot of annotator dashboard button - -#### Label Studio Converter CLI - -When you install the Label Studio SDK, you can now use the `label-studio-converter` command from your terminal. - -#### Miscellaneous - -- Performance enhancements around how membership API requests are made. - -- Added a new API call to rotate JWT tokens: [POST api/token/rotate](https://app.heartex.com/api/token/rotate/) - - -### Security - -- Addressed a CSP issue by removing `unsafe-eval` usage. - -- Added a rule that password resets will be limited to 5 per hour. - -- Upgraded Babel to address vulnerabilities. - -- Improved security on CSV exports. - -- Removed an unused endpoint. - -- By default, CORS is permissive. However, you can now set an environment variable to ensure it is in strict mode. Set **one** of the following: - - `CORS_ALLOWED_ORIGINS` - A comma-separated list of Origin header values the Label Studio server will receive, e.g. `https://example.org,https://example.net` - - - `CORS_ALLOWED_ORIGIN_REGEXES` - Same as above, except using regex. - - `CORS_ALLOW_ALL_ORIGINS` - Set to `false` or `0` to reject all Origin header values (that is, allow no cross-origin requests). By default this is set to `true`. - - - -### Bug fixes - -- Fixed an issue where interacting with the Manage Members modal would sometimes throw an error. - -- Fixed an issue where white-labeled Label Studios instances were showing the incorrect logo. - -- Fixed an issue where the `Filter` tag did not work with `Choices` tags. - -- Fixed an issue where annotators were seeing a misleading message that a project was not ready, even though the project was completed. - -- Fixed a server worker error related to regular expressions. - -- Fixed several small visual issues with the AI assistant. - -- Fixed an issue that was causing multiple annotators to be assigned to tasks beyond the overlap settings. - -- Fixed an issue where “Deleted User” repeatedly appeared in filter drop-down menus. - -- Fixed an issue where clicking on the timeline region in the region list did not move the slider to the correct position. - -- Fixed an issue where a "Script running successfully" message continuously appeared for users who had plugins enabled. - -- Fixed an issue where the drop-down menu to select a user role was overflowing past the page edge. - -- Fixed an issue where the `visibleWhen` parameter was not working when used with a taxonomy. - -- Fixed an issue where there were some UI inconsistencies that would occur during certain page navigations. - -- Fixed an issue where certain drop-down menus were inaccessible at different zoom levels. - -- Fixed an issue where the Data Manager would go blank when filtering by the predicted model version. - -- Fixed an issue where, if a 500 error was returned when syncing storage, the user would not see the error. - -- Fixed an issue where forward and rewind hotkeys for audio were not working. - -- Fixed an issue where the bars in the Tasks graph on the project dashboard were not accurately grouped by `reviewed_at` or `completed_at`. - - - - - - -
- - -## Label Studio Enterprise 2.23.0 - -
Google Cloud Storage WIF, drag-and-drop for video timelines, multiple security enhancements
- -*Apr 22, 2025* - -Helm Chart version: 1.9.9 - -### New features - -#### Support for Google Cloud Storage Workload Identity Federation (WIF) - -When adding project storage, you now have the option to choose Google Cloud Storage WIF. - -Unlike the the standard GCS connection using application credentials, this allows Label Studio to request temporary credentials when connecting to your storage. - -For more information, see [Google Cloud Storage with Workload Identity Federation (WIF)](https://docs.humansignal.com/guide/storage#Google-Cloud-Storage-with-Workload-Identity-Federation-WIF). - -![Screenshot of WIF](/images/releases/2-23-wif.png) - -!!! note - While this option is available for on-prem users, the typical way to set up GCS in an on-prem environment is through persistent storage as documented [here](https://docs.humansignal.com/guide/persistent_storage.html#Configure-the-GCS-bucket). - - -### Enhancements - -#### Drag-and-drop adjustment for video timeline segments - -You can now drag and drop to adjust the length of video timeline segments. - -![Screenshot of video timeline](/images/releases/2-23-drag-drop.png) - -#### "Custom Scripts" are now "Plugins" - -We have renamed "Custom Scripts" to "Plugins." This is reflected in the UI and [in our docs](/plugins). - -![Screenshot of video timeline](/images/releases/2-23-plugins.png) - -#### Miscellaneous - -- Improved tooltips related to [pausing annotators](quality). - -- Ensured that when a user is deactivated, they are also automatically logged out. Previously they lost all access, but were not automatically logged out of active sessions. - -- Multiple performance improvements for our [AI Assistant](ask_ai). - - -### Security - -- Made security improvements around the verbosity of certain API calls. - -- Made security improvements around SAML. - -- Made security improvements around project parameter validation. - -- Made security improvements around exception error messages. - -- Made security improvements around workspace permission checks. - - -### Bug fixes - -- Fixed an issue where importing from the UI would fail when importing from a URL. - -- Fixed an issue where users were unable to edit custom agreement metrics if using manual distribution mode. - -- Fixed an issue where regions would be added to the wrong task when moving quickly between tasks. - -- Fixed an issue where **Exact frames matching for video** was always showing as an option for agreement metrics regardless of whether the labeling config referenced a video. - -- Fixed an issue where the `prediction-changed` value was not being reset after making manual changes to pre-annotations. - -- Fixed an issue where a paused annotator is unpaused when a reviewer rejects their annotation and the project is configured to requeue tasks back to the annotator. - -- Fixed an issue where some segments were not previewable when annotating videos with the TimeLineLabels tag. - -- Fixed several small issues with how labeled regions appear when completing OCR tasks. - - - - - - - - - - - - -
## Label Studio Enterprise 2.22.1 @@ -585,7 +197,7 @@ There is a new **Bulk label** action available from the Data Manager. You can us This feature also includes enhancements to the Grid View in the Data Manager. Now when viewing images, you can zoom in/out, scroll, and pan. -For more information, see the [Bulk labeling documentation](labeling_bulk) and [Bulk Labeling: How to Classify in Batches](https://humansignal.com/blog/bulk-labeling-how-to-classify-in-batches/). +For more information, see the [Bulk labeling documentation](#Bulk-labeling) and [Bulk Labeling: How to Classify in Batches](https://humansignal.com/blog/bulk-labeling-how-to-classify-in-batches/). ![Screenshot of bulk label action](/images/releases/2-21-bulk-label.png) diff --git a/web/libs/core/src/lib/utils/schema/tags.json b/web/libs/core/src/lib/utils/schema/tags.json index c97aca01a020..fedbe9a997f1 100644 --- a/web/libs/core/src/lib/utils/schema/tags.json +++ b/web/libs/core/src/lib/utils/schema/tags.json @@ -92,6 +92,102 @@ } } }, + "Channel": { + "name": "Channel", + "description": "Channel tag can be used to label time series data", + "attrs": { + "column": { + "name": "column", + "description": "column name or index", + "type": "string", + "required": true + }, + "legend": { + "name": "legend", + "description": "display name of the channel", + "type": "string", + "required": false + }, + "units": { + "name": "units", + "description": "display units name", + "type": "string", + "required": false + }, + "displayFormat": { + "name": "displayFormat", + "description": "format string for the values, uses d3-format:
\n `[,][.precision][f\\|%]`
\n `,` - group thousands with separator (from locale): `,` (12345.6 -> 12,345.6) `,.2f` (12345.6 -> 12,345.60)
\n `.precision` - precision for `f\\|%` type, significant digits for empty type:
\n `.3f` (12.3456 -> 12.345, 1000 -> 1000.000)
\n `.3` (12.3456 -> 12.3, 1.2345 -> 1.23, 12345 -> 1.23e+4)
\n `f` - treat as float, default precision is .6: `f` (12 -> 12.000000) `.2f` (12 -> 12.00) `.0f` (12.34 -> 12)
\n `%` - treat as percents and format accordingly: `%.0` (0.128 -> 13%) `%.1` (1.2345 -> 123.4%)", + "type": "string", + "required": false + }, + "height": { + "name": "height", + "description": "height of the plot", + "type": "number", + "required": false, + "default": 200 + }, + "strokeColor": { + "name": "strokeColor", + "description": "plot stroke color, expects hex value", + "type": "string", + "required": false, + "default": "#f48a42" + }, + "strokeWidth": { + "name": "strokeWidth", + "description": "plot stroke width", + "type": "number", + "required": false, + "default": 1 + }, + "markerColor": { + "name": "markerColor", + "description": "plot stroke color, expects hex value", + "type": "string", + "required": false, + "default": "#f48a42" + }, + "markerSize": { + "name": "markerSize", + "description": "plot stroke width", + "type": "number", + "required": false, + "default": 0 + }, + "markerSymbol": { + "name": "markerSymbol", + "description": "plot stroke width", + "type": "number", + "required": false, + "default": "circle" + }, + "timeRange": { + "name": "timeRange", + "description": "data range of x-axis / time axis", + "type": "string", + "required": false + }, + "dataRange": { + "name": "dataRange", + "description": "data range of y-axis / data axis", + "type": "string", + "required": false + }, + "showAxis": { + "name": "showAxis", + "description": "show or bide both axis", + "type": "string", + "required": false + }, + "fixedScale": { + "name": "fixedScale", + "description": "if false current view scales to fit only displayed values; if given overwrites TimeSeries' fixedScale", + "type": ["true", "false"], + "required": false + } + } + }, "HyperText": { "name": "HyperText", "description": "The `HyperText` tag displays hypertext markup for labeling. Use for labeling HTML-encoded text and webpages for NER and NLP projects.\n\nUse with the following data types: HTML.", @@ -186,7 +282,7 @@ }, "valueList": { "name": "valueList", - "description": "References a variable that holds a list of image URLs", + "description": "References a variable that holds a list of image URLs. For an example, see the [Multi-Page Document Annotation](/templates/multi-page-document-annotation) template.", "type": "string", "required": false }, @@ -341,6 +437,39 @@ } } }, + "MultiChannel": { + "name": "MultiChannel", + "description": "MultiChannel tag for grouped display of channels on the same plot", + "attrs": { + "height": { + "name": "height", + "description": "height of the plot", + "type": "number", + "required": false, + "default": 200 + }, + "showAxis": { + "name": "showAxis", + "description": "whether to show both axes", + "type": ["true", "false"], + "required": false, + "default": true + }, + "showYAxis": { + "name": "showYAxis", + "description": "whether to show the y-axis", + "type": ["true", "false"], + "required": false, + "default": true + }, + "fixedScale": { + "name": "fixedScale", + "description": "whether to use a fixed scale for all channels. If not set, inherits from parent TimeSeries tag", + "type": ["true", "false"], + "required": false + } + } + }, "Paragraphs": { "name": "Paragraphs", "description": "The `Paragraphs` tag displays paragraphs of text on the labeling interface. Use to label dialogue transcripts for NLP and NER projects.\nThe `Paragraphs` tag expects task data formatted as an array of objects like the following:\n[{ $nameKey: \"Author name\", $textKey: \"Text\" }, ... ]\n\nUse with the following data types: text.", @@ -420,6 +549,18 @@ } } }, + "Pdf": { + "name": "Pdf", + "description": "The `Pdf` tag is used to display a PDF document from a URL.", + "attrs": { + "value": { + "name": "value", + "description": "Data field value containing the URL to the PDF", + "type": "string", + "required": true + } + } + }, "Table": { "name": "Table", "description": "The `Table` tag is used to display object keys and values in a table.", @@ -440,7 +581,7 @@ }, "Text": { "name": "Text", - "description": "The `Text` tag shows text that can be labeled. Use to display any type of text on the labeling interface.\nYou can use `` to preserve all spaces in the text, otherwise spaces are trimmed when displayed and saved in the results.\nEvery space in the text sample is counted when calculating result offsets, for example for NER labeling tasks.\n\nUse with the following data types: text.", + "description": "The `Text` tag shows text that can be labeled. Use to display any type of text on the labeling interface.\nYou can use `` to preserve all spaces in the text, otherwise spaces are trimmed when displayed and saved in the results.\nEvery space in the text sample is counted when calculating result offsets, for example for NER labeling tasks.\n\nUse with the following data types: text.\n\n### How to read my text files in python?\nThe Label Studio editor counts `\\r\\n` as two different symbols, displaying them as `\\n\\n`, making it look like there is extra margin between lines.\nYou should either preprocess your files to replace `\\r\\n` with `\\n` completely, or open files in Python with `newline=''` to avoid converting `\\r\\n` to `\\n`:\n`with open('my-file.txt', encoding='utf-8', newline='') as f: text = f.read()`\nThis is especially important when you are doing span NER labeling and need to get the correct offsets:\n`text[start_offset:end_offset]`", "attrs": { "name": { "name": "name", @@ -523,6 +664,18 @@ "required": false, "default": "url" }, + "sync": { + "name": "sync", + "description": "Object name to sync with.", + "type": "string", + "required": false + }, + "cursorColor": { + "name": "cursorColor", + "description": "Color of the playback cursors used in sync (hex or any SVG-compatible color string)", + "type": "string", + "required": false + }, "timeColumn": { "name": "timeColumn", "description": "Column name or index that provides temporal values. If your time series data has no temporal column then one is automatically generated.", @@ -576,104 +729,111 @@ } } }, - "Channel": { - "name": "Channel", - "description": "Channel tag can be used to label time series data", + "Video": { + "name": "Video", + "description": "Video tag plays a simple video file. Use for video annotation tasks such as classification and transcription.\n\nUse with the following data types: video\n\n### Video format\n\nLabel Studio relies on your web browser to play videos and evaluate the total frame number. So, it's essential that your videos use a format and codecs that are universally supported. To ensure maximum compatibility, we recommend using an MP4 container with video encoded using the H.264 (AVC) codec and audio encoded with AAC. This combination is widely supported across all modern browsers and minimizes issues like incorrect total duration detection or problems with playback. In addition, it's important to convert your videos to a constant frame rate (CFR), ideally around 30 fps, to avoid discrepancies in frame counts and issues with duplicated or missing frames. All audio and video streams from your file must have the same durations; otherwise, you will have extra total frames.\n\nConverting your videos to this recommended format will help ensure that they play smoothly in Label Studio and that the frame rate and duration are correctly recognized for accurate annotations. To convert any video to this format, you can use FFmpeg. For example, the following commands convert an input video to MP4 with H.264 video, AAC audio, and a constant frame rate of 30 fps:\n\n```bash\n# Extract the exact video stream duration in seconds\nDUR=$(ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=nokey=1:noprint_wrappers=1 input.mp4)\n# Re-encode media file to recommended format\nffmpeg -i input_video.mp4 -c:v libx264 -profile:v high -level 4.0 -pix_fmt yuv420p -r 30 -c:a aac -b:a 128k -to $DUR output_video.mp4\n```\n\nIn this command:\n- `-i input_video.mp4` specifies your source video.\n- `-c:v libx264` uses the H.264 codec for video encoding.\n- `-profile:v high -level 4.0` sets compatibility parameters for a broad range of devices.\n- `-pix_fmt yuv420p` ensures the pixel format is compatible with most browsers.\n- `-r 30` forces a constant frame rate of 30 fps. You can also omit the -r option, ffmpeg will save your current frame rate. This is fine if you are 100% certain that your video has a constant frame rate.\n- `-c:a aac -b:a 128k` encodes the audio in AAC at 128 kbps.\n- `-to` stops writing output as soon as the container clock hits your video’s end timestamp, so any extra audio tail is automatically dropped.\n- `output_video.mp4` is the converted video file ready for use in Label Studio.\n\nUsing this FFmpeg command to re-encode your videos will help eliminate playback issues and ensure that Label Studio detects the total video duration accurately, providing a smooth annotation experience.\n\nIt is a good idea to check all parameters of your video using this command:\n```bash\nffprobe -v error -show_format -show_streams -print_format json input.mp4\n```", "attrs": { - "column": { - "name": "column", - "description": "column name or index", + "name": { + "name": "name", + "description": "Name of the element", "type": "string", "required": true }, - "legend": { - "name": "legend", - "description": "display name of the channel", + "value": { + "name": "value", + "description": "URL of the video", "type": "string", - "required": false + "required": true }, - "units": { - "name": "units", - "description": "display units name", - "type": "string", - "required": false + "frameRate": { + "name": "frameRate", + "description": "video frame rate per second; default is 24; can use task data like `$fps`", + "type": "number", + "required": false, + "default": 24 }, - "displayFormat": { - "name": "displayFormat", - "description": "format string for the values, uses d3-format:
\n `[,][.precision][f\\|%]`
\n `,` - group thousands with separator (from locale): `,` (12345.6 -> 12,345.6) `,.2f` (12345.6 -> 12,345.60)
\n `.precision` - precision for `f\\|%` type, significant digits for empty type:
\n `.3f` (12.3456 -> 12.345, 1000 -> 1000.000)
\n `.3` (12.3456 -> 12.3, 1.2345 -> 1.23, 12345 -> 1.23e+4)
\n `f` - treat as float, default precision is .6: `f` (12 -> 12.000000) `.2f` (12 -> 12.00) `.0f` (12.34 -> 12)
\n `%` - treat as percents and format accordingly: `%.0` (0.128 -> 13%) `%.1` (1.2345 -> 123.4%)", + "sync": { + "name": "sync", + "description": "object name to sync with", "type": "string", "required": false }, + "muted": { + "name": "muted", + "description": "muted video", + "type": ["true", "false"], + "required": false, + "default": false + }, "height": { "name": "height", - "description": "height of the plot", + "description": "height of the video player", "type": "number", - "required": false - }, - "strokeColor": { - "name": "strokeColor", - "description": "plot stroke color, expects hex value", - "type": "string", "required": false, - "default": "#f48a42" + "default": 600 }, - "strokeWidth": { - "name": "strokeWidth", - "description": "plot stroke width", + "timelineHeight": { + "name": "timelineHeight", + "description": "height of the timeline with regions", "type": "number", "required": false, - "default": 1 + "default": 64 + } + } + }, + "Bitmask": { + "name": "Bitmask", + "description": "The `Bitmask` tag is used for image segmentation tasks where you want to apply a mask or use a brush to draw a region on the image.\n\nUse with the following data types: image.", + "attrs": { + "name": { + "name": "name", + "description": "Name of the element", + "type": "string", + "required": true }, - "markerColor": { - "name": "markerColor", - "description": "plot stroke color, expects hex value", + "toName": { + "name": "toName", + "description": "Name of the image to label", "type": "string", - "required": false, - "default": "#f48a42" + "required": true }, - "markerSize": { - "name": "markerSize", - "description": "plot stroke width", - "type": "number", + "choice": { + "name": "choice", + "description": "Configure whether the data labeler can select one or multiple labels", + "type": ["single", "multiple"], "required": false, - "default": 0 + "default": "single" }, - "markerSymbol": { - "name": "markerSymbol", - "description": "plot stroke width", + "maxUsages": { + "name": "maxUsages", + "description": "Maximum number of times a label can be used per task", "type": "number", - "required": false, - "default": "circle" - }, - "timeRange": { - "name": "timeRange", - "description": "data range of x-axis / time axis", - "type": "string", "required": false }, - "dataRange": { - "name": "dataRange", - "description": "data range of y-axis / data axis", - "type": "string", - "required": false + "showInline": { + "name": "showInline", + "description": "Show labels in the same visual line", + "type": ["true", "false"], + "required": false, + "default": true }, - "showAxis": { - "name": "showAxis", - "description": "show or bide both axis", - "type": "string", + "smart": { + "name": "smart", + "description": "Show smart tool for interactive pre-annotations", + "type": ["true", "false"], "required": false }, - "fixedScale": { - "name": "fixedScale", - "description": "if false current view scales to fit only displayed values; if given overwrites TimeSeries' fixedScale", + "smartOnly": { + "name": "smartOnly", + "description": "Only show smart tool for interactive pre-annotations", "type": ["true", "false"], "required": false } } }, - "Video": { - "name": "Video", - "description": "Video tag plays a simple video file. Use for video annotation tasks such as classification and transcription.\n\nUse with the following data types: video", + "BitmaskLabels": { + "name": "BitmaskLabels", + "description": "The `BitmaskLabels` tag for image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image.\n\nBitmask operates on pixel level and outputs a png encoded in a Base64 data URL.\n\nUse with the following data types: image.", "attrs": { "name": { "name": "name", @@ -681,45 +841,31 @@ "type": "string", "required": true }, - "value": { - "name": "value", - "description": "URL of the video", + "toName": { + "name": "toName", + "description": "Name of the image to label", "type": "string", "required": true }, - "frameRate": { - "name": "frameRate", - "description": "video frame rate per second; default is 24; can use task data like `$fps`", - "type": "number", + "choice": { + "name": "choice", + "description": "Configure whether the data labeler can select one or multiple labels", + "type": ["single", "multiple"], "required": false, - "default": 24 + "default": "single" }, - "sync": { - "name": "sync", - "description": "object name to sync with", - "type": "string", + "maxUsages": { + "name": "maxUsages", + "description": "Maximum number of times a label can be used per task", + "type": "number", "required": false }, - "muted": { - "name": "muted", - "description": "muted video", + "showInline": { + "name": "showInline", + "description": "Show labels in the same visual line", "type": ["true", "false"], "required": false, - "default": false - }, - "height": { - "name": "height", - "description": "height of the video player", - "type": "number", - "required": false, - "default": 600 - }, - "timelineHeight": { - "name": "timelineHeight", - "description": "height of the timeline with regions", - "type": "number", - "required": false, - "default": 64 + "default": true } } }, @@ -811,6 +957,30 @@ } } }, + "Bucket": { + "name": "Bucket", + "description": "Simple container for items in `Ranker` tag. Can be used to group items in `List` tag.", + "attrs": { + "name": { + "name": "name", + "description": "Name of the column; used as a key in resulting data", + "type": "string", + "required": true + }, + "title": { + "name": "title", + "description": "Title of the column", + "type": "string", + "required": true + }, + "default": { + "name": "default", + "description": "This Bucket will be used to display results from `List` by default; see `Ranker` tag for more details", + "type": ["true", "false"], + "required": false + } + } + }, "Choice": { "name": "Choice", "description": "The `Choice` tag represents a single choice for annotations. Use with the `Choices` tag or `Taxonomy` tag to provide specific choice options.", @@ -910,25 +1080,25 @@ }, "visibleWhen": { "name": "visibleWhen", - "description": "Control visibility of the choices. Can also be used with `when*` attributes below to narrow down visibility", + "description": "Control visibility of the choices. Can also be used with the `when*` parameters below to narrow down visibility", "type": ["region-selected", "no-region-selected", "choice-selected", "choice-unselected"], "required": false }, "whenTagName": { "name": "whenTagName", - "description": "Use with visibleWhen. Narrow down visibility by name of the tag. For regions, use the name of the object tag, for choices, use the name of the choices tag", + "description": "Use with `visibleWhen`. Narrow down visibility by name of the tag. For regions, use the name of the object tag, for choices, use the name of the `choices` tag", "type": "string", "required": false }, "whenLabelValue": { "name": "whenLabelValue", - "description": "Use with visibleWhen=\"region-selected\". Narrow down visibility by label value", + "description": "Use with `visibleWhen=\"region-selected\"`. Narrow down visibility by label value. Multiple values can be separated with commas", "type": "string", "required": false }, "whenChoiceValue": { "name": "whenChoiceValue", - "description": "Use with visibleWhen (\"choice-selected\" or \"choice-unselected\") and whenTagName, both are required. Narrow down visibility by choice value", + "description": "Use with `visibleWhen` (`\"choice-selected\"` or `\"choice-unselected\"`) and `whenTagName`, both are required. Narrow down visibility by choice value. Multiple values can be separated with commas", "type": "string", "required": false }, @@ -1890,13 +2060,6 @@ "required": false, "default": "medium" }, - "icon": { - "name": "icon", - "description": "Rating icon", - "type": ["star", "heart", "fire", "smile"], - "required": false, - "default": "star" - }, "hotkey": { "name": "hotkey", "description": "HotKey for changing rating value", @@ -1932,7 +2095,7 @@ }, "Rectangle": { "name": "Rectangle", - "description": "The `Rectangle` tag is used to add a rectangle (Bounding Box) to an image without selecting a label. This can be useful when you have only one label to assign to a rectangle.\n\nUse with the following data types: image.", + "description": "The `Rectangle` tag is used to add a rectangle (Bounding Box) to an image without selecting a label. This can be useful when you have only one label to assign to a rectangle.\n\nUse with the following data types: image. Annotation results store the left top corner of the bounding box,\nread more about it and rotation in the [Object Detection Template](/templates/image_bbox.html#Bounding-box-rotation-in-the-Label-Studio-results).", "attrs": { "name": { "name": "name", @@ -1996,7 +2159,7 @@ }, "RectangleLabels": { "name": "RectangleLabels", - "description": "The `RectangleLabels` tag creates labeled rectangles. Use to apply labels to bounding box semantic segmentation tasks.\n\nUse with the following data types: image.", + "description": "The `RectangleLabels` tag creates labeled rectangles. Use to apply labels to bounding box semantic segmentation tasks.\n\nUse with the following data types: image. Annotation results store the left top corner of the bounding box,\nread more about it and rotation in the [Object Detection Template](/templates/image_bbox.html#Bounding-box-rotation-in-the-Label-Studio-results).", "attrs": { "name": { "name": "name", @@ -2219,6 +2382,12 @@ "type": ["true", "false"], "required": false }, + "labeling": { + "name": "labeling", + "description": "Use taxonomy to label regions in text. Only supported with `` and `` object tags.", + "type": ["true", "false"], + "required": false + }, "legacy": { "name": "legacy", "description": "Use this tag to enable the legacy version of the Taxonomy tag. The legacy version supports the ability for annotators to add labels as needed. However, when true, the `apiUrl` parameter is not usable.", @@ -2567,42 +2736,47 @@ }, "visibleWhen": { "name": "visibleWhen", - "description": "Control visibility of the content. Can also be used with `when*` attributes below to narrow down visibility", + "description": "Control visibility of the content. Can also be used with the `when*` parameters below to narrow visibility", "type": ["region-selected", "choice-selected", "no-region-selected", "choice-unselected"], "required": false }, "whenTagName": { "name": "whenTagName", - "description": "Use with visibleWhen. Narrow down visibility by tag name. For regions, use the name of the object tag, for choices, use the name of the choices tag", + "description": "Use with `visibleWhen`. Narrow down visibility by tag name. For regions, use the name of the object tag, for choices, use the name of the `choices` tag", "type": "string", "required": false }, "whenLabelValue": { "name": "whenLabelValue", - "description": "Use with visibleWhen=\"region-selected\". Narrow down visibility by label value", + "description": "Use with `visibleWhen=\"region-selected\"`. Narrow down visibility by label value. Multiple values can be separated with commas", "type": "string", "required": false }, "whenChoiceValue": { "name": "whenChoiceValue", - "description": "Use with visibleWhen (\"choice-selected\" or \"choice-unselected\") and whenTagName, both are required. Narrow down visibility by choice value", + "description": "Use with `visibleWhen` (`\"choice-selected\"` or `\"choice-unselected\"`) and `whenTagName`, both are required. Narrow down visibility by choice value. Multiple values can be separated with commas", "type": "string", "required": false } }, "children": [ "Audio", + "Channel", "HyperText", "Image", "List", + "MultiChannel", "Paragraphs", + "Pdf", "Table", "Text", "TimeSeries", - "Channel", "Video", + "Bitmask", + "BitmaskLabels", "Brush", "BrushLabels", + "Bucket", "Choice", "Choices", "DateTime", From 0b86e8dfb768f7b69dbcb8562dbc94c0561b39a7 Mon Sep 17 00:00:00 2001 From: Nick Skriabin Date: Mon, 30 Jun 2025 20:33:04 +0100 Subject: [PATCH 3/5] Add video and other important details to the doc --- docs/source/tags/bitmask.md | 12 ++++- docs/source/tags/bitmasklabels.md | 10 ++++ web/libs/core/src/lib/utils/schema/tags.json | 53 +------------------ web/libs/editor/src/tags/control/Bitmask.js | 12 +++-- .../editor/src/tags/control/BitmaskLabels.jsx | 16 ++++-- 5 files changed, 43 insertions(+), 60 deletions(-) diff --git a/docs/source/tags/bitmask.md b/docs/source/tags/bitmask.md index edb38931b4a0..94e8edc20339 100644 --- a/docs/source/tags/bitmask.md +++ b/docs/source/tags/bitmask.md @@ -6,7 +6,17 @@ meta_title: Bitmask Tag for Image Segmentation Labeling meta_description: Customize Label Studio with bitmask pixel-wise tags for image segmentation labeling for machine learning and data science projects. --- -The `Bitmask` tag is used for pixel-wise image segmentation tasks where you want to apply a mask or use a brush to draw a region on the image. +The `Bitmask` tag for pixel-wise image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image. + +`Bitmask` operates on pixel level and outputs a Base64 encoded PNG data URL image with black pixels on transparent background. + +Export data example: `data-url:image/png;[base64-encoded-string]` + +**Note:** You need to set `smoothing="false"` on the Image tag to be able to work with individual pixels; + + Use with the following data types: image. diff --git a/docs/source/tags/bitmasklabels.md b/docs/source/tags/bitmasklabels.md index 5536c4b22e81..8327083c03ef 100644 --- a/docs/source/tags/bitmasklabels.md +++ b/docs/source/tags/bitmasklabels.md @@ -8,6 +8,16 @@ meta_description: Customize Label Studio with bitmask pixel-wise label tags for The `BitmaskLabels` tag for pixel-wise image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image. +`BitmaskLabels` operates on pixel level and outputs a Base64 encoded PNG data URL image with black pixels on transparent background. + +Export data example: `data-url:image/png;[base64-encoded-string]` + +**Note:** You need to set `smoothing="false"` on the Image tag to be able to work with individual pixels; + + + Use with the following data types: image. {% insertmd includes/tags/bitmasklabels.md %} diff --git a/web/libs/core/src/lib/utils/schema/tags.json b/web/libs/core/src/lib/utils/schema/tags.json index fedbe9a997f1..f8516abf95f0 100644 --- a/web/libs/core/src/lib/utils/schema/tags.json +++ b/web/libs/core/src/lib/utils/schema/tags.json @@ -781,59 +781,9 @@ } } }, - "Bitmask": { - "name": "Bitmask", - "description": "The `Bitmask` tag is used for image segmentation tasks where you want to apply a mask or use a brush to draw a region on the image.\n\nUse with the following data types: image.", - "attrs": { - "name": { - "name": "name", - "description": "Name of the element", - "type": "string", - "required": true - }, - "toName": { - "name": "toName", - "description": "Name of the image to label", - "type": "string", - "required": true - }, - "choice": { - "name": "choice", - "description": "Configure whether the data labeler can select one or multiple labels", - "type": ["single", "multiple"], - "required": false, - "default": "single" - }, - "maxUsages": { - "name": "maxUsages", - "description": "Maximum number of times a label can be used per task", - "type": "number", - "required": false - }, - "showInline": { - "name": "showInline", - "description": "Show labels in the same visual line", - "type": ["true", "false"], - "required": false, - "default": true - }, - "smart": { - "name": "smart", - "description": "Show smart tool for interactive pre-annotations", - "type": ["true", "false"], - "required": false - }, - "smartOnly": { - "name": "smartOnly", - "description": "Only show smart tool for interactive pre-annotations", - "type": ["true", "false"], - "required": false - } - } - }, "BitmaskLabels": { "name": "BitmaskLabels", - "description": "The `BitmaskLabels` tag for image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image.\n\nBitmask operates on pixel level and outputs a png encoded in a Base64 data URL.\n\nUse with the following data types: image.", + "description": "The `BitmaskLabels` tag for pixel-wise image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image.\n\nBitmask operates on pixel level and outputs a Base64 encoded PNG data URL image with black pixels on transparent background.\n\nExport data example: `data-url:image/png;[base64-encoded-string]`\n\n**Note:** You need to set `smoothing=\"false\"` on the Image tag to be able to work with individual pixels;\n\n \n\nUse with the following data types: image.", "attrs": { "name": { "name": "name", @@ -2772,7 +2722,6 @@ "Text", "TimeSeries", "Video", - "Bitmask", "BitmaskLabels", "Brush", "BrushLabels", diff --git a/web/libs/editor/src/tags/control/Bitmask.js b/web/libs/editor/src/tags/control/Bitmask.js index deda1b3d561f..c050af00a8c1 100644 --- a/web/libs/editor/src/tags/control/Bitmask.js +++ b/web/libs/editor/src/tags/control/Bitmask.js @@ -6,8 +6,14 @@ import { AnnotationMixin } from "../../mixins/AnnotationMixin"; import SeparatedControlMixin from "../../mixins/SeparatedControlMixin"; import { ToolManagerMixin } from "../../mixins/ToolManagerMixin"; -/** - * The `Bitmask` tag is used for image segmentation tasks where you want to apply a mask or use a brush to draw a region on the image. +/* + * The `Bitmask` tag for pixel-wise image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image. + * + * Bitmask operates on pixel level and outputs a Base64 encoded PNG data URL image with black pixels on transparent background. + * + * Export data example: `data-url:image/png;[base64-encoded-string]` + * + * **Note:** You need to set `smoothing="false"` on the Image tag to be able to work with individual pixels; * * Use with the following data types: image. * @example @@ -22,7 +28,7 @@ import { ToolManagerMixin } from "../../mixins/ToolManagerMixin"; * @name Bitmask * @regions BitmaskRegion * @meta_title Bitmask Tag for Image Segmentation Labeling - * @meta_description Customize Label Studio with brush tags for image segmentation labeling for machine learning and data science projects. + * @meta_description Customize Label Studio with bitmask tags for image segmentation labeling for machine learning and data science projects. * @param {string} name - Name of the element * @param {string} toName - Name of the image to label * @param {single|multiple=} [choice=single] - Configure whether the data labeler can select one or multiple labels diff --git a/web/libs/editor/src/tags/control/BitmaskLabels.jsx b/web/libs/editor/src/tags/control/BitmaskLabels.jsx index df7101a0c5e4..847c05e8d8d6 100644 --- a/web/libs/editor/src/tags/control/BitmaskLabels.jsx +++ b/web/libs/editor/src/tags/control/BitmaskLabels.jsx @@ -10,9 +10,17 @@ import ControlBase from "./Base"; import { BitmaskModel } from "./Bitmask"; /** - * The `BitmaskLabels` tag for image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image. + * The `BitmaskLabels` tag for pixel-wise image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image. * - * Bitmask operates on pixel level and outputs a png encoded in a Base64 data URL. + * Bitmask operates on pixel level and outputs a Base64 encoded PNG data URL image with black pixels on transparent background. + * + * Export data example: `data-url:image/png;[base64-encoded-string]` + * + * **Note:** You need to set `smoothing="false"` on the Image tag to be able to work with individual pixels; + * + * * * Use with the following data types: image. * @example @@ -22,12 +30,12 @@ import { BitmaskModel } from "./Bitmask"; *