Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data. Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli --locked - Online demo: https://rerun.io/viewer
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.29.0/rerun_cpp_sdk.zip
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-30
✨ Overview & highlights
📈 Plot any scalar
https://github.com/user-attachments/assets/cb10e8fd-7428-44ae-9f22-37fd721a357f
You can now plot any scalar value, even if it lacks Rerun semantics in time series views. For instance, this lets you plot any value in an MCAP file.
In addition to plotting scalars from MCAP files, it is now possible to visualize arbitrary scalar components that were logged using AnyValues or DynamicArchetype. The supported data types are:
Float32andFloat64Int8,Int16,Int32, andInt64UInt8,UInt16,UInt32, andUInt64Boolean- Any of the above nested inside of Arrow structs.
This also makes it possible to log and visualize multiple scalars to the same entity, which can drastically reduce the size of the resulting .rrd files.
Note that by default, and without blueprints, views are still only spawned for entities with Rerun semantics.
Time series views for entities with custom scalar components need to be spawned either:
- from the context menu of the streams,
- by adding a view from the blueprint panel,
- or by specifying a blueprint using the Python or Rust SDK.
The components that should be visualized can be selected via a new dropdown menu from the completely revised visualizer section in the selection panel.
<picture style="zoom: 0.5">
</picture>
To quickly navigate to the desired visualizer, each time series view now shows an overview of it's current visualizers.
<picture>
</picture>
For more details please refer to our documentation:
- Customize views
- Plot any scalar
- Component mappings outside of plotting, shown on the example of a colored point cloud
Thanks to a contribution from @vfilter, the series lines visualizer now also supports different interpolation modes to render staircase (or step) functions:
<picture>
</picture>
📡 On-demand streaming / larger-than-RAM
The Rerun Viewer now supports on-demand streaming, when connected to either the OSS server or Rerun Cloud.
https://github.com/user-attachments/assets/feb0028f-9492-484b-9b07-02280f111699
With on-demand streaming, whatever you are currently viewing will be downloaded first. This includes time-scrubbing to the end of a very long recording and quickly seeing what is there, or viewing only one camera feed of many.
Of course, your memory limit will be respected, and when you change your view or move the time cursor, the stale data will be evicted and the new data downloaded.
This also means that the web viewer can finally view recordings larger than the 4GiB limit enforced by Wasm32, as long as those recordings are served by a Rerun server.
It also means that Rerun Cloud users can view huge recordings, larger than what fits into RAM. The OSS server, however, still loads everything into RAM before serving it.
Usage:
> rerun server -d folder_with_large_recordings
Then either open the native viewer:
> rerun "rerun+http://127.0.0.1:51234"
Or the web viewer:
> rerun --serve-web "rerun+http://127.0.0.1:51234"
🦾 Support for many more MCAP message types
Like in the previous releases, we're continually expanding our support for common robotics data to make it easier for users to load their existing recordings.
This release adds support for Foxglove Protobuf schemas to our built-in MCAP data loader, in addition to the existing set of supported ROS 2 messages.
You can find an overview of all the messages that are currently supported here.
<picture>
</picture>
🎨 Extend existing views without forking
Previously, extending the Viewer with custom Rust code required creating an entirely new view type, even if you just wanted to add a single new visualization to the existing 3D view.
Now, you can register custom visualizers that plug directly into existing views, using fully custom archetypes & shaders in the process!
https://github.com/user-attachments/assets/df609f10-5515-49bc-86fd-6940cc25706f
In practice this works currently only well for 2D, 3D, and Map views but we'll keep working towards making the Viewer more and more modular & extensible!
For more details, see the custom visualizer example and the viewer rust extension docs for a general overview.
⚠️ Breaking changes
- Python:
segment_url_udfandsegment_url_with_timeref_udfhave been removed - Python:
segment_urlparameter names have been updated - CLI:
.rrdfiles are no longer tailed by default - SDK:
SeriesVisiblecomponent type has been removed
🧳 Migration guide: https://rerun.io/docs/reference/migration/migration-0-30
🔎 Details
🪵 Log API
- Fix performance regression with
--server-memory-limit 0cfc9a4c - Remove
SeriesVisiblecomponent in favor ofVisible1fca08a rerun rrd verifynow checks for the presence of RRD manifests 2000ba5- Footer-preserving RRD routing b56a145
🌊 C++ API
- Build C++ snippets into a single executable to avoid link time overhead b0a3876
🐍 Python API
- Basic Rust & Python blueprint API for component mappings c6d7409
- Ensure that
import rerun_sdk.reruncan be used 196c658 - Expose
on_duplicatein the Python SDK e909e20 - Small conversion improvement 383d37d
- Table entry APIs: provide a hint for single-row list data cb38397
- Add hint to prepend
api.on connection error a2ef1b3 - No longer return all columns when
filter_content()matches nothing 5997d6f - Remove deprecated UDFs b078e18
- Allow access to redap token from python sdk bc2ce79
- Expose "rerun_registration_status" to
DatasetEntry.manifest()881cee6 - Correctly handle lists in
AnyValues/DynamicArchetype.columnsd2b53da - Atomic (un)registrations 153acd1
- The
urlargument ofCatalogClient.create_table()is now a prefix 1eb6c79 - notebook: Re-export viewer event types 4c7d978
- Add
entity_paths(),archetypes(), andcomponent_types()methods toSchema015f1fc - Error when querying an unknown index 74a27df
- Rename
rerun-sdk[datafusion]torerun-sdk[dataplatform]and add pandas dependency b82cd06 - Add (and document) time range and selection support to
segment_urlb2e7eff
🦀 Rust API
- Basic Rust & Python blueprint API for component mappings c6d7409
- Move URDF joint transform computation to Rust 4e10aea
- Allow for custom visualizer with custom shader that integrates into existing view + example 3bf7120
- Improve feature-gating in Rust SDK (removes datafusion & co from the SDK deps) #12659 (thanks @paulzhng!)
🪳 Bug fixes
- Fix first-person camera having zero speed in zero-sized scenes #12535 (thanks @Shivam-Bhardwaj!)
- Fix heuristic for
target_framein 3D views for scenes with pinholes & named frames 3c678cc - Fix
sensor_msgs::PointCloud2MCAP parser for small pointclouds 6491b95 - Bug fix: allow copying selected text 4094a91
- Fix viewer error list jumping around a1c976c
- Fix potential video deadlock 3827b1d
- Fix drawing visualizations too often whenever there's multiple visualizer instructions of the same type on an entity 2f52aae
- Fix table config button symbol for light-mode 55747b5
- Lenses: Use nullability of input rather than the output d4398f5
- Ensure we report file loading errors on web febbffc
- Recover from failing to load RrdManifest ad214ca
- Fix transparent annotation classes not leading to transparent segmentation image 55578c3
- Make the "copy" button work for components in the time panel tree 8f788a9
- Fix deadlock when loading LeRobot datasets #12652
- Fix NV12/YUYV ROS2 images being incorrectly loaded as depth 04beb77
- Don't include redo-buffer when saving blueprints 85cc4f9
- Address issue where
.daewith multiple triangle groups is not rendered 83e96bf - Don't reset video player on keyframe boundrary for AV1 3bcd9b8
- Fix mono8/mono16 image channel classification #12660
- Set AR for wasm development build on macOS 7945601
- Fix interactions going through popups to the timepanel 1efc8c1
- Fix arrow key stepping on sequence timeline 1c6a71c
- Fix bad errors for unknown transform frames from overrides & view target frame 36ab981
🌁 Viewer improvements
- Extract
Selectorsfrom (nested)StructArrayfields 8319663 - Video player fetching missing chunks and less memory usage with big gops 2596f4e
- Stop offering to visualize static scalar data as time series (would previously emitting a visualization error) cc8c82c
- Source selector for visualizer components #12548
- Implement
Selectorwhen resolving component mappings 81879fd - New (simpler) heuristic for spawning time series views 53fc1fe
- Show at most 20 time series plots per entity, hide legend for more than 20 plots b103ed5
- Visualizers can now report warnings & multiple errors 67f8ef1
- Populate source mappings with nested struct fields in time series 7365386
- Add
ListArraysupport for field extraction intoSelectors6f769d6 - Adds visualizer list to time series view selection 127efa6
- Make labels in spatial view translucent 2c376b1
- Fix sometimes not showing correct values in visualizer ui a4839ce
- Show error when rerun_js viewer panics or fails to load 3f7a96d
- Visualizer list now shows color codes for time series data 2a4ef19
- Tweak
spawn_heuristicsandrecommended_visualizersfor time series views cebc107 - Fix color array display, allow editing color arrays in some cases 1e17b86
- Move Visualizer list above View properties in selection panel be57aca
- Visualizers can be deleted right from the visualizer list 0c57f9e
- Show the root transform when visualizing transform trees 84388a9
RecommendedVisualizernow contains all nestedFloat*Arrays27a7fbd- Different severities for video decoder errors 384c078
- Fix showing fallback values for empty required components in visualizer UI c8bf060
- Fix plot legend items disappearing when they have the same name 9c95786
- Visualizers can be added right from a view's selection 2e0f4cf
- Make columns reorderable by entity in the dataframe view e1e439e
- Allow loading arbitrary data loader files (mcaps, pngs, ...) via http urls a02a22b
- Drop cached videos once all referencing episodes are loaded #12653
- Add auto-scroll feature and time indicator to the dataframe view 514f1f3
- Add
InterpolationModecomponent for step function rendering #12657 (thanks @vfilter!) - Allow loading extensionless http urls via magic bytes detection daf7a35
- Fixes performance issue of too many time series plots a74b382
- Suppport
(U)Int16in time series plots 6bb58e4
🗄️ OSS server
- Test handling of schema conflict and make OSS server compliant c618910
- Fix table entry name leaking upon creation failure af77d4e
🚀 Performance improvements
- Improve memory budgeting ce48297
- Only initialize the transform cache for the active timeline a2f945b
- Remove larger-than-ram feature flag a4a8d56
- Fix: don't reload meshes after a GC 0259c43
- Do faster lineage check in release builds e9c0def
- Optimization: skip calculating size of time histogram 33a492d
- Change VideoStreamCache eviction policy: keep cache around until GC d517c3c
- Change default plot bounds to follow time cursor d2cf5d2
- Make handling of out of order video chunks much faster f050460
🧑🏫 Examples
📚 Docs
- Add a disambiguation from RViz to the README 90faabb
- Add snippet demonstrating conversion of custom mcap protobuf file to rrd ebd731c
- Adding snippet to convert mcap with send_column f2b3770
- Adding urdf import support to protobuf convert snippets 8be967d
- Add documentation for converting custom data to rrd using log/send_column f8cf13c
- Update MCAP message support documentation a77922a
- Add layer identifier "foxglove" to
rerun mcap convert1436027
🖼 UI improvements
- Show that other timelines have data on timeline loader 47bf28f
- Improve error messages regarding arrow datatypes b3c395e
- Fix moving text cursor with cmd-arrows cd90f34
- Don't auto-pause when moving time cursor 647cd11
- Value previews in source dropdown 6d41da9
- Only allow ui edits of visualizer components where they actually have an impact b3fa1fc
🕸️ Web
- Expose theme setting on web-viewer notebook beaee9c
- react-web-viewer: improve parameter handling logic 07a76ca
🧢 MCAP
- Support some Foxglove messages in MCAP data loader via lenses 7e05213
- Support Foxglove
Logprotobuf message in MCAP loader f7cdf09 - Support
foxglove.FrameTransformin MCAP data loader a018942 - Support
foxglove.RawImagein MCAP data loader ff7db99 - Support
foxglove.PointCloudin MCAP data loader 9e8e34b - Add ROS2 MCAP support for Float64Array, Float64MultiArray, and Joy messages 512d0e6