---
title: "Pixeltable + Label Studio: annotation UI vs the production table"
description: "Deprecated: Pixeltable's native Label Studio APIs, removed in v0.6.7. Use Label Studio for annotators and QA; export JSON and insert it."
keywords:
  - Pixeltable and Label Studio
  - Label Studio integration
  - data annotation workflow
  - computer vision data
  - multimodal AI data
url: "https://www.pixeltable.com/compare/pixeltable-vs-labelstudio"
---

# Pixeltable + Label Studio

Updated: 2026-10-27

## Which is better, Pixeltable or Label Studio?

It depends. Label Studio belongs when humans have to agree on boxes: taxonomies, reviewer workflows, custom interfaces. Pixeltable belongs after the labels exist. Pixeltable's Label Studio integration is deprecated; v0.6.7 removed the native APIs. Export JSON and insert it. Keep the labeling tool. As of 2026-10-27.

Deprecated: Pixeltable's Label Studio integration is deprecated. Label Studio is the annotator UI, QA, and reviewer workflow. Pixeltable is the versioned multimodal pipeline those labels feed. They do not replace each other. Export JSON and insert it.

## Summary

### Pixeltable

- Video, frames, detections, and labels as tables
- Computed columns run models on insert
- Versioned rows you can query after review
- No annotator UI, consensus, or project roles

### Label Studio

- Custom labeling UI and taxonomies
- Annotators, reviewers, and QA workflows
- ML-assisted pre-labels you already use
- Not a compute engine or embedding index

## Comparison

| Feature | Pixeltable | Label Studio |
| --- | --- | --- |
| Job | Store media, run models, version the result | Collect and QA human labels |
| Annotator UI | None — dashboard is for tables, not labeling tasks | Configurable views, hotkeys, and project UX |
| QA and roles | Data versioning; not annotator consensus | Reviewers, agreement, and project permissions |
| Downstream compute | Iterators, UDFs, indexes on the labeled rows | Export; processing happens in something else |
| How they join now | Insert exported JSON into a Json column | Projects, tasks, and export APIs |

## Export, then insert

Label Studio owns the project and the XML config. Pixeltable owns frames and the Json those tasks become. Apply Pixeltable with pxt schema update app.py annotation.

### Pixeltable

```python
import pixeltable as pxt
from pixeltable.functions.video import frame_iterator
from pixeltable.functions.huggingface import detr_for_object_detection

TableModel = pxt.model_base()

class Videos(TableModel, name='videos'):
    video: pxt.Video

class Frames(
    TableModel,
    name='frames',
    base=Videos,
    iterator=frame_iterator(Videos.video, fps=1),
):
    detections = detr_for_object_detection(
        frame, model_id='facebook/detr-resnet-50'
    )

class Labels(TableModel, name='labels'):
    task_id: pxt.String
    frame_url: pxt.String
    annotation: pxt.Json
    reviewed: pxt.Bool

# pxt schema update app.py annotation
# After the Label Studio JSON export:
import json

labels = pxt.get_table('annotation.labels')
with open('label_studio_export.json') as f:
    labels.insert([
        {'task_id': str(t['id']), 'frame_url': t['data']['image'], 'annotation': t, 'reviewed': False}
        for t in json.load(f)
    ])
```

### Label Studio

```python
from label_studio_sdk import Client

ls = Client(url='http://localhost:8080', api_key=API_KEY)
label_config = '''
<View>
  <Image name="image" value="$image"/>
  <RectangleLabels name="label" toName="image">
    <Label value="Person"/>
  </RectangleLabels>
</View>
'''
project = ls.start_project(title='Video frames', label_config=label_config)
project.import_tasks([{'image': url} for url in frame_urls])
# Annotators and reviewers work in the Label Studio UI.
# Export the tasks from the Label Studio UI (Project > Export > JSON) to label_studio_export.json.
```

## When to choose Pixeltable

- **After the labels exist**: Frames, pre-detections, embedding indexes, and training export. Incremental recompute when a new export lands.
- **You already have a labeling tool**: Keep it. Pixeltable is the system of record downstream, not a second labeling UI.

## When to choose Label Studio

- **Humans have to agree on boxes**: Taxonomies, reviewer workflows, custom interfaces. Pixeltable will not do this.
- **ML-assisted labeling in that UI**: Pre-annotation backends and active learning inside Label Studio. Send model output in; do not expect Pixeltable to host the annotators.

## Making the right choice

### Deprecated: Pixeltable's Label Studio integration

- Deprecated: Pixeltable's Label Studio integration is deprecated. Pixeltable v0.6.7 removed external stores and Label Studio (PR #1436). pxt.io.create_label_studio_project and table.sync() are not in current Pixeltable.
- Create the project with the Label Studio SDK, export tasks, and insert the JSON into a Pixeltable Json column.
- docs.pixeltable.com may still show the old howto; do not copy it.
- There is no pixeltable[labelstudio] extra. Export JSON. Insert Json.

## FAQ

### Is Pixeltable's Label Studio integration still supported?

No. It is deprecated. Pixeltable v0.6.7 removed pxt.io.create_label_studio_project and table.sync() (PR #1436). Export JSON from Label Studio and insert it into a Json column.

### Does Pixeltable replace Label Studio?

No. Label Studio is human annotation and QA. Pixeltable stores media and runs the pipeline those labels feed.

### How do I connect them now?

Create the Label Studio project with its SDK and XML config. Export tasks. Insert into a Pixeltable table with a Json column. Older blogs that call pxt.io.sync_label_studio_project are wrong: that symbol never shipped.

### Should I wait for the integration to come back?

Do not block a workflow on it. Export/import is the supported join on current Pixeltable.

