wurld

Posed sensor video in one playable file — RGB, per-frame camera pose, intrinsics, timestamps and bit-exact metric depth, in a WebM an ordinary video player treats as plain video.

Open the viewer → Record in the browser Source & spec

Why

Everything that produces posed RGBD video invents its own directory layout — COLMAP dirs, transforms.json, TUM text files, per-app zips — and everything that consumes it maintains a zoo of parsers. wurld replaces the zoo with one container whose conventions are fixed rather than declared: RDF camera axes, camera-to-world, wxyz quaternions, metres, seconds. Converters normalise on write, so consumers never branch on axis flags.

Install

pip install wurld          # reader/writer, converters, CLI
npm install wurld-core     # JavaScript, byte-identical records

What the viewer is doing

The demo above decodes in the browser with WebCodecs — no server, no upload, no WASM on Chrome. It reprojects each frame's depth into a point cloud using the file's own intrinsics and pose, draws the camera trajectory and frustum, and plays the same file in a plain <video> element alongside. Drop any .wurld.webm onto the page to inspect your own.

Large files are read over HTTP range requests: the viewer fetches the header, reads the Cues index, and pulls only the clusters it needs to draw the frame you scrubbed to.

Or use no tools of ours at all

The metadata sits in standard Matroska tags, so ffprobe prints it — cameras, conventions, signal semantics, and, on a file whose poses are in the JSON array, the poses too:

ffprobe -v error -show_entries format_tags=WURLD \
        -of default=nw=1:nk=1 scene.wurld.webm

EXTRACTING.md is the full cookbook: poses to CSV, intrinsics, RGB frames, and depth in metres with nothing but ffmpeg and arithmetic. It also covers the case this command does not reach: a long or live recording stores its poses in a binary tag that ffmpeg's Matroska demuxer drops, so frames comes back empty and a frames_binary descriptor says how many are really there. Including the triangle-fold and inverse-depth formulas, checked against the reference reader to 1.5 µm.

Sample

synthetic-orbit.wurld.webm — 120 frames, 640×480, analytic RGBD with an orbiting camera, generated by wurld demo. Synthetic on purpose: it is redistributable without anyone's dataset licence attached.