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.17.0.tar.gz (291.0 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.17.0-py3-none-any.whl (313.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for tlabel-0.17.0.tar.gz
Algorithm Hash digest
SHA256 1f564cd0a57d938c0972b0ce07d19def99fd0a6b6a4ecbce1b0fe25b75cd104d
MD5 7a1e9a27f7d03b40c67813a193f3de71
BLAKE2b-256 fe7ffd080f12714526f9305c73f20b98803b1eb9fa3dcc71fc88bc3af46bb32d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tlabel-0.17.0-py3-none-any.whl
  • Upload date:
  • Size: 313.5 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.17.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ca40fb2600cf6e0f421e3b4310d4ceca48efd9254db1035399d1b0d742154c7f
MD5 58b2ba2b5a58c19bb2c1e04a4c5ff05d
BLAKE2b-256 3472266a2e8b4d66aa73d8ed0a97dd00d19ac0e17cd4ab53e446c48a786e3d59

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

0.19.0

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

This release

0.17.0 This release

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