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.
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.