{"slug": "tlabel-convert-one-cli-to-bridge-9-tactile-dataset-formats", "title": "tlabel convert: One CLI to Bridge 9 Tactile Dataset Formats", "summary": "TLabel, an open-source project, has released a CLI and adapter architecture through v0.18.x that unifies nine tactile dataset formats and three real-time sensor interfaces into a single semantic schema. The tool defines a 14-dimension annotation schema and provides adapters for sensors like GelSight, PaXini, and Daimon, enabling conversion to training-ready formats such as LeRobot and Zarr. This addresses the data interoperability challenge in tactile robotics, which has seen increased investment in embodied AI.", "body_md": "How a single command can unify GelSight, PaXini, Daimon, ToucHD, and 5 other tactile sensor formats into training-ready data.\n\nIf you work in tactile robotics research, you've been here before:\n\nA collaborator sends you a dataset collected with a PaXini PXCap force array. Your pipeline expects GelSight .pkl files. Your colleague's LeRobot training code needs Zarr. Someone else is publishing results on a Daimon DM-TacClaw in .parquet format.\n\nThree sensors. Three formats. Three days of writing ad-hoc parsing scripts that you'll delete next week.\n\nTactile sensing is having a moment — multiple billion-dollar funding rounds in embodied AI have poured attention (and capital) into the field in 2026. But while hardware is advancing fast, data interoperability is still a mess. Every sensor vendor ships data in a proprietary format, and there's no common lingua franca for tactile manipulation datasets.\n\nTLabel is an open-source project that tackles exactly this problem. And with the maturation of its CLI and adapter architecture through v0.18.x, the workflow for converting between tactile dataset formats has gotten dramatically simpler.\n\n**What TLabel Actually Does**\n\nBefore diving into commands, let's set expectations. TLabel is a data pipeline standardization layer. It does not:\n\nInterface with hardware or collect data\n\nRun inference or train models\n\nReplace your training pipeline\n\nIt does:\n\nDefine a 14-dimension semantic annotation schema (covering contact, force, slip, texture, deformation, and more)\n\nProvide adapter implementations that translate sensor-specific formats into that schema\n\nExport annotated data into training-ready formats (LeRobot, FTP-1 Zarr, JSON, CSV)\n\nThink of it as the Unicode for tactile data — one standard schema, every sensor.\n\n**The Adapter Landscape**\n\nTLabel currently ships with 12 built-in adapters covering 9 dataset formats and 3 real-time sensor interfaces:\n\n**Dataset Adapters (Offline Data Loading)**\n\n<> — GelSight Mini / DIGIT, visuo-tactile, .pkl, L3\n\n<> — PaXini PXCap, force array, .h5, L2\n\n<> — Daimon DM-TacClaw, multimodal, .parquet, L3\n\n<> — ToucHD, visuo-tactile, .hdf5, L3\n\n<> — UniVTAC, visuo-tactile, .hdf5, L3\n\n<> — VTouch, visuo-tactile, .h5, L3\n\n<> — YCB-Slide, visuo-tactile, .npy, L3\n\n<> — TacQuad (AnyTouch), multi-sensor, directory, L3\n\n<> — TLabel native, meta format, .json, L1–L4\n\n**Real-Time Sensor Adapters**\n\n<> — PaXini GEN3, force array, SDK connection, L2\n\n<> — Daimon DM-Tac, visuo-tactile, USB / .avi, L3\n\n<> — PaXini PX6D, 6-axis force, placeholder, L2\n\nThat covers the majority of tactile sensors used in manipulation research today.\n\n**Getting Started**\n\nInstall is straightforward:\n\n```\npip install tlabel\n\n# Or with sensor-specific extras:\npip install tlabel[gelsight]     # GelSight / DIGIT (.pkl)\npip install tlabel[paxini]       # PaXini PXCap (.h5)\npip install tlabel[daimon]       # Daimon DM-TacClaw (.parquet)\npip install tlabel[ftp1]         # FTP-1 export (zarr)\npip install tlabel[all]          # Everything\n```\n\n**Exploring Adapters from the CLI**\n\nOnce installed, you can inspect what's available without writing any code:\n\n```\n# List all registered adapters\ntlabel list\n```\n\nThis prints all dataset and real-time adapters with their type, native format, and compliance level. It's the first command I run when working with a new dataset.\n\nFor details on a specific adapter:\n\n```\ntlabel info gelsight\n```\n\nThis shows the adapter's capability declaration — which of the 14 semantic dimensions it can annotate, its compliance level, and any format-specific notes. For example, GelSight outputs force_vector (L3) but not temperature (L4), while a simple resistive sensor might only declare L1 fields like contact and slip_event.\n\nThis capability declaration system is one of TLabel's key design decisions. Rather than forcing every sensor to produce all 14 dimensions (which would mean fabricating data it can't actually measure), each adapter honestly declares what it can and cannot provide.\n\n**Validating Your Data**\n\nBefore converting, it's worth checking that your data passes schema validation:\n\n```\ntlabel validate data.json\n```\n\nThis runs a compliance check against the 14-dimension Schema V2 and reports any issues. Catching format problems early saves debugging time downstream.\n\n**Converting Between Formats**\n\nHere's where things get practical. TLabel provides two paths for format conversion: CLI for quick checks and the Python API for full control.\n\n**Quick Conversion via CLI**\n\nFor simple cases — say you have a single GelSight .pkl file and want a JSON summary:\n\n```\ntlabel export --input grasp_data.pkl --format json --output annotations.json\n```\n\nThis reads the GelSight data through its adapter, applies the Schema V2 annotation, and writes a clean JSON file with all 14 semantic dimensions (at the appropriate compliance level for the sensor).\n\n**Full Conversion Pipeline via Python**\n\nFor the heavy lifting — converting entire datasets into training-ready formats — the Python API gives you the most control:\n\n``` python\nimport tlabel\nfrom tlabel.converters import tlabel_to_lerobot\n\n# Load data from any supported sensor\ndata = tlabel.load(\"path/to/paxini_data.h5\")\n\n# Inspect what you got\nprint(data.describe())\n# -> {'num_frames': 500, 'sensor': 'paxini', 'compliance_level': 'L2', ...}\n\n# Export to JSON/CSV for analysis\ndata.export(\"output.json\")\n\n# Export to FTP-1 Zarr for foundation model training\ndata.export_ftp1(\"output.zarr\")\n\n# Convert to LeRobot episode format\ntlabel_to_lerobot(\"annotations.json\", \"lerobot_episode/\")\n```\n\nHere's a concrete example that walks through a realistic workflow — loading PaXini force array data, validating annotations, and exporting to both LeRobot and FTP-1 formats:\n\n``` python\nimport tlabel\nfrom tlabel.converters import tlabel_to_lerobot\n\n# Step 1: Load PaXini PXCap data\ndata = tlabel.load(\"experiment_01.h5\")\n\n# Step 2: Validate schema compliance\ndata.validate_annotations()\n# Reports any missing or malformed fields\n\n# Step 3: Auto-annotate events from signal patterns\ndata.annotate_events_auto()\n# Detects: contact_onset, contact_loss, slip events, force spikes\n\n# Step 4: Export\ndata.export(\"experiment_01.json\")           # Analysis\ndata.export_ftp1(\"experiment_01.zarr\")      # Foundation model training\ntlabel_to_lerobot(\"experiment_01.json\",     # LeRobot pipeline\n                   \"lerobot_episode/\")\n```\n\n**Batch Processing Multiple Files**\n\nWhen you're dealing with an entire experiment directory (which is the typical case — real manipulation datasets have hundreds of episodes), you can batch-load and convert:\n\n``` python\nimport glob\nimport tlabel\n\nfiles = glob.glob(\"raw_data/*.h5\")\n\nfor f in files:\n    data = tlabel.load(f)\n    data.validate_annotations()\n    data.export(f\"annotated/{data.sensor}_{data.num_frames}f.json\")\n    print(f\"Converted {f} -> {data.sensor} (L{data.compliance_level})\")\n```\n\n**Understanding the Architecture**\n\nThe adapter system sits in a three-layer architecture:\n\n```\n┌─────────────────────────────────────────────────┐\n│ Layer 1: Schema                                 │\n│ 14 semantic dimensions + Compliance Level L1-L4 │\n├─────────────────────────────────────────────────┤\n│ Layer 2: Adapters                               │\n│ DataAdapterBase │ SensorAdapterBase             │\n├─────────────────────────────────────────────────┤\n│ Layer 3: Downstream                             │\n│ Feature derivation · Export · Augmentation      │\n│ FTP-1 · LeRobot · RLDS · ROS2                  │\n└─────────────────────────────────────────────────┘\n```\n\nLayer 1 is the schema itself — 14 semantic dimensions covering spatial perception (contact, centroid, region), mechanics (force magnitude, force vector, torque), dynamics (slip event, slip velocity, manipulation phase), surface properties (texture class), and meta-perceptions (deformation, temperature, confidence, compliance level).\n\nLayer 2 is where adapters live. There are two base classes:\n\nDataAdapterBase — for offline dataset files (sublcass this to add support for a new sensor format, takes ~30 minutes)\n\nSensorAdapterBase — for real-time hardware connections (streaming data from a live sensor)\n\nBoth produce output conforming to the same Schema V2, which means Layer 3 downstream tools work identically regardless of which sensor the data came from.\n\nLayer 3 handles everything after annotation: feature derivation, data augmentation, and export into training frameworks. This is where the LeRobot converter, FTP-1 Zarr exporter, and RLDS bridge live.\n\n**The Compliance Level System**\n\nOne concept worth explaining in more detail: Compliance Levels (L1–L4). This is TLabel's answer to the question \"what if my sensor can't measure temperature or 6-axis force?\"\n\nL1 — Basic Tactile: contact, centroid, slip, confidence. Examples: Single-point resistive, proximity sensors\n\nL2 — Force-Aware: L1 + force_magnitude. Examples: PaXini, YCB-Slide, GelSight\n\nL3 — Full-Vector: L2 + force_vector. Examples: ToucHD, calibrated DM-TAC\n\nL4 — Rich-Semantic: L3 + all optional fields. Examples: BioTac, next-gen multimodal sensors\n\nThe key insight: a PaXini at L2 and a ToucHD at L3 both produce valid TLabel output. They just populate different subsets of the 14 dimensions. Downstream code can check compliance_level to decide what it can and cannot use, rather than writing sensor-specific branches.\n\nThis is what makes cross-sensor comparison possible. You can train a model on GelSight data (L3) and evaluate it on PaXini data (L2), knowing exactly which fields are comparable and which aren't.\n\n**What About My Sensor?**\n\nTLabel is designed for extensibility. If your sensor isn't supported yet, adding an adapter takes about 30 minutes:\n\nFork the adapter template from contrib/adapter-template/\n\nSubclass DataAdapterBase (for datasets) or SensorAdapterBase (for hardware)\n\nImplement the required methods and declare your compliance level\n\nSubmit a PR or publish as a standalone package\n\nThe project also supports register_external_adapter() and entry_points auto-discovery, so third-party adapters can be published independently.\n\n**How This Fits Into the Embodied AI Pipeline**\n\nThe broader context matters. Foundation models for robotics — like those being built on top of LeRobot, Open X-Embodiment, and similar frameworks — need diverse, standardized training data. But tactile data has been a bottleneck:\n\nCollection is sensor-specific (hardware-dependent)\n\nAnnotation has been ad-hoc (no standard schema)\n\nTraining expects uniform input formats\n\nTLabel deliberately addresses step 2 and 3 only. It's a standardization layer that sits between your raw sensor data and your training pipeline. By providing a common schema with honest capability declarations, it enables:\n\nCross-sensor training: Mix data from different sensors in the same training batch\n\nCapability-aware models: Train models that know what information is available at each compliance level\n\nReproducible research: Compare results across labs using different hardware\n\nThe project is also actively contributing tactile data format support upstream to LeRobot via PR #4032, which signals growing recognition that tactile data standards are needed in the broader robotics ecosystem.\n\n**Quick Reference**\n\nSee all supported adapters → tlabel list\n\nGet adapter details → tlabel info gelsight\n\nValidate a data file → tlabel validate data.json\n\nExport to JSON → data.export(\"out.json\")\n\nExport to FTP-1 Zarr → data.export_ftp1(\"out.zarr\")\n\nConvert to LeRobot format → tlabel_to_lerobot(src, dst)\n\nLoad any sensor data → tlabel.load(\"file\")\n\nTry a demo (no files needed) → tlabel.demo(\"gelsight\")\n\n**Wrapping Up**\n\nTactile data interoperability isn't glamorous work — it's infrastructure. But it's the kind of infrastructure that determines whether the field can scale beyond lab-specific pipelines to shared, reproducible, cross-sensor research.\n\nTLabel's adapter architecture and CLI tools won't solve every data problem in tactile robotics. But they provide a concrete, working answer to the question: \"How do I get data from sensor X into format Y without writing a custom parser?\"\n\nThat question used to take a weekend. Now it takes one line.\n\n**Links:**\n\nGitHub: [https://github.com/liesliy/tlabel](https://github.com/liesliy/tlabel)\n\nPyPI: [https://pypi.org/project/tlabel/](https://pypi.org/project/tlabel/)\n\nTLabel Paper: PDF on GitHub\n\nSchema V2 Spec: docs/tlabel-format.md\n\nAdapter Template: contrib/adapter-template\n\nContributing Guide: CONTRIBUTING.md\n\nLeRobot PR #4032: huggingface/lerobot#4032\n\nPrevious Dev.to post: TLabel: Unifying Tactile Data Annotation for Robotics\n\nOpen X-Embodiment: robotics-transformer-x.github.io\n\nOpenTouch: opentouch.ai\n\nTL;DR — TLabel is the Unicode for tactile data: one standard schema, every sensor. Install with pip install tlabel, run tlabel list to see what's supported.", "url": "https://wpnews.pro/news/tlabel-convert-one-cli-to-bridge-9-tactile-dataset-formats", "canonical_source": "https://dev.to/liesliy/tlabel-convert-one-cli-to-bridge-9-tactile-dataset-formats-400k", "published_at": "2026-08-11 04:08:43+00:00", "updated_at": "2026-08-11 04:45:38.440064+00:00", "lang": "en", "topics": ["developer-tools", "robotics", "artificial-intelligence"], "entities": ["TLabel", "GelSight", "PaXini", "Daimon", "ToucHD", "UniVTAC", "LeRobot", "FTP-1"], "alternates": {"html": "https://wpnews.pro/news/tlabel-convert-one-cli-to-bridge-9-tactile-dataset-formats", "markdown": "https://wpnews.pro/news/tlabel-convert-one-cli-to-bridge-9-tactile-dataset-formats.md", "text": "https://wpnews.pro/news/tlabel-convert-one-cli-to-bridge-9-tactile-dataset-formats.txt", "jsonld": "https://wpnews.pro/news/tlabel-convert-one-cli-to-bridge-9-tactile-dataset-formats.jsonld"}}