Skip to main content

🦞 TouchLabel AI

The World's First Sensor-Agnostic Tactile Data Annotation Toolkit

Load any tactile sensor → Annotate visually → Export a unified schema

PyPI Python License Downloads GitHub Stars 中文文档

GelSight · DIGIT · PaXini · Daimon — one tool, one format, all sensors

🚀 Quick Start · 📡 Sensors · 🤝 Contributing


⚠️ v0.17.0 Breaking Change — Schema V2 Only. The legacy 22-dim tlabel_v2 format has been removed. All data now uses the 14-dim Schema V2 with Compliance Levels (L1-L4). See MIGRATION.md for upgrade instructions.


Tactile data shouldn't be locked inside any single company's format. Just as RGB images don't belong to any camera manufacturer, tactile data deserves a unified "Unicode". That's what TLabel does — defining a universal language for tactile data, and giving it to everyone.


🚀 Quick Start

pip install tlabel
import tlabel

# Load data from any sensor — auto-detected
data = tlabel.load("path/to/your/data")

# Or try built-in demo (30 seconds)
data = tlabel.demo("gelsight")

# Review in Jupyter — interactive annotation panel
data.review()

# Export to unified format
data.export("output.json")      # JSON (tlabel_v2 schema)
data.export("output.csv")       # CSV
data.export_ftp1("out.zarr")    # FTP-1 Zarr (foundation model ready)

CLI Tools

tlabel version               # Check version
tlabel list                  # List all registered adapters
tlabel info gelsight         # Adapter details & capabilities
tlabel validate your_data.json  # Validate tlabel_v2 schema compliance

🎯 What Does TLabel Do?

Problem: Every tactile sensor outputs different data formats. Switch sensors → rewrite code.

Solution: TLabel defines a unified 22-dimension feature space (tlabel_v2) and provides adapters that translate each sensor's native format into it.

GelSight .pkl ──┐                    ┌── JSON (tlabel_v2)
PaXini .h5 ─────┤   TLabel Adapter   ├── CSV
Daimon .parquet─┤   ──────────────►  ├── FTP-1 Zarr
VTouch .h5 ─────┤                    ├── LeRobot
Any format ─────┘                    └── ROS2 (stub)

Core Capabilities

Feature Description
🔌 9 Built-in Adapters 7 dataset (file loading) + 2 real-time (SDK/USB) — open for community extensions
🏗️ Open Platform DataAdapterBase for datasets + SensorAdapterBase for live sensors — anyone can contribute
🛠️ CLI Validation tlabel validate checks your data against the 22-dim schema
🤖 AI Pre-Annotation PredictEngine auto-labels contact, slip, and manipulation phases
📈 Data Augmentation 5 methods (time_warp, noise, crop, scale, dropout), pure numpy, zero extra deps
📤 Multi-Format Export JSON, CSV, FTP-1 Zarr, LeRobot, RLDS, ROS2
🌐 Bilingual Panel Interactive Jupyter annotation panel (中/EN)

API at a Glance

# Loading
data = tlabel.load(path)                     # Auto-detect format
data = tlabel.load(path, format="paxini")    # Force adapter

# Patching & Annotation
frame = data[0]
frame.patch("contact", 0)                    # Cascade rules auto-apply
data.batch_patch(10, 50, "slip_event", 1)   # Range patch

# AI Pre-Annotation
from tlabel.predict import PredictEngine
engine = PredictEngine()
engine.fit(data)                             # Learn from partial labels
results = engine.predict(data)
engine.apply(data, results, min_confidence=0.7)

# Augmentation
augmented = tlabel.augment(data, methods=["time_warp", "noise_inject"], seed=42)

📖 Full API Referencedocs/API.md · 22-Dim Schemadocs/annotation-spec.md


📡 Supported Adapters

TLabel provides two types of adapters — loading existing data, or connecting live hardware.

Dataset Adapters — load existing tactile data

Base class: DataAdapterBase · Input: file paths · Use case: research on public datasets, historical data processing

Sensor Type File Format Dims Status
GelSight Mini / DIGIT Vision-based .pkl 22 ✅ Stable
Daimon DM-TacClaw Multimodal .parquet / dir 22 ✅ Stable
PaXini PXCap Force array .h5 / .hdf5 20 ✅ Stable
UniVTAC Vision-based .hdf5 22 ✅ Stable
TacQuad (AnyTouch) Multi-sensor directory 22 ✅ Stable
VTouch Vision-based .h5 22 ✅ Stable
YCB-Slide Vision-based .npy / dir 22 ✅ Stable

Real-time Sensor Adapters — connect live hardware

Base class: SensorAdapterBase · Input: SDK / USB / stream · Use case: lab robots, production lines, real-time annotation

Sensor Type Connection Dims Status
PaXini GEN3 Force array SDK (live stream) 18 🆕 New
Daimon DM-Tac Vision-based USB / .avi / .bag 22 🆕 Skeleton

