{"id":51861537,"url":"https://github.com/lancedb/lancedb-robotics-lakehouse-external","last_synced_at":"2026-07-24T08:01:17.899Z","repository":{"id":370725277,"uuid":"1296530048","full_name":"lancedb/lancedb-robotics-lakehouse-external","owner":"lancedb","description":"Sanitized external mirror of lancedb-robotics-lakehouse — a reference implementation of a multi-modal lakehouse for physical AI","archived":false,"fork":false,"pushed_at":"2026-07-10T13:57:34.000Z","size":1804,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-10T15:13:56.705Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lancedb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-10T13:27:25.000Z","updated_at":"2026-07-10T13:59:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lancedb/lancedb-robotics-lakehouse-external","commit_stats":null,"previous_names":["lancedb/lancedb-robotics-lakehouse-external"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/lancedb/lancedb-robotics-lakehouse-external","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lancedb%2Flancedb-robotics-lakehouse-external","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lancedb%2Flancedb-robotics-lakehouse-external/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lancedb%2Flancedb-robotics-lakehouse-external/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lancedb%2Flancedb-robotics-lakehouse-external/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lancedb","download_url":"https://codeload.github.com/lancedb/lancedb-robotics-lakehouse-external/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lancedb%2Flancedb-robotics-lakehouse-external/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35832970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-24T02:00:07.870Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-24T08:01:16.851Z","updated_at":"2026-07-24T08:01:17.870Z","avatar_url":"https://github.com/lancedb.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LanceDB Robotics Lakehouse\n\n\u003e **Prototype / research project.** This repository is exploratory, not a\n\u003e supported production product. APIs, schemas, benchmarks, and conclusions are\n\u003e subject to change; use it to understand the architecture and trade-offs behind\n\u003e LanceDB-backed robotics data loops.\n\n**LanceDB is the episode-quality and evaluation-reproducibility layer for\nrobotics AI teams.** Keep your raw logs, labelers, training code, and experiment\ntrackers in place. Add one shared LanceDB-backed layer that turns scattered\nrobot data into validated episodes, searchable failure sets, reproducible\ntrain/eval snapshots, and traceable relabeling loops.\n\n```mermaid\nflowchart TB\n    SRC[\"Raw logs · fleet data · sim outputs\u003cbr/\u003eMCAP · ROS bags · LeRobot datasets · video · lidar · S3 / GCS / Azure / NAS\"]\n\n    subgraph LAKE[\"LanceDB robotics layer — episode quality + eval reproducibility\"]\n        direction TB\n\n        subgraph PREP[\"1 · Ingest, validate \u0026amp; align\"]\n            direction LR\n            ING[ingest] --\u003e VAL[\"quality gates\"] --\u003e ALN[\"aligned episodes\"]\n        end\n\n        subgraph ENRICH[\"2 · Search, curate \u0026amp; review\"]\n            direction LR\n            ENR[\"enrich\u003cbr/\u003ecaptions + embeddings\"] --\u003e SRCH[\"failure search\"] --\u003e CUR[\"curation + review queues\"]\n        end\n\n        subgraph TRAIN[\"3 · Snapshot, train \u0026amp; reproduce evals\"]\n            direction LR\n            SNAP[\"versioned snapshot\"] --\u003e TRN[\"train\u003cbr/\u003enative + aligned reads\"] --\u003e EVAL[\"evaluate + trace\"]\n        end\n\n        PREP --\u003e ENRICH --\u003e TRAIN\n    end\n\n    SRC --\u003e PREP\n    TRAIN --\u003e EXP[\"project at boundaries\u003cbr/\u003eMCAP · LeRobot · RLDS · WebDataset\"]\n    TRAIN --\u003e WB[\"writeback\u003cbr/\u003elabels · model outputs · feedback\"]\n    WB -. \"failures \u0026amp; predictions become new curation work\" .-\u003e ENRICH\n```\n\nRead it top to bottom: raw data enters, quality and alignment gates turn it into\ntrustworthy episode windows, those windows become versioned train/eval\nsnapshots, and the dashed edge is the point — evaluation and deployment feed\n**writeback** back into curation, so the pipeline is a **closed loop**, not a\none-way export.\n\n\u003e The package, import path, and CLI are all `lancedb-robotics` /\n\u003e `lancedb_robotics`. This repo (`lancedb-robotics-lakehouse`) is the design\n\u003e workspace and reference implementation.\n\n---\n\n## Who this is for\n\nYou train robot policies, world models, or AV stacks. Your hard question is not\njust \"where are the logs?\" It is \"which episodes are model-ready, why did this\nevaluation slice fail, and can I recreate the exact data that produced this\ncheckpoint?\"\n\nToday that answer usually lives across glue scripts: converters, quality checks,\na vector database, a metadata warehouse, label exports, replay tooling,\nexperiment trackers, and training shards — each maintained separately and\nre-synced by hand.\n\n`lancedb-robotics` collapses that loop into one versioned robotics data layer.\n**You don't need to know LanceDB to use it** — the rest of this README is the\ngentle introduction.\n\nIt's built for the people around that loop too: the **platform and data\nengineers** who operate ingestion, validation, indexing, and training delivery;\nthe **simulation and synthetic-data teams** who need generated scenes and sim\nfailures tied back to real source scenarios; and the **labeling and data-ops\nteams** whose review decisions should write back into the same substrate\nresearchers train from.\n\n## The problem: episode quality is the bottleneck\n\nRobot **capture formats are write-optimized.** MCAP, rosbag2, and HDF5 are\ntime-ordered, chunked, and built for sequential replay and bandwidth-limited edge\nrecording. That's exactly right for logging.\n\n**Research iteration is episode-optimized.** A researcher wants the opposite:\nrandom, shuffled, high-throughput access to aligned windows across the *entire*\ncorpus — plus the ability to ask questions before loading a single byte:\n\"every failed pick episode with wrist-camera occlusion,\" \"all eval regressions\nfor this checkpoint,\" or \"the exact snapshot that trained this model.\"\n\nPoint a dataloader straight at MCAP and you pay per-chunk decompression to seek,\nopen thousands of files for a global shuffle, and scan everything to filter. So\nnobody trains on raw logs — everyone first converts to *something* training\nfriendly. **That in-between layer — versioned, randomly accessible, indexable\nmultimodal storage with episode semantics, quality state, and eval lineage — has\nno incumbent, and every serious team hand-rolls it.** That's the slot this\nproject fills.\n\n## Why LanceDB? (a 60-second primer)\n\n[**Lance**](https://github.com/lancedb/lance) is an open-source columnar data\nformat — think of it as a successor to Parquet, but designed for AI and\nmultimodal data. **LanceDB** is the database layer on top: vector search,\nfull-text search, and versioning over Lance tables. Four properties make it the\nright fit for robot data:\n\n| Robot-data pain | What Lance/LanceDB gives you |\n| --- | --- |\n| Dataloaders starved by sequential formats | **Fast random access** (point lookups by row id; ~1.5M IOPS on the format) — no row-group tax, no opening thousands of files to shuffle. |\n| Video / lidar / point clouds stored as external pointers | **Blobs are first-class columns.** Large binaries live *in* the table and stream lazily by row — one source of truth, not a parallel blob store. |\n| A vector DB **and** a search index **and** a metadata warehouse, all re-synced | **One table holds it all** — embeddings, full text, scalar metadata, and payloads — so semantic + keyword + filter queries run in one place. |\n| Re-exporting the whole dataset to add a label or embedding | **Versioning + zero-copy schema evolution.** Enriching ten million frames with a new caption or embedding is a *column add*, not a rewrite. Every snapshot is reproducible. |\n\nThis isn't hypothetical. NVIDIA's internal data platform **SILA** (Cosmos 3, May\n2026) moved to a single Lance dataset as its source of truth — retiring a\nPostgres-table-per-pipeline + CDC architecture — and reported **~10× curation\nthroughput** and job startup cut from 30–60 min to ~5 min, with embeddings and\nmetadata co-located (no separate vector DB). The research project\n**stable-worldmodel** (Mila/NYU/Brown) ships Lance as its default data layer with\npublished Push-T throughput ~3.4–3.6× over HDF5/MP4 locally.\n\n## What `lancedb-robotics` adds on top\n\nLanceDB gives you the storage primitives. `lancedb-robotics` adds the\n**robotics-shaped domain layer** — the schemas, workflows, SDK, and CLI that make\nepisode quality and evaluation reproducibility first-class concepts:\n\n- **Canonical tables** for sources, runs, observations, events, scenarios,\n  episodes, aligned frames/ticks, snapshots, training/eval manifests, curation,\n  writeback, lineage, and feedback.\n- **Episode-quality gates** that validate required streams, decode capability,\n  timestamp monotonicity, alignment, quarantine state, and source evidence before\n  data reaches a training snapshot.\n- **Evaluation reproducibility** through pinned snapshots, train/eval manifests,\n  model-output writeback, and lineage from a failed metric back to the exact\n  source rows and labels.\n- **A phase-by-phase SDK and CLI** — ingest, validate, align, enrich, search,\n  curate, snapshot, train, evaluate, export, and feed results back.\n- **Native *and* aligned training reads** straight from pinned snapshots —\n  projection, filters, deterministic shuffle, temporal windows, and PyTorch\n  adapters, with boundary projections (LeRobot / RLDS / WebDataset) only when an\n  external tool needs that shape.\n- **LeRobot as a first-class ingest source, not just an export target** —\n  `ingest lerobot` maps an existing LeRobot dataset directory or HF Hub repo id\n  straight into canonical `episodes` and frame-grain `observations` (LeRobot is\n  already episode/frame-shaped, so this skips the MCAP/ROS decoder registry\n  entirely), with durable, resumable job tracking (checkpoints, claim/heartbeat\n  leases, watchdog recovery).\n- **Lineage that crosses machines** — content-addressed IDs so a bad checkpoint\n  traces back to its exact training slice and source log.\n- **Swappable implementations** behind stable interfaces: Lance/LanceDB OSS,\n  LanceDB Enterprise (`db://`), [Geneva](https://github.com/lancedb/geneva), or\n  external systems can all sit behind the same APIs.\n\nA guiding principle: **Lance is the index *and* the fast-access layer** —\nnot merely a pointer index. Payloads (including video and large binaries) live in\nLance as blob-encoded columns, enrichment is additive (`add_columns` +\nversioning, never in-place updates), and search/curation/training all read from\nLance. The raw log stays archival truth, not a runtime dependency.\n\n---\n\n## Quickstart\n\nRequires Python 3.11+ and [uv](https://docs.astral.sh/uv/).\n\n```bash\n# Install the package + dev tooling into .venv\nuv sync --extra dev\n\n# Confirm the CLI is wired up\nuv run lancedb-robotics --help\nuv run lancedb-robotics --version\n```\n\nPayload decoders and integrations are optional, lazily-imported extras — the base\ninstall decodes JSON and leaves anything else as `raw` (never a crash). Add the\nfamilies you need:\n\n```bash\nuv sync --extra ros1          # ROS 1 (didi, demo logs)\nuv sync --extra ros2          # ROS 2 / CDR\nuv sync --extra protobuf      # Protobuf / Foxglove (nuScenes)\nuv sync --extra flatbuffer    # FlatBuffers with embedded .bfbs schemas\nuv sync --extra cbor          # CBOR\nuv sync --extra msgpack       # MessagePack\nuv sync --extra rosbag        # ROS 1 .bag and ROS 2 sqlite .db3 containers\nuv sync --extra object-store  # open s3:// / gs:// / az:// lakes and raw logs\nuv sync --extra embeddings    # real sentence-transformers / CLIP providers\nuv sync --extra media         # image/array media materialization helpers\nuv sync --extra torch         # PyTorch previews, datasets, dataloaders\nuv sync --extra lerobot       # native LeRobot ingest + projection validation/loading\nuv sync --extra rlds          # RLDS / TF / TFDS / Reverb (Linux x86_64, Py 3.11/3.12)\nuv sync --extra webdataset    # WebDataset projection export/loading\n```\n\n\u003e **Notes on a few extras.** LeRobot and RLDS resolve in *separate* environments\n\u003e for now (LeRobot needs NumPy 2.x; the RLDS/Reverb/TensorFlow line needs NumPy\n\u003e \u003c2). The upstream `rlds` package is only verified on the Linux x86_64 / Python\n\u003e 3.11 lane — on macOS arm64 the native RLDS tests skip; run\n\u003e `scripts/verify-rlds-native-docker.sh` for the supported-platform check. The\n\u003e `embeddings` extra pins `sentence-transformers` to the text-capable 3.x line;\n\u003e if a model dependency is present but fails to import, the provider degrades to\n\u003e the deterministic `demo` provider with a warning on stderr rather than\n\u003e crashing, so search and enrich keep working. Pass `--strict` to make that\n\u003e degradation an error.\n\n### Semantic vs. deterministic search providers\n\n`scenarios enrich` can write embeddings with several providers. The default\n`demo` provider and the `hashed-text` provider are deterministic offline\nstand-ins: useful for repeatable tests and local pipeline smoke checks, but not\nfor semantic similarity. Use `sentence-transformers` or `clip` with\n`uv sync --extra embeddings` when vector or hybrid search should reflect real\nlanguage/image semantics.\n\nIf a requested model-backed provider is unavailable, enrich fails open by\nwarning on stderr and falling back to `demo` so local runs keep moving. Use\n`--strict` in reproducible pipelines to fail instead of silently writing fallback\nvectors:\n\n```bash\nuv run lancedb-robotics scenarios enrich --lake ./demo.robot.lance --provider clip --strict\n```\n\n### A vertical slice (CLI)\n\nThis is the whole loop end to end: **one raw MCAP log becomes validated episode\nwindows, searchable failure candidates, and a reproducible training snapshot —\nthen selected clips can project back out to MCAP** without losing the replay\npath. Each step writes canonical Lance rows and records a `transform_runs`\nlineage entry, so the pipeline is auditable.\n\n```bash\n# 1. Create a lake and look at a raw log without ingesting it\nuv run lancedb-robotics lake init --lake ./demo.robot.lance\nuv run lancedb-robotics inspect mcap tests/fixtures/sample.mcap --format text\n\n# 2. Ingest → validate → window → enrich\nuv run lancedb-robotics ingest mcap tests/fixtures/sample.mcap --lake ./demo.robot.lance\nuv run lancedb-robotics quality validate --lake ./demo.robot.lance --profile demo\nuv run lancedb-robotics scenarios create --lake ./demo.robot.lance --window 50ms\nuv run lancedb-robotics scenarios enrich --lake ./demo.robot.lance   # captions + embeddings\n\n# 3. Search → freeze a reproducible dataset → preview as a training set\nuv run lancedb-robotics search hybrid \"imu observations\" --lake ./demo.robot.lance\nuv run lancedb-robotics dataset snapshot create --lake ./demo.robot.lance --from-search last --name demo-v1\nuv run lancedb-robotics train preview torch --lake ./demo.robot.lance --snapshot demo-v1\n\n# 4. Export selected clips back to MCAP for replay/labeling tools\nuv run lancedb-robotics export mcap --lake ./demo.robot.lance --snapshot demo-v1 --out ./demo-clips\n```\n\nThe annotated walkthrough — which tables each step touches, the validation gate,\nhow hybrid search ranks, the snapshot manifest, and how this differs from\nMCAP/Foxglove/Rerun — is in\n[the baseline showcase narrative](docs/narratives/baseline-ingest-to-training-showcase.md).\nIt runs as a deterministic test:\n\n```bash\nuv run pytest tests/test_integration_showcase.py\n```\n\n### The same loop in Python\n\n```python\nfrom lancedb_robotics import Lake\nfrom lancedb_robotics.search import search_scenarios\n\nlake = Lake.open(\"./demo.robot.lance\")\n\n# Hybrid (full-text + vector) search over scenario windows\nhits = search_scenarios(lake, mode=\"hybrid\", query=\"imu observations\", limit=10)\n\n# A version-pinned, randomly-accessible, shuffled training view —\n# projection, filters, and temporal windows, no new shard layout\ndataset = lake.training.dataset(\n    \"demo-v1\",\n    columns=[\"scenario_id\", \"summary\", \"embedding\"],\n    filters={\"split\": \"train\"},\n    shuffle=True,\n    shuffle_seed=17,\n)\nfor sample in dataset:          # PyTorch dataloaders also available via lake.training\n    ...\n\n# Plan a boundary projection only when an external tool needs that shape\nprojection = lake.projections.plan(\"webdataset\", \"demo-v1\")\n\n# Trace a checkpoint back to its exact training slice and source log\ngraph = lake.lineage.trace_checkpoint(\"\u003cmodel_artifact_id\u003e\")\n```\n\nObject-store lakes work the same way — pass an `s3://` / `gs://` / `az://` /\n`db://` URI and credentials via `--storage-option` or an `--auth-ref`; raw bytes\nstay where they live (`runs.raw_uri`) while the lake materializes canonical rows,\ndecoded columns, embeddings, and indexes. Credentials are resolved in-memory and\nnever written to lake tables.\n\n---\n\n## What you get (feature breadth)\n\nThis separates what's **shipped** from what's planned — it doesn't pretend the\nwhole product vision is finished. Status legend: **✅ shipped · 🚧 evolving ·\n🔭 planned**.\n\n### Ingest \u0026 inspect\n- ✅ **MCAP ingest**, batched and streaming, with CRC validation and\n  quarantine-with-recoverable-prefix instead of failing a damaged log; inspect a\n  log without ingesting it.\n- ✅ **Payload decoders**: JSON (base), ROS 1, ROS 2 / CDR, Protobuf / Foxglove,\n  FlatBuffers, CBOR, MsgPack — each an optional extra; undecodable messages land\n  as `raw`. ([robustness \u0026 scale](docs/narratives/feature-set-mcap-robustness-and-scale.md),\n  [typed field extraction](docs/narratives/feature-set-typed-field-extraction.md))\n- ✅ **ROS bag ingest** (ROS 1 `.bag`, ROS 2 sqlite `.db3`); split, summary-less,\n  and unindexed MCAP, attachments, metadata records, and compressed chunks.\n- ✅ **LeRobot dataset ingest** — a local/object-store LeRobot dataset directory\n  or HF Hub repo id maps directly into canonical `episodes` and frame-grain\n  `observations` (no MCAP/ROS decoding needed); per-camera MP4 streams are\n  recorded as `videos` / `video_encodings` references without re-encoding or\n  copying bytes. Durable, resumable job tracking — checkpoints, claim/heartbeat\n  leases, stale-claim recovery — plus object-store source validation and\n  concurrent media inspection.\n- ✅ **Object-store \u0026 remote lakes** — `s3://` / `gs://` / `az://` / `db://` and\n  namespace-routed connections; credentials resolved at runtime, never persisted.\n- 🔭 Automotive ingest (ASAM MDF4); more capture formats via the adapter registry.\n\n### Quality, alignment \u0026 episodes\n- ✅ **Quality gates**: required-topic / min-count / monotonic-timestamp /\n  decode-capability / integrity checks, with quarantine and deliberate CLI exit\n  codes; **compact/maintain** that protects snapshot-pinned versions and indexes.\n- ✅ **Episodes as first-class objects** — boundaries from teleop markers,\n  queries, scenarios, explicit intervals, *or* mined from continuous fleet logs;\n  derivation lifecycle + lineage.\n  ([episode creation](docs/narratives/episode-creation-and-recreation.md))\n- ✅ **Sub-frame multi-rate alignment** into `aligned_frames` / `aligned_ticks`,\n  retaining source row references and error bounds. 🚧 sub-frame correctness\n  hardening.\n- ✅ **Codec-aware video** with GOP/keyframe metadata and lazy Lance blob frame\n  access. 🚧 deeper GOP/NVDEC-friendly encoding with a compression-vs-random-access\n  knob.\n\n### Enrich, search \u0026 curate\n- ✅ **Captions + embeddings** behind a pluggable provider contract — real\n  sentence-transformers / CLIP (`--extra embeddings`), degrading to a deterministic\n  demo provider when no model is present — plus typed field extraction and\n  additive enrichment columns.\n- ✅ **Search**: scalar, full-text, vector, and hybrid (RRF-fused) over persistent\n  FTS and ANN indexes, with transparent score components, all resolving to the\n  same versioned rows used for curation and training.\n- ✅ **Curation \u0026 mining workbench**: dedup, diversify, stratify, mine failures,\n  quality filters, saved views, membership decisions, review queues, branch/snapshot\n  compare, audit-as-of-time, and distribution-gap analysis. Scales via chunked\n  membership, predicate indexes, zero-copy row plans, and resumable distributed\n  semantic dedup with recall audits.\n- 🔭 Foundation-model-as-indexer for semantic coverage; deeper branch-train-compare.\n\n### Snapshot, train \u0026 evaluate\n- ✅ **Reproducible dataset snapshots** — freeze any search/selection into a\n  version-pinned slice.\n- ✅ **Lance-native \u0026 aligned training datasets** (`lake.training.dataset` /\n  `aligned_dataset`) — version-pinned random access, projection, scalar filters,\n  deterministic shuffle, worker/resume controls, temporal windows, late\n  media/payload hydration, PyTorch map/iterable/dataloader helpers, loader\n  reports, and sample-to-source lineage. No new shard layout.\n  ([narrative](docs/narratives/lance-native-training-datasets.md))\n- ✅ **Training \u0026 evaluation manifests** in canonical Lance tables (snapshot/table\n  version pins, code/runtime context, params, checkpoints, metrics, optional\n  MLflow/W\u0026B refs) — no external tracker required.\n- ✅ **Boundary projections** — export clips back to **MCAP**; open / plan /\n  materialize **LeRobot / RLDS / WebDataset** from pinned snapshots, with\n  projection manifests and materialization accounting instead of exported shards\n  becoming the source of truth.\n- 🔭 Replay-layout export (Foxglove layouts, Rerun `.rrd`); JAX loader.\n\n### Lineage \u0026 the closed loop\n- ✅ **Canonical lineage graph** (`lineage_artifacts` / `_executions` / `_edges`)\n  with `refresh_graph()`, upstream `trace(...)`, downstream `impact(...)`,\n  cross-machine content-addressed IDs, OpenLineage/DataHub export, source evidence\n  packs, invalidation, and rebuild plans.\n- ✅ **Writeback** of labels, model outputs, and feedback — failures and\n  predictions become new curation work, not sidecar files.\n- 🔭 Simulation / reconstruction lineage (NVIDIA Cosmos, Omniverse NuRec, OpenUSD,\n  Isaac); scenario standards (OpenLABEL / OpenSCENARIO / OpenDRIVE).\n\n### Reproducibility, benchmarks \u0026 coexistence\n- ✅ **Reproducible benchmark harness** (`bench run`) across Lance, Enterprise\n  Lance, dependency-light LeRobot-default, opt-in official LeRobot-native,\n  WebDataset, and Deep Lake paths — records dataset/table versions, hardware,\n  and throughput / random-access / curation / storage metrics.\n  ([narrative](docs/narratives/reproducible-benchmark-suite.md))\n- 🚧 **Enterprise remote training** (`db://` loading, cache/prewarm envelopes,\n  fallback status, loader reports) — live-endpoint hardening and larger-scale\n  orchestration are tracked follow-ups.\n- 🔭 Iceberg / Delta coexistence (tabular plane on Iceberg, multimodal on Lance,\n  one foundation); pluggable external search backends.\n\n## Adopt incrementally — no rip-and-replace\n\nEach rung stands alone and delivers value before you climb the next. Keep your\nbuckets, formats, labelers, trackers, and training code; add LanceDB where it\nremoves the most friction.\n\n| Step | You keep | `lancedb-robotics` adds | First value |\n| --- | --- | --- | --- |\n| **0. Register** | Existing buckets / raw formats | Source registration, checksums, schema/topic inventory | Searchable catalog without copying payloads |\n| **1. Index** | Existing MCAP / ROS / video | Canonical `runs` / `observations` / `events` + replay links | Find relevant runs and windows in minutes |\n| **2. Validate** | Existing ingest \u0026 QA | Quality rules, quarantine, alignment | Know which episodes are model-ready |\n| **3. Curate** | Existing notebooks | Hybrid search, behavior windows, saved selections | Build targeted datasets from one query surface |\n| **4. Snapshot/train/eval** | Existing model code | Versioned snapshots + PyTorch/LeRobot/RLDS reads + eval manifests | Reproduce the data behind a checkpoint or metric |\n| **5. Close loop** | Existing sim / label / W\u0026B / MLflow | Writeback of labels, model outputs, feedback | Failures become new curation or relabeling work |\n\n## What stays external\n\n`lancedb-robotics` is deliberately a **substrate, not an application.** Use it\nwhen the bottleneck is proving model-ready episode quality, reproducing the data\nbehind training/eval results, and turning failures into the next curation or\nlabeling set. Keep these systems where they're strong, and integrate only when\nyou choose to:\n\n- raw durability and lifecycle policy in S3/GCS/Azure/NAS;\n- fleet operations and incident management;\n- labeling UIs and review workforces;\n- simulators, reconstruction engines, and world-model stacks;\n- experiment trackers such as MLflow and W\u0026B;\n- dashboards and operator-facing applications (Foxglove, Roboto, Rerun).\n\nThe posture is partner-first: project from LanceDB into the boundary format a\ntool expects, then write useful outputs back into the lake with lineage.\n\n## Where this is going\n\nDepth before breadth: make the proven loop *real* and production-shaped, then\nextend reach. The near-term substrate core is **episode-native semantics**,\n**sub-frame alignment correctness as a tested guarantee**, **codec-aware\nGOP/NVDEC video**, and **Enterprise remote training at scale**. Longer-term bets\nbuild on top: foundation-model-as-indexer, deeper sim/reconstruction lineage, and\nIceberg/Delta coexistence. The full sequencing lives in the focused epics:\n\n- [Lance-native training datasets](docs/narratives/lance-native-training-datasets.md) — the default training path over pinned snapshots.\n- [Reproducible benchmark suite](docs/narratives/reproducible-benchmark-suite.md) — performance claims as structured reports.\n\n---\n\n## Learn more\n\n- **Manual** (concepts, journeys, reference) — [docs/manual/index.md](docs/manual/index.md)\n- **Feature \u0026 showcase narratives** — [baseline showcase](docs/narratives/baseline-ingest-to-training-showcase.md) · [Lance-native training](docs/narratives/lance-native-training-datasets.md) · [benchmark suite](docs/narratives/reproducible-benchmark-suite.md)\n\n## Development\n\n```bash\nuv sync --extra dev          # install package + all decoders + dev tools\nuv run pytest                # full test suite (deterministic fixtures + snapshots)\nuv run lancedb-robotics lake --help   # every command group exposes --help\nuv run ruff check .          # lint\n```\n\nRLDS native conformance runs in CI through the same Linux amd64 Docker verifier\nused for local unsupported hosts:\n\n```bash\nscripts/verify-rlds-native-docker.sh\n# inside the container, the required command is:\nLANCEDB_ROBOTICS_REQUIRE_RLDS_NATIVE=1 uv run --no-sync pytest -q -m rlds_native \\\n  tests/test_projections.py tests/test_dataset_export.py\n```\n\nCLI help output is snapshot-tested; after an intentional help-text change,\nregenerate with `UPDATE_SNAPSHOTS=1 uv run pytest` and commit the updated\n`tests/snapshots/` files. Showcase data and generated lake artifacts live under\n`examples/` (gitignored except its README).\n\n## Relationship to `mcap-lancedb`\n\n`mcap-lancedb` stays a focused MCAP/ROS log ingest/conversion engine.\n`lancedb-robotics` orchestrates domain workflows *across* MCAP, ROS bags,\nLeRobot datasets, object storage, labels, model outputs, simulation feedback,\ntraining snapshots, and boundary projections (LeRobot / RLDS / WebDataset /\nFoxglove / Rerun) — using `mcap-lancedb`-class engines as one ingest path among\nseveral, with LeRobot ingest as another first-class one.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flancedb%2Flancedb-robotics-lakehouse-external","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flancedb%2Flancedb-robotics-lakehouse-external","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flancedb%2Flancedb-robotics-lakehouse-external/lists"}