Repository navigation
Service Label Studio
Label Studio is Atlas's disabled-by-default dataset review and annotation surface for ML, RAG and creative outputs. It runs the Apache-2.0 community image heartexlabs/label-studio:1.23.0. It stores application metadata in a dedicated Supabase Postgres database and media and uploads in a scoped, S3-compatible MinIO bucket.
| Path | URL | Notes |
|---|---|---|
| Kong | http://label-studio.localhost:${KONG_HTTP_PORT} |
Routed only when LABEL_STUDIO_SOURCE=container; fronted by Atlas dashboard basic auth. |
| Direct | http://localhost:${LABEL_STUDIO_PORT} |
Host-port path for local development. |
| In-network | http://label-studio:8080 |
Used by notebooks and future service consumers. |
LABEL_STUDIO_USERNAME and LABEL_STUDIO_PASSWORD set the initial user; Atlas maps them to Label Studio's USERNAME and PASSWORD bootstrap env vars. DISABLE_SIGNUP_WITHOUT_LINK=true turns off open self-signup.
LABEL_STUDIO_SOURCE=disabled
LABEL_STUDIO_DB_NAME=label_studio
LABEL_STUDIO_DB_USER=label_studio
LABEL_STUDIO_USERNAME=admin@atlas.local
MINIO_BUCKET_LABEL_STUDIO=label-studioTrack: ml-eng (not data-eng). Category: apps.
When the service is enabled, supabase-db-init creates the dedicated Postgres database and role (services/supabase/db/scripts/05-scoped-roles.sh). minio-init provisions the label-studio bucket and a scoped service account, and label-studio-init then verifies the login. The app container receives:
- Postgres metadata settings via
DJANGO_DB=defaultandPOSTGRE_*. - S3-compatible storage settings via
STORAGE_TYPE=s3,STORAGE_AWS_ENDPOINT_URL=http://minio:9000, and the scopedMINIO_LABEL_STUDIO_*credentials. -
LABEL_STUDIO_HOSTandCSRF_TRUSTED_ORIGINSfor the Kong alias. -
LABEL_STUDIO_USER_TOKEN, exposed as upstreamUSER_TOKEN, for API/notebook smoke paths.
SSRF_PROTECTION_ENABLED=true is set, so a task import from a URL cannot fetch private or internal addresses (other Atlas services, cloud metadata endpoints). Upstream Label Studio 1.23 turns it off by default. The setting does not cover ML backend URLs.
Storage connections are project-specific in Label Studio. Atlas provisions the bucket and credentials, but each project selects its source and target storage in the Label Studio UI or API.
JupyterHub receives LABEL_STUDIO_URL, LABEL_STUDIO_API_URL and LABEL_STUDIO_API_KEY when the service is enabled. The optional label-studio-sdk is intentionally not bundled. Releases up to 2.1.0 pin datamodel-code-generator==0.26.1, which has published advisories; 2.1.1 and later require >=0.70.0. If you install the SDK yourself, use 2.1.1 or later. Use httpx for the REST flow, then log exported artifacts to MLflow or upsert reviewed rows into Weaviate:
import os
import httpx
response = httpx.get(
f'{os.environ["LABEL_STUDIO_API_URL"].rstrip("/")}/api/projects/1/export',
headers={"Authorization": f'Token {os.environ["LABEL_STUDIO_API_KEY"]}'},
params={"exportType": "JSON"},
timeout=60,
)
response.raise_for_status()
annotations = response.json()MLflow and Weaviate exports are notebook-owned. The Label Studio service does not write model registry entries or vector collections.
Support tier: experimental — Capability contract declared; no cited cold-start, workflow, or upgrade qualification run yet (evidence at v0.1.0).
| Capability | Status | Verification | Notes |
|---|---|---|---|
| Human dataset review and annotation | supported | tested | Atlas starts the Label Studio UI/API with a dedicated Postgres role and initial administrator for operator-created labeling projects. |
| Scoped MinIO project storage | partial | tested | Atlas provisions a dedicated bucket and credentials, but each project must still configure its own import or export storage connection in Label Studio. |
| Notebook export integration | partial | tested | JupyterHub receives the Label Studio URL and legacy API token for REST exports, while MLflow, Weaviate, and Backend review loops remain notebook-owned or future work. |
| Label Studio access control | partial | tested | The direct port relies on Label Studio login and disabled open signup. Kong adds dashboard Basic Auth and ACL. Atlas does not integrate Supabase SSO or enterprise roles. |
| Annotation service high availability | not-supported | documented | Postgres and MinIO preserve metadata and assets. Atlas runs one Label Studio replica and one local data volume, without a tested backup or failover workflow. |
-
Route missing: confirm
LABEL_STUDIO_SOURCE=container; Kong only emitslabel-studio.localhostwhen the service is enabled. -
Storage errors: confirm
MINIO_SOURCE=container; Label Studio requires MinIO. -
Login unavailable: use
LABEL_STUDIO_USERNAMEand the generatedLABEL_STUDIO_PASSWORDfrom.env. - Project storage not visible: add the provisioned MinIO bucket as a project-specific source or target storage connection in Label Studio.
| Service | Category |
|---|---|
| minio | data |
| supabase | data |
| Service | Category |
|---|---|
| kong | infra |
| jupyterhub | apps |

