# Label Studio: A Multi-Type Annotation Server You Host Yourself

> Label Studio is an open source Django application for labeling images, text, audio, video and time series, with export to model formats. It installs in one pip command or one Docker container, and the trade-off is that you own the database, the storage and the upgrades.

**HumanSignal/label-studio** — Label Studio is a multi-type data labeling and annotation tool with standardized output format

- Repository: https://github.com/HumanSignal/label-studio
- Website: https://labelstud.io
- Stars: 28,345 · Forks: 3,729
- Language: TypeScript
- License: Apache-2.0
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/humansignal-label-studio

## What Label Studio Is For, and Who Ends Up Running It

Label Studio is an open source data labeling and annotation tool. The README lists the data types it handles: audio, text, images, videos and time series, labeled through a browser UI, with export to various model formats. The stated purpose is to prepare raw data or improve existing training data for more accurate ML models.

The audience is not only ML engineers. A team that has collected a few thousand images and needs bounding boxes has the same problem as a team with call recordings that need transcripts and speaker turns. Label Studio puts both behind one server. The cost is that someone on that team becomes the operator of a Django application, a database and a file store. The README offers a Starter Cloud edition as the alternative for people who do not want that role, and links to a comparison page for what each edition offers.

The repository is not archived and the last push was on 2026-09-10, so the project is being worked on. That says nothing about whether your particular labeling config will survive the next release, which is the question that matters when you build a pipeline on top of it.

## The Labeling Config Is the Real Interface

The part of Label Studio that decides whether it fits is the labeling configuration: an XML document that declares the objects to label and the controls that produce annotations. The README does not reproduce the schema, but it points to the templates section and to the guide, and the repository ships a docs directory. Everything the UI shows an annotator comes from that config, which is why migrating away from Label Studio is harder than exporting a JSON file: the export format carries the results, the config carries the meaning.

The architecture underneath is a Django project. pyproject.toml pins Django to the 5.2 line, djangorestframework to 3.17.2, and drf-spectacular for the API schema, with django-rq and rq for background jobs and redis as the queue backend. Storage backends appear as dependencies rather than plugins: boto3 and botocore for S3, azure-storage-blob for Azure, django-storages for the Django storage layer. The default database is SQLite, and psycopg is present for PostgreSQL.

The frontend is a separate build. The Dockerfile compiles it with Bun in a frontend-builder stage and writes a manifest that Django's collectstatic picks up, which is why a source install needs both a Python environment and a frontend build step, while the published image does not.

## Install Label Studio with Docker or pip

The README gives Docker as the first option. Pull the image and run it with a bind mount for the data directory, then open http://localhost:8080. The mount is where the SQLite database label_studio.sqlite3 and uploaded files land, so back up that directory or lose the project.

```bash
docker pull heartexlabs/label-studio:latest
docker run -it -p 8080:8080 -v $(pwd)/mydata:/label-studio/data heartexlabs/label-studio:latest
```

If you prefer a Python install, the README requires Python >=3.10 and one command. The server starts on the same port.

```bash
pip install label-studio
label-studio
```

For anything beyond a single user, the repository ships a Docker Compose stack that adds Nginx as a proxy and PostgreSQL in place of SQLite. The README calls this the production-ready stack and says to start it with docker-compose up, after which the app is at http://localhost.

```bash
docker-compose up
```

There is also a MinIO overlay for testing S3 storage locally. The README notes that without a static IP you must add a hosts entry so both Label Studio and your browser can reach the MinIO server.

```bash
docker compose -f docker-compose.yml -f docker-compose.minio.yml up -d
```

Once the server is up, the first real task is creating a project, choosing a template from the included set, and importing data. The README's own path for that is the guide at labelstud.io; the repository does not walk through a first project in README.md.

## Where the Single-Container Setup Breaks

The Docker quickstart uses SQLite inside the mounted data directory. That is fine for one annotator and a few thousand tasks. It is the wrong choice the moment several people label at once, because every write goes through the same file and the Compose stack exists precisely to replace it with PostgreSQL.

Storage is the second failure mode. Uploaded audio and images are served through the app or through Nginx depending on the deployment, and the Compose file keeps the data directory as a bind mount. If that volume is on a machine that dies, the annotations survive only if the database survived with it. The repository includes a MinIO overlay and the dependencies include boto3 and azure-storage-blob, so remote storage is a supported direction, but the quickstart does not set any of it up for you.

Upgrades are the third. The release list shows a nightly dev build, 1.23.0 from 2026-03-13 and 1.22.0 from 2025-12-19, and the pinned dependency set includes exact versions such as django-storages 1.12.3 and django-annoying 0.10.6. A deployment that tracks latest has to move with those pins. The README does not document a rollback procedure, so the safe move is to snapshot the database and the data directory before pulling a new image.

## Label Studio Compared with a Managed Labeling Service

The closest alternative for many teams is a hosted labeling service, including the Starter Cloud edition the README links to. The difference is not features, it is who holds the data. With a hosted service, your images and audio leave your infrastructure and the vendor handles upgrades, scaling and backups. With Label Studio self-hosted, nothing leaves your network, and in exchange you run the PostgreSQL instance, the Nginx proxy and the storage bucket.

A second alternative is building the annotation UI yourself against your own database. That is defensible when you have exactly one labeling task and it will never change. Label Studio's advantage is that a new task type is a new XML config rather than a new application, and its disadvantage is that you accept its data model for results. The export format is standardized, which the repository description names as a feature, but the config that produced it is not portable to another tool.

A third path is a desktop annotation tool that reads local files. Those avoid the server entirely, and they also avoid multi-annotator review, task assignment and the API. Label Studio's API, documented through drf-spectacular, is what lets you push tasks in and pull annotations out from a training script, and that is the capability a desktop tool does not offer.

## Licence and the Cost of Staying Current

The licence is Apache-2.0, declared in pyproject.toml and in the repository's LICENSE file. That permits commercial use and modification. It also means there is no vendor obligation to fix your bug on your schedule, and no support contract attached to the code you download. The README separates the open source tool from the commercial editions and points to a comparison page; the licence terms of those editions are not described in the README, so treat them as a separate question.

The upgrade cost is concrete. The dependency list pins Django to >=5.2.16,<5.3.0 and djangorestframework to 3.17.2, among roughly forty other packages with exact or range pins. A self-hosted install that falls several releases behind will face a migration path through those pins, and the repository's Makefile shows the migration commands used in development: python label_studio/manage.py migrate and collectstatic. Those are the same two operations a production upgrade needs, run inside the app container.

The nightly tag exists, so there is a rolling build, but the README does not present it as a supported production target.

## Conclusion

Adopt Label Studio when you need one place to label several data types and you are willing to run the server, the database and the storage yourself. Do not adopt it if you expect a hosted service with no operations work, or if your labeling volume is small enough that a spreadsheet and a folder of files would do. Before committing, verify three things: that the label configuration you need can be expressed in the XML labeling config, that your PostgreSQL and object storage are reachable from the app container, and that you have a tested path for the pinned Django and djangorestframework versions in pyproject.toml, because an upgrade that crosses those pins is the part of this stack that actually costs time.

## FAQ

### What is Label Studio used for?

It is an open source data labeling and annotation tool for audio, text, images, videos and time series. The README states it can be used to prepare raw data or improve existing training data for more accurate ML models, and that annotations export to various model formats.

### Who owns Label Studio?

The repository is HumanSignal/label-studio and pyproject.toml lists HumanSignal as the author with support@humansignal.com. The README also links to a commercial Starter Cloud edition and a page comparing editions.

### Is Label Studio free to use?

The source code is licensed Apache-2.0, which the LICENSE file and pyproject.toml both declare, so the self-hosted tool can be used and modified under those terms. The README separately describes commercial editions and links to a comparison page for what each offers.

### How much does Label Studio cost?

The README does not list prices. It offers a free trial of the Starter Cloud edition and links to a page comparing what each edition offers, so pricing is not answerable from the repository files.

### How to install Label Studio?

The README gives several routes: docker pull heartexlabs/label-studio:latest followed by docker run on port 8080, pip install label-studio followed by the label-studio command, or docker-compose up for the stack with Nginx and PostgreSQL. Python must be 3.10 or newer for the pip install.

### How to install Label Studio with Docker?

Pull the official image from Docker Hub and run it with a bind mount at /label-studio/data, which is where the SQLite database and uploaded files are written. The README shows the container on port 8080, reachable at http://localhost:8080.

## Sources

- [HumanSignal/label-studio on GitHub](https://github.com/HumanSignal/label-studio)
- [License: Apache-2.0](https://github.com/HumanSignal/label-studio/blob/develop/LICENSE)
- [Project website](https://labelstud.io)
- [README](https://github.com/HumanSignal/label-studio/blob/develop/README.md)
- [Releases](https://github.com/HumanSignal/label-studio/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/humansignal-label-studio