Which adapter should I build?

  • I have recorded data files → inherit DataAdapterBase, implement file parsing
  • I have a physical sensor → inherit SensorAdapterBase, implement SDK/stream connection
  • Both share the same export pipeline — once registered, tlabel.load() works automatically

Vision sensors → full 22 dims. Force-only sensors (PaXini) → 20 dims. No errors, no surprises — just graceful degradation.

# Per-sensor dependencies
pip install tlabel[gelsight]   # opencv-python
pip install tlabel[paxini]     # h5py
pip install tlabel[daimon]     # pyarrow + opencv-python
pip install tlabel[all]        # Everything

🆕 What's New

v0.16.0 — Open Platform Architecture

TLabel is now an open, extensible platform:

  • 🏗️ Dual-base architecture (DataAdapterBase / SensorAdapterBase)
  • 🔌 External adapter registration via entry_points — third-party packages auto-discovered
  • 🛠️ CLI tools: tlabel validate / list / info / version
  • 📦 Community contribution kit: templates + PR templates + CONTRIBUTING.md

📖 Full changelogCHANGELOG_current.md


🤝 Contributing

TLabel is an open platform — anyone can extend it with new sensor support.

Way Effort Impact
Submit a PR — use contrib/adapter-template/, inherit from DataAdapterBase or SensorAdapterBase ~30 min Your sensor works with the whole ecosystem
Ship an independent package — use tlabel entry_points for auto-discovery ~1 hour No PR needed, fully independent
Other — bug fixes, docs, tests, UI improvements varies Always welcome
Current Ecosystem Count
Built-in adapters 9
Community adapters 0 (your name here?)

📖 Get startedCONTRIBUTING.md · Adapter Templatecontrib/adapter-template/


🏆 Benchmark

TLabel-Bench — The first cross-sensor unified tactile annotation benchmark. Same objects, different sensors, one format.


📝 Citing TLabel

@software{tlabel2026,
  title = {TLabel: A Sensor-Agnostic Tactile Data Annotation Toolkit},
  author = {NiuZhu Tech},
  year = {2026},
  url = {https://github.com/liesliy/tlabel}
}

📄 License

MIT © NiuZhu Tech


If TLabel saved you from manually labeling tactile data, a ⭐ would make our day!

⭐ Star on GitHub · 📦 PyPI · 🏆 Benchmark · 💬 Discord


🤝 Need Help with Tactile Data?

We provide professional tactile data annotation and pipeline services:

  • Custom sensor adapter development — integrate your sensor with TLabel in days
  • Data pipeline consulting — annotation workflows for grasping, manipulation, slip detection
  • Embodied AI tooling — end-to-end data solutions from raw sensor to model-ready datasets

Contact: WeChat wxid_olqx5z6trmtn21 · Email luoxi@touchlabelai.cn

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tlabel-0.19.0.tar.gz (322.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tlabel-0.19.0-py3-none-any.whl (335.2 kB view details)

Uploaded Python 3

File details

Details for the file tlabel-0.19.0.tar.gz.

File metadata

  • Download URL: tlabel-0.19.0.tar.gz
  • Upload date:
  • Size: 322.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for tlabel-0.19.0.tar.gz
Algorithm Hash digest
SHA256 95bbbbe4ae5fe3e8a2b26e2e4c79f56887a5ebbea51b1e5e4a8c9df833da2096
MD5 8d1206c678699ae71e3c7e6a0d564902
BLAKE2b-256 c1cd8bfd9e3112ed305206a9ffd78e47f12016f9764b17b6abeba4373421fd5b

See more details on using hashes here.

File details

Details for the file tlabel-0.19.0-py3-none-any.whl.

File metadata

  • Download URL: tlabel-0.19.0-py3-none-any.whl
  • Upload date:
  • Size: 335.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for tlabel-0.19.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e34a886316e57667e2b9a71d0cd158bf2c9c11ed5103219b042f3f5b32d52d44
MD5 2542c4b51f9032748d1f35408b03a1e4
BLAKE2b-256 f209eb6b261b7c03c4f8e2bfee9db9e98e61ecff2c9320c6ece9491c69648d1d

See more details on using hashes here.

Release history Release notifications | RSS feed

0.23.1

2 files

0.23.0

2 files

0.22.4

2 files

0.22.3

2 files

0.22.2

2 files

0.22.1

2 files

0.22.0

2 files

0.21.1

1 file

0.21.0

2 files

0.20.1

2 files

0.20.0

2 files

This release

0.19.0 This release

2 files

0.18.2

2 files

0.18.1

2 files

0.18.0

2 files

0.17.3

2 files

0.17.2

2 files

0.17.1

2 files

0.17.0

2 files

0.16.0

2 files

0.15.0

2 files

0.14.0

2 files

0.13.1

2 files

0.13.0

2 files

0.12.4

2 files

0.12.3

2 files

0.12.2

2 files

0.12.1

2 files

0.12.0

2 files

0.11.2

2 files

0.11.1

2 files

0.11.0

2 files

0.10.3

2 files

0.10.2

2 files

0.10.1

2 files

0.10.0

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page