Open the full-size diagram for a full-screen view.
-
backend ↔ label-studio — Why: active-learning loops could enqueue model predictions and review tasks from backend workflows. Mechanism: backend REST client using
LABEL_STUDIO_API_URLandLABEL_STUDIO_USER_TOKEN, with explicit project IDs and provenance fields. Effort: medium. Confidence: medium. - label-studio ↔ weaviate — Why: reviewed annotations should become curated vector metadata for retrieval/evaluation. Mechanism: notebook or backend export job reads Label Studio JSON and upserts namespaced Weaviate objects. Effort: small. Confidence: high.
-
label-studio ↔ mlflow — Why: reviewed datasets and evaluator labels should be attached to MLflow runs. Mechanism: notebook export logs JSON artifacts/metrics to
MLFLOW_TRACKING_URI. Effort: small. Confidence: high.
Add SSO and permissions before you use Label Studio as a multi-user review platform. Label Studio CE has its own auth model; Atlas does not integrate it with Supabase Auth.
Enterprise review workflows, role-based permissions and organization-wide SSO are out of scope.
Atlas documentation.
- 1. Overview
- 2. Quick Start
- 3. Core Concepts
- 4. Tracks
-
5. Services
- 5.1. Service Catalog
-
5.2. Service Guides
- 5.2.1. airflow
- 5.2.2. asset-baker
- 5.2.3. asset-worker
- 5.2.4. backend
- 5.2.5. backup
- 5.2.6. blender-mcp
- 5.2.7. celery
- 5.2.8. chatterbox
- 5.2.9. cloud-providers
- 5.2.10. cloudflared
- 5.2.11. comfyui
- 5.2.12. crawl4ai
- 5.2.13. doc-processor
- 5.2.14. docling
- 5.2.15. docling-lightrag-adapter
- 5.2.16. fal
- 5.2.17. globals
- 5.2.18. grafana
- 5.2.19. hermes
- 5.2.20. iceberg-rest
- 5.2.21. jenkins
- 5.2.22. jupyterhub
- 5.2.23. kong
- 5.2.24. label-studio
- 5.2.25. langfuse
- 5.2.26. lightrag
- 5.2.27. litellm
- 5.2.28. llm-graph-builder
- 5.2.29. local-deep-researcher
- 5.2.30. loki
- 5.2.31. mcp-servers
- 5.2.32. minio
- 5.2.33. mlflow
- 5.2.34. multi2vec-clip
- 5.2.35. n8n
- 5.2.36. neo4j
- 5.2.37. ollama
- 5.2.38. open-webui
- 5.2.39. openclaw
- 5.2.40. otel-collector
- 5.2.41. parakeet
- 5.2.42. prometheus
- 5.2.43. ray
- 5.2.44. redis
- 5.2.45. redpanda
- 5.2.46. searxng
- 5.2.47. spark
- 5.2.48. speaches
- 5.2.49. stt-provider
- 5.2.50. supabase
- 5.2.51. supavisor
- 5.2.52. tei-reranker
- 5.2.53. tempo
- 5.2.54. tika
- 5.2.55. trino
- 5.2.56. trueforge
- 5.2.57. tts-provider
- 5.2.58. verba
- 5.2.59. vllm-metal
- 5.2.60. weaviate
- 5.2.61. zeppelin
- 5.3. Provider And Extension Guides
- 6. Configuration
- 7. Operations
- 8. Architecture
- 9. Development
- 10. Reference