Skip to content

Commit 10f8d6c

Browse files
committed
Merge branch 'develop' into 'fb-bros-14'
Workflow run: https://github.com/HumanSignal/label-studio/actions/runs/15254104277
2 parents 0523d1f + 5a9f8d4 commit 10f8d6c

File tree

64 files changed

+1267
-907
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1267
-907
lines changed

docs/source/guide/install_enterprise_k8s.md

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ Adjust the included defaults to reflect your environment and copy these into a n
259259

260260
</div>
261261

262-
## Optional: set up TLS for PostgreSQL
262+
## Optional: Set up TLS for PostgreSQL
263263
To configure Label Studio Enterprise to use TLS for end-client connections with PostgreSQL, do the following:
264264

265265
1. Enable TLS for your PostgreSQL instance and save Root TLS certificate, client certificate and its key for the next steps.
@@ -286,7 +286,7 @@ global:
286286

287287
4. Install or upgrade Label Studio Enterprise using Helm.
288288

289-
## Optional: set up TLS for Redis
289+
## Optional: Set up TLS for Redis
290290
To configure Label Studio Enterprise to use TLS for end-client connections with Redis, do the following:
291291

292292
1. Enable TLS for your Redis instance and save Root TLS certificate, client certificate and its key for the next steps.
@@ -313,6 +313,51 @@ global:
313313

314314
4. Install or upgrade Label Studio Enterprise using Helm.
315315

316+
317+
## Optional: Set up username and password for Redis
318+
319+
Use one of these options to set a password and a username for Redis:
320+
321+
**1. Password via Kubernetes Secret**. Use this when:
322+
* You want to avoid embedding credentials in `values.yaml`
323+
* You already manage Secrets in your cluster
324+
* You need a simple auth without multiple Redis users and you don't have username
325+
326+
```yaml
327+
global:
328+
redisConfig:
329+
host: "redis://redis.example.com:6379/1"
330+
password:
331+
secretName: "my-redis-secret" # Kubernetes Secret name
332+
secretKey: "redis-password" # Key inside Secret
333+
```
334+
335+
**2. Username + password in URL**. Use this when:
336+
* Redis v.7 or later, and with ACL-enabled users
337+
* You need a dedicated Redis user for permission scoping
338+
* You need a quick, throwaway setup or local testing
339+
340+
```yaml
341+
global:
342+
redisConfig:
343+
host: "redis://myuser:mypassword@redis.example.com:6379/1"
344+
```
345+
346+
**3. Username in environment variables + password in secret**. Use this when:
347+
* Redis v.7 or later, and with ACL-enabled users
348+
* You want to keep the password secret but still specify a username
349+
350+
```yaml
351+
global:
352+
redisConfig:
353+
host: "redis://redis.example.com:6379/1"
354+
password:
355+
secretName: "my-redis-secret" # Kubernetes Secret name
356+
secretKey: "redis-password" # Key inside Secret
357+
extraEnvironmentVars:
358+
REDIS_USERNAME: "myuser" # Injected into pod env
359+
```
360+
316361
## Use Helm to install Label Studio Enterprise on your Kubernetes cluster
317362

318363
Use Helm to install Label Studio Enterprise on your Kubernetes cluster. Provide your custom resource definitions YAML file. Specify any environment variables that you need to set for your Label Studio Enterprise installation using the `--set` argument with the `helm install` command.

docs/source/guide/label_studio_compare.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ Label Studio is available to everyone as open source software (Label Studio Comm
160160
<td style="text-align:center">✅</td>
161161
</tr>
162162
<tr>
163-
<td><b>Bulk labeling</b><br/><a href="https://docs.humansignal.com/guide/labeling#Bulk-labeling">Classify data in batches.</a></td>
163+
<td><b>Bulk labeling</b><br/><a href="https://docs.humansignal.com/guide/labeling_bulk">Classify data in batches.</a></td>
164164
<td style="text-align:center">❌</td>
165165
<td style="text-align:center">❌</td>
166166
<td style="text-align:center">✅</td>

docs/source/guide/labeling.md

Lines changed: 0 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -131,75 +131,6 @@ To label tasks multiple times while the minimum annotations required is set to o
131131
4. Click **Submit** to save your annotation.
132132
5. Click the next task in the data manager to open the quick labeling view for that task and repeat steps 2-4.
133133

134-
<div class="enterprise-only">
135-
136-
## Bulk labeling
137-
138-
Bulk labeling is useful when you have a large set of tasks that share a common label or annotation that you want to apply in one go. For example:
139-
140-
* **Data classification**: Quickly label multiple tasks with the same category.
141-
* **Filtering and grouping**: Use filters to isolate tasks matching specific criteria (e.g., tasks you know are all “Approved”), then label them in bulk.
142-
* **Speed and consistency**: Avoid repetitive labeling for items that can confidently share a label.
143-
144-
#### Supported data types
145-
146-
Bulk labeling supports all data types (e.g. images, text, audio, video).
147-
148-
#### Supported labeling tasks
149-
150-
Bulk labeling supports classification tasks and text area input.
151-
152-
You can use any combination of supported control tags, and all object tags (e.g. `<Image>`, `<Text>`, `<Video`) are supported.
153-
154-
The following control tags can be assigned through the bulk labeling action:
155-
156-
* [Choices](/tags/choices.html)
157-
* [DateTime](/tags/datetime.html)
158-
* [Number](/tags/number.html)
159-
* [Rating](/tags/rating.html)
160-
* [Taxonomy](/tags/taxonomy.html)
161-
* [TextArea](/tags/textarea.html)
162-
163-
If your labeling configuration includes control tags not listed above, the **Bulk labeling** action is not accessible.
164-
165-
166-
!!! note Limitations
167-
Note the following:
168-
* At this time, only global classification tasks are supported. This means that the control tag cannot have `perItem` or `perRegion` enabled.
169-
* Lead time is not calculated for annotations performed through the bulk labeling option.
170-
171-
#### Bulk labeling panel
172-
173-
When you perform bulk labeling, your options open in a side panel. Note that you can expand or collapse this panel as necessary by clicking the expand/collapse icons or by pressing `shift` + `.`.
174-
175-
![Gif opening and closing bulk label drawer](/images/label/bulk-expand.gif)
176-
177-
### List view
178-
179-
You can perform bulk labeling from the list view in the Data Manager. This is especially useful if you want to use filters to label a subset of results.
180-
181-
Select the checkboxes next to the tasks you want to annotate and then click the drop-down menu next to **Label *n* Tasks**. Select **Bulk label**. This opens a panel with your labeling options (see [above](#Bulk-labeling-panel)).
182-
183-
![Screenshot of Bulk label option from List view](/images/label/bulk-list-view.png)
184-
185-
Make your selections and click **Submit**,
186-
187-
### Grid view
188-
189-
You can use the grid view to visually inspect and then select tasks for bulk annotation.
190-
191-
To select tasks from the grid view, you can click the checkboxes next to them or open each and select tasks as you navigate through them.
192-
193-
![Gif showing selecting images in grid view](/images/label/bulk-grid-navigating.gif)
194-
195-
Once selected, click the drop-down menu next to **Label *n* Tasks**. Select **Bulk label**. This opens a panel with your labeling options (see [above](#Bulk-labeling-panel)).
196-
197-
!!! info Tip
198-
There are hotkeys for selecting the task, scrolling, zooming, and navigating between tasks. To see a list of the available hotkeys, click the help icon above the task:
199-
200-
![Screenshot highlighting help icon](/images/label/bulk-hotkeys.png)
201-
202-
</div>
203134

204135
## Perform ML-assisted labeling with interactive preannotations
205136

docs/source/guide/labeling_bulk.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
---
2+
title: Bulk labeling
3+
short: Bulk labeling
4+
tier: enterprise
5+
type: guide
6+
order: 0
7+
order_enterprise: 135
8+
meta_title: Bulk Labeling
9+
meta_description: Bulk labeling in Label Studio
10+
section: "Create & Manage Projects"
11+
parent: "labeling"
12+
parent_enterprise: "labeling"
13+
date: 2025-05-24 17:19:21
14+
---
15+
16+
Bulk labeling is useful when you have a large set of tasks that share a common label or annotation that you want to apply in one go. For example:
17+
18+
* **Data classification**: Quickly label multiple tasks with the same category.
19+
* **Filtering and grouping**: Use filters to isolate tasks matching specific criteria (e.g., tasks you know are all “Approved”), then label them in bulk.
20+
* **Speed and consistency**: Avoid repetitive labeling for items that can confidently share a label.
21+
22+
## Supported data types
23+
24+
Bulk labeling supports all data types (e.g. images, text, audio, video).
25+
26+
## Supported user roles
27+
28+
Only users who are in the Reviewer, Manager, Admin, or Owner role can use the bulk labeling actions available from the Data Manager.
29+
30+
!!! info Tip
31+
Users in the Annotator role can still use [plugin-enabled bulk labeling actions](/plugins/bulk_labeling).
32+
33+
## Supported labeling tasks
34+
35+
Bulk labeling supports classification tasks and text area input.
36+
37+
You can use any combination of supported control tags, and all object tags (e.g. `<Image>`, `<Text>`, `<Video`) are supported.
38+
39+
The following control tags can be assigned through the bulk labeling action:
40+
41+
* [Choices](/tags/choices.html)
42+
* [DateTime](/tags/datetime.html)
43+
* [Number](/tags/number.html)
44+
* [Rating](/tags/rating.html)
45+
* [Taxonomy](/tags/taxonomy.html)
46+
* [TextArea](/tags/textarea.html)
47+
48+
If your labeling configuration includes control tags not listed above, the **Bulk labeling** action is not accessible.
49+
50+
51+
!!! note Limitations
52+
Note the following:
53+
* At this time, only global classification tasks are supported. This means that the control tag cannot have `perItem` or `perRegion` enabled.
54+
* Lead time is not calculated for annotations performed through the bulk labeling option.
55+
56+
## Bulk labeling panel
57+
58+
When you perform bulk labeling, your options open in a side panel. Note that you can expand or collapse this panel as necessary by clicking the expand/collapse icons or by pressing `shift` + `.`.
59+
60+
![Gif opening and closing bulk label drawer](/images/label/bulk-expand.gif)
61+
62+
## List view
63+
64+
You can perform bulk labeling from the list view in the Data Manager. This is especially useful if you want to use filters to label a subset of results.
65+
66+
Select the checkboxes next to the tasks you want to annotate and then click the drop-down menu next to **Label *n* Tasks**. Select **Bulk label**. This opens a panel with your labeling options (see [above](#Bulk-labeling-panel)).
67+
68+
![Screenshot of Bulk label option from List view](/images/label/bulk-list-view.png)
69+
70+
Make your selections and click **Submit**,
71+
72+
## Grid view
73+
74+
You can use the grid view to visually inspect and then select tasks for bulk annotation.
75+
76+
To select tasks from the grid view, you can click the checkboxes next to them or open each and select tasks as you navigate through them.
77+
78+
![Gif showing selecting images in grid view](/images/label/bulk-grid-navigating.gif)
79+
80+
Once selected, click the drop-down menu next to **Label *n* Tasks**. Select **Bulk label**. This opens a panel with your labeling options (see [above](#Bulk-labeling-panel)).
81+
82+
!!! info Tip
83+
There are hotkeys for selecting the task, scrolling, zooming, and navigating between tasks. To see a list of the available hotkeys, click the help icon above the task:
84+
85+
![Screenshot highlighting help icon](/images/label/bulk-hotkeys.png)

docs/source/guide/release_notes/onprem/2.21.0.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ There is a new **Bulk label** action available from the Data Manager. You can us
1919

2020
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.
2121

22-
For more information, see the [Bulk labeling documentation](labeling#Bulk-labeling) and [Bulk Labeling: How to Classify in Batches](https://humansignal.com/blog/bulk-labeling-how-to-classify-in-batches/).
22+
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/).
2323

2424
![Screenshot of bulk label action](/images/releases/2-21-bulk-label.png)
2525

docs/source/guide/release_notes/onprem/2.24.0.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ Click your avatar in the upper right to find the toggle for dark mode.
2222
- **Light** - Use light mode.
2323
- **Dark** - Use dark mode.
2424

25+
!!! note
26+
Dark mode is not available for environments that use white labeling.
27+
2528
![Screenshot of dark mode](/images/releases/2-24-dark-mode.png)
2629

2730
![Animated gif of dark mode](/images/releases/2-24-darkmode.gif)

docs/source/guide/storage.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ Set up the following cloud and other storage systems with Label Studio:
2424

2525
When working with an external cloud storage connection, keep the following in mind:
2626

27-
* Label Studio doesn't import the data stored in the bucket, but instead creates *references* to the objects. Therefore, you must have full access control on the data to be synced and shown on the labeling screen.
27+
* For Source storage:
28+
* When "Treat every bucket object as a source file" is checked, Label Studio doesn’t import the data stored in the bucket, but instead creates *references* to the objects. Therefore, you have full access control on the data to be synced and shown on the labeling screen.
29+
* When "Treat every bucket object as a source file" is unchecked, bucket files are assumed to be immutable; the only way to push an updated file's state to Label Studio is to upload it with a new filename or delete all tasks that are associated with that file and resync.
2830
* Sync operations with external buckets only goes one way. It either creates tasks from objects on the bucket (Source storage) or pushes annotations to the output bucket (Target storage). Changing something on the bucket side doesn't guarantee consistency in results.
2931
* We recommend using a separate bucket folder for each Label Studio project.
3032
* Storage Regions: To minimize latency and improve efficiency, store data in cloud storage buckets that are geographically closer to your team rather than near the Label Studio server.
@@ -75,7 +77,7 @@ Label Studio Source Storages feature an option called "Treat every bucket object
7577

7678
###### Off
7779

78-
When disabled, tasks in JSON format can be loaded directly from storage buckets into Label Studio. This approach is particularly helpful when dealing with complex tasks that involve multiple media sources.
80+
When disabled, tasks in JSON or JSONL/NDJSON format can be loaded directly from storage buckets into Label Studio. This approach is particularly helpful when dealing with complex tasks that involve multiple media sources.
7981

8082
<img src="/images/source-storages-treat-off.png" class="make-intense-zoom">
8183

@@ -174,6 +176,18 @@ Or:
174176

175177
<br>
176178

179+
{% details <b>Example with JSONL</b> %}
180+
181+
`tasks.jsonl`
182+
```
183+
{ "image": "s3://bucket/1.jpg", "text": "opossums are awesome" }
184+
{ "image": "s3://bucket/2.jpg", "text": "cats are awesome" }
185+
```
186+
187+
{% enddetails %}
188+
189+
<br>
190+
177191
###### On
178192

179193
When enabled, Label Studio automatically lists files from the storage bucket and constructs tasks. This is only possible for simple labeling tasks that involve a single media source (such as an image, text, etc.).*

docs/source/guide/tasks.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,11 @@ You can import many types of data, including text, timeseries, audio, and image
5252
| Structured data | .csv, .tsv |
5353
| [Text](#Plain-text) | .txt, .json |
5454
| [Time series](#Import-CSV-or-TSV-data) | .csv, .tsv, .json |
55-
| [Tasks with multiple data types](#Basic-Label-Studio-JSON-format) | .csv, .tsv, .json |
55+
| [Tasks with multiple data types](#Basic-Label-Studio-JSON-format) | .csv, .tsv, .json, .jsonl* |
5656
| Video | .mp4, .webm |
5757

58+
\* *Cloud storage only*
59+
5860
If you don't see a supported data or file type that you want to import, please let us know by submitting an issue to the <a className="no-go" href="https://github.com/humansignal/label-studio/issues">Label Studio Repository</a>.
5961

6062

@@ -347,6 +349,8 @@ You can then import text tasks to label that match the following JSON format:
347349
#### Example JSON with multiple tasks
348350
You can place multiple tasks in one JSON file if you're uploading the JSON file using Label Studio Import Dialog only (Data Manager => Import button), or when importing from [cloud storage](storage.html). When using cloud storage, you must ensure every task in the file is formatted the same way.
349351

352+
If you're using [Source cloud storage](storage.html), you can also place multiple tasks in a newline-delimited JSON file (JSONL/NDJSON).
353+
350354
<br/>
351355
{% details <b>To place multiple tasks in one JSON file, use this JSON format example</b> %}
352356
This example contains multiple text classification tasks with no annotations or predictions.

docs/source/guide/troubleshooting.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,9 @@ Label Studio does not support labeling PDF files directly. However, you can conv
112112

113113
When working with an external Cloud Storage connection (S3, GCS, Azure), keep the following in mind:
114114

115-
* Label Studio doesn’t import the data stored in the bucket, but instead creates *references* to the objects. Therefore, you have full access control on the data to be synced and shown on the labeling screen.
115+
* For Source storage:
116+
* When "Treat every bucket object as a source file" is checked, Label Studio doesn’t import the data stored in the bucket, but instead creates *references* to the objects. Therefore, you have full access control on the data to be synced and shown on the labeling screen.
117+
* When "Treat every bucket object as a source file" is unchecked, bucket files are assumed to be immutable; the only way to push an updated file's state to Label Studio is to upload it with a new filename or delete all tasks that are associated with that file and resync.
116118
* Sync operations with external buckets only goes one way. It either creates tasks from objects on the bucket (Source storage) or pushes annotations to the output bucket (Target storage). Changing something on the bucket side doesn’t guarantee consistency in results.
117119
* We recommend using a separate bucket folder for each Label Studio project.
118120

0 commit comments

Comments
 (0)