# Roomza Data Network — Labeled Sample Bundle

Bundle ID: `roomza-data-network-sample-2026-05`
Schema version: `1.0.0`
Bundle version: `2026.05.0`
Release date: 2026-05-22
License: `LicenseRef-Roomza-Sample-1.0` (evaluation only, no redistribution, no foundation-model training without commercial license)
Contact: data@roomza.com (data), robotics@roomza.com (engineering), licensing@roomza.com (commercial)

> **Note on numerics in this bundle.** All counts, dimensions, durations, vertex counts, IMU values, and other numeric fields in this sample bundle are *illustrative* — they show the shape of the schema, not statistics about the Roomza corpus. Corpus scale, per-room volumes, coverage figures, and pricing are disclosed only under a signed engagement.

## What This Bundle Is

A labeled subset of the Roomza Data Network, captured from real furnished hotel rooms. Three rooms are included end-to-end across every modality the licensed product ships. Mesh `.ply` and source RGB media are referenced by path but excluded from this sample download — request access for full media.

| Room ID | Archetype | Footprint (m) | Bed | Notable |
|---|---|---|---|---|
| `rm_corner_king_1108` | boutique king | 4.2 x 5.6 | king | corner room, two windows |
| `rm_petite_suite_905` | petite suite | 4.8 x 7.2 | king | living zone + work zone |
| `rm_ada_standard_212` | ADA standard | 3.8 x 5.2 | queen | mobility+communication combined ADA, roll-in shower |

## File Layout

For each `{room_id}`:

```
{room_id}.room.json            structured room record (dimensions, amenities, capture metadata)
{room_id}.scannet-style.json   3D instance aggregation + oriented bboxes (ScanNet-style)
{room_id}.coco.json            COCO 1.0 detection export for stills
{room_id}.video.json           Ego4D-style egocentric walkthrough manifest
{room_id}.imu.csv              Sidecar IMU stream (100Hz, 6-axis)
{room_id}.ply                  Mesh (referenced by path, not included in sample)
```

Top-level: `manifest.json` enumerates rooms and files with checksums.

## ID Format

All IDs are stable kebab/snake case with a typed prefix:

| Prefix | Meaning | Example |
|---|---|---|
| `rm_` | room | `rm_corner_king_1108` |
| `cap_st_` | capture, still image | `cap_st_1108_001_bedwall` |
| `cap_v_` | capture, video clip | `cap_v_1108_001` |
| `cap_sp_` | capture, spatial mesh | `cap_sp_1108_001` |
| `obj_` | instance (a discrete object) | `obj_1108_001` |
| `prop_` | property (an attribute or attached fixture point) | `prop_1108_thermostat_target` |
| `hp_` | hotel, anonymized | `hp_8f3a2c` |
| `op_` | operator | `op_087` |
| `rig_` | capture rig | `rig_iphone15pro_polycam_v3` |

`obj_` and `prop_` IDs cross-reference between `scannet-style.json` and `coco.json` inside the same room.

## Coordinate System and Units

- Right-handed
- `+Y` is up
- `-Z` is forward (camera default look direction)
- Origin: room center on the floor plane (so the floor is `y = 0`, and the room extends symmetrically around `x = 0`, `z = 0`)
- 3D linear units: **centimeters** (used in `.scannet-style.json`, in `room_bounds_cm`, all `centroid` / `axesLengths` / `point_cm`)
- Room record dimensions: **millimeters** (used in `.room.json` under `dimensions_mm`, `mattress_size_mm`, etc.)
- Angles: degrees
- 2D pixel coordinates: image-space, origin top-left, `x` right, `y` down, matching COCO 1.0

The unit split (mm for the room record, cm for the geometry payload) is intentional. Room records are authored from architectural plans which are mm-native; geometry payloads match the ScanNet convention which is cm-native.

## Class Set (`roomza-hotel-room-v1`)

30 classes, integer IDs 0..29, defined in `manifest.json` under `class_set.classes` and replicated in every `.scannet-style.json` under `label_to_id` and every `.coco.json` under `categories`. The order is the canonical class index. New classes are additive across schema versions and never reuse IDs.

```
0  bed                  10 blackout_curtain   20 mirror
1  headboard             11 door               21 minibar
2  nightstand            12 bathroom_door      22 in_room_safe
3  lamp                  13 wardrobe           23 coffee_maker
4  desk                  14 luggage_rack       24 kettle
5  chair                 15 side_table         25 ironing_board
6  tv                    16 art                26 robe_hook
7  tv_credenza           17 rug                27 towel_bar
8  window                18 thermostat         28 shower
9  curtain               19 outlet             29 toilet
```

## ScanNet-style JSON

Each room file contains a `segGroups` array. Each entry has:

- `id` — integer, unique within the scene
- `objectId` — global instance ID (`obj_{room}_{nnn}`)
- `label` — string class name
- `label_id` — integer class ID from the class set
- `obb` — oriented bounding box, ARKitScenes convention:
  - `centroid`: `[x, y, z]` in cm, room-local
  - `axesLengths`: `[len_along_axis_0, len_along_axis_1, len_along_axis_2]` in cm
  - `normalizedAxes`: row-major 3x3 rotation matrix flattened to 9 floats, columns are the unit axes
- `confidence` — annotator/labeler confidence in [0, 1]

A `properties` array lists attached fixtures (thermostats, outlets, mirrors-on-doors, in-wardrobe safes) that are not standalone objects. Each has a single `point_cm` or, when relevant, `axes_lengths_cm` if a small 3D extent matters.

A `label_stats` block summarizes instance counts per class for quick sanity checking.

## COCO Export

Standard COCO 1.0:

- `images[]` includes `id`, `file_name`, `width`, `height`, plus a Roomza-specific `camera_pose_cm` for downstream pose-conditioned consumption
- `annotations[]` includes a Roomza-specific `object_id` field cross-referencing the corresponding `obj_*` or `prop_*` in `scannet-style.json`. Where the same object is visible in multiple images, the same `object_id` is reused
- `categories[]` mirrors the class set
- `bbox` is `[x, y, width, height]` in pixels, no segmentation masks in the sample (full bundle ships masks)

All pixel coordinates are inside the stated image resolution (1920x1080).

## Video Manifest

`{room_id}.video.json` follows an Ego4D-style schema. Fields:

- `device.primary_camera` and `device.imu` describe the rig. The full dataset uses three rig types; this sample is from `rig_iphone15pro_polycam_v3`
- `video.frame_count = video.fps * video.duration_s` is invariant
- `intrinsics_1920x1080` is the calibrated pinhole + Brown-Conrady model. Use directly with OpenCV `cv::undistort` or `cv::initUndistortRectifyMap`
- `extrinsics_imu_to_camera` is the static rigid transform `T_camera_imu` as `translation_m` + `rotation_quat_wxyz`
- `trajectory.path` is a TUM-format text file: `timestamp tx ty tz qx qy qz qw`, room-local frame
- `imu_sidecar` points to the matching `.imu.csv`. Sample CSVs contain only a representative window — full clips have `rows_in_full_clip` entries

## IMU CSV

100Hz, 7 columns:

```
timestamp_ms, ax_ms2, ay_ms2, az_ms2, gx_dps, gy_dps, gz_dps
```

- `timestamp_ms` is clip-local milliseconds, monotonically increasing, 10ms cadence
- Accelerometer in m/s^2, gravity included
- Gyro in degrees/second
- IMU frame is the IMU chip's body frame; transform to camera via `extrinsics_imu_to_camera` in the video manifest

## How To Consume

Minimal Python loader sketch:

```python
import json, pathlib

bundle = pathlib.Path("public/data/sample")
manifest = json.loads((bundle / "manifest.json").read_text())

for room in manifest["rooms"]:
    rid = room["room_id"]
    scene = json.loads((bundle / room["files"]["scannet_style"]).read_text())
    coco  = json.loads((bundle / room["files"]["coco"]).read_text())
    video = json.loads((bundle / room["files"]["video"]).read_text())

    # cross-reference: every COCO annotation's object_id appears in scene.segGroups
    seg_ids = {sg["objectId"] for sg in scene["segGroups"]}
    prop_ids = {p["prop_id"] for p in scene.get("properties", [])}
    for ann in coco["annotations"]:
        assert ann["object_id"] in seg_ids or ann["object_id"] in prop_ids
```

## Versioning and Release Cadence

The bundle as a whole is versioned `bundle_version` (date-based, `YYYY.MM.N`). Schemas are independently versioned (`schema_version`). Schema breaking changes bump major; additive class set or field additions bump minor. Bundles refresh every 90 days; licensed customers receive deltas, not full re-downloads.

## Known Limitations of the Sample

- Three rooms only. Full licensed dataset: 412 captured, 187 labeled (as of 2026-05-22)
- Mesh `.ply` files are referenced but not shipped in the sample
- Source RGB stills and video referenced under `path:` fields are excluded; bbox/instance data is fully populated
- IMU CSVs contain a representative window (~200-250ms) rather than the full clip stream
- ADA bathroom (`rm_ada_standard_212`) is a separate scene `rm_ada_standard_212_bath` not included here

## Reporting Issues

If you find an inconsistency (e.g. an `object_id` in COCO that does not appear in the matching ScanNet-style file, an obb that violates `room_bounds_cm`, etc.) please file at robotics@roomza.com with the room ID, file name, and the offending ID. We treat sample-bundle inconsistencies as P1.
