Releases: rerun-io/rerun
0.18.0: Exploiting column chunks for faster ingestion and lower memory use
Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
📖 Release blogpost: http://rerun.io/blog/column-chunks
🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-18
- Python:
pip install rerun-sdk
- Rust:
cargo add rerun
andcargo install rerun-cli --locked
- Online demo: https://rerun.io/viewer/version/0.18.0/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.18.0/rerun_cpp_sdk.zip
0.18.Release.hero.mp4
✨ Overview & highlights
Rerun 0.18 introduces new column-oriented APIs and internal storage datastructures (Chunk
& ChunkStore
) that can both simplify logging code as well as improve ingestion speeds and memory overhead by a couple orders of magnitude in many cases (timeseries-heavy workloads in particular).
These improvements come in 3 broad categories:
- a new
send
family of APIs, available in all 3 SDKs (Python, C++, Rust), - a new, configurable background compaction mechanism in the datastore,
- new CLI tools to filter, prune and compact RRD files.
Furthermore, we started cleaning up our data schema, leading to various changes in the way represent transforms & images.
New send
APIs
Unlike the regular row-oriented log
APIs, the new send
APIs let you submit data in a columnar form, even if the data extends over multiple timestamps.
This can both greatly simplify logging code and drastically improve performance for some workloads, in particular timeseries, although we have already seen it used for other purposes!
API documentation:
API usage examples:
Python timeseries
Using log()
(slow, memory inefficient):
rr.init("rerun_example_scalar", spawn=True)
for step in range(0, 64):
rr.set_time_sequence("step", step)
rr.log("scalar", rr.Scalar(math.sin(step / 10.0)))
Using send()
(fast, memory efficient):
rr.init("rerun_example_send_columns", spawn=True)
rr.send_columns(
"scalars",
times=[rr.TimeSequenceColumn("step", np.arange(0, 64))],
components=[rr.components.ScalarBatch(np.sin(times / 10.0))],
)
C++ timeseries
Using log()
(slow, memory inefficient):
const auto rec = rerun::RecordingStream("rerun_example_scalar");
rec.spawn().exit_on_failure();
for (int step = 0; step < 64; ++step) {
rec.set_time_sequence("step", step);
rec.log("scalar", rerun::Scalar(std::sin(static_cast<double>(step) / 10.0)));
}
Using send()
(fast, memory efficient):
const auto rec = rerun::RecordingStream("rerun_example_send_columns");
rec.spawn().exit_on_failure();
std::vector<double> scalar_data(64);
for (size_t i = 0; i < 64; ++i) {
scalar_data[i] = sin(static_cast<double>(i) / 10.0);
}
std::vector<int64_t> times(64);
std::iota(times.begin(), times.end(), 0);
auto time_column = rerun::TimeColumn::from_sequence_points("step", std::move(times));
auto scalar_data_collection =
rerun::Collection<rerun::components::Scalar>(std::move(scalar_data));
rec.send_columns("scalars", time_column, scalar_data_collection);
Rust timeseries
Using log()
(slow, memory inefficient):
let rec = rerun::RecordingStreamBuilder::new("rerun_example_scalar").spawn()?;
for step in 0..64 {
rec.set_time_sequence("step", step);
rec.log("scalar", &rerun::Scalar::new((step as f64 / 10.0).sin()))?;
}
Using send()
(fast, memory efficient):
let rec = rerun::RecordingStreamBuilder::new("rerun_example_send_columns").spawn()?;
let timeline_values = (0..64).collect::<Vec<_>>();
let scalar_data: Vec<f64> = timeline_values
.iter()
.map(|step| (*step as f64 / 10.0).sin())
.collect();
let timeline_values = TimeColumn::new_sequence("step", timeline_values);
let scalar_data: Vec<Scalar> = scalar_data.into_iter().map(Into::into).collect();
rec.send_columns("scalars", [timeline_values], [&scalar_data as _])?;
Background compaction
The Rerun datastore now continuously compacts data as it comes in, in order find a sweet spot between ingestion speed, query performance and memory overhead.
This is very similar to, and has many parallels with, the micro-batching mechanism running on the SDK side.
You can read more about this in the dedicated documentation entry.
Post-processing of RRD files
To help improve efficiency for completed recordings, Rerun 0.18 introduces some new commands for working with rrd files.
Multiple files can be merged, whole entity paths can be dropped, and chunks can be compacted.
You can read more about it in the new CLI reference manual, but to give a sense of how it works the below example merges all recordings in a folder and runs chunk compaction using the max-rows
and max-bytes
settings:
rerun rrd compact --max-rows 4096 --max-bytes=1048576 /my/recordings/*.rrd > output.rrd
Overhauled 3D transforms & instancing
As part of improving our arrow schema and in preparation for reading data back in the SDK, we've split up transforms into several parts.
This makes it much more performant to log large number of transforms as it allows updating only the parts you're interested in, e.g. logging a translation is now as lightweight as logging a single position.
There are now additionally InstancePoses3D
which allow you to do two things:
- all 3D entities: apply a transform to the entity without affecting its children
Mesh3D
/Asset3D
/Boxes3D
/Ellipsoids3D
: instantiate objects several times with different poses, known as "instancing"- Support for instancing of other archetypes is coming in the future!
All four tetrahedron meshes on this screen share the same vertices and are instanced using an InstancePoses3D
archetype with 4 different translations
⚠️ Breaking changes
.rrd
files from older versions won't load correctly in Rerun 0.18mesh_material: Material
has been renamed toalbedo_factor: AlbedoFactor
#6841Transform3D
is no longer a single component but split into its constituent parts. From this follow various smaller API changes- Python:
NV12/YUY2
are now logged withImage
ImageEncoded
is deprecated and replaced withEncodedImage
(JPEG, PNG, …) andImage
(NV12, YUY2, …)DepthImage
andSegmentationImage
are no longer encoded as a tensors, and expects its shape in[width, height]
order
🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-18
🔎 Details
🪵 Log API
- Add
Ellipsoids3D
archetype #6853 (thanks @kpreid!) - Dont forward datatype extensions beyond the FFI barrier #6777
- All components are now consistently implemented by a datatype #6823
- Add new
archetypes.ImageEncoded
with PNG and JPEG support #6874 - New transform components:
Translation3D
&TransformMat3x3
#6866 - Add Scale3D component #6892
- Angle datatype stores now only radians #6916
- New
DepthImage
archetype #6915 - Port
SegmentationImage
to the new image archetype style #6928 - Add components for
RotationAxisAngle
andRotationQuat
#6929 - Introduce
TransformRelation
component #6944 - New
LeafTransform3D
, replacingOutOfTreeTransform3D
#7015 - Remove
Scale3D
/Transform3D
/TranslationRotationScale3D
datatypes, removeTransform3D
component #7000 - Rewrite
Image
archetype #6942 - Use
LeafTranslation
(centers),LeafRotationQuat
andLeafRotationAxisAngle
dire...
0.17.0: More Blueprint features and better notebooks
Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
📖 Release blogpost: https://rerun.io/blog/blueprint-overrides
- Python:
pip install rerun-sdk
- Rust:
cargo add rerun
andcargo install rerun-cli --locked
- Online demo: https://rerun.io/viewer/version/0.17.0/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.17.0/rerun_cpp_sdk.zip
Export-1720079627846_compressed.mp4
🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-17
✨ Overview & highlights
- 🟦 Blueprint component override & defaults, and visualizer override for all views
- Component defaults: Configure default component value for an entire view, used when no values are logged to the data store (using
rr.log()
). - Component overrides: Specify a value to use regardless of the data-store & default values and use specified value instead. Can be set per view per entity.
- Visualizer overrides: Specify a visualizer to use for a given entity in a given view. Previously only available for scalar data in timeseries views, now available for all view kinds.
- All three are available from the (fully revamped) UI and the Python blueprint APIs.
- Everything that was editable per entity in a view now uses component overrides (e.g. camera plane distance, transform axis lengths, etc.)
- Tip: Tooltips for each component in the UI include a link to the docs now!
- Component defaults: Configure default component value for an entire view, used when no values are logged to the data store (using
- 🕸️ Improved notebook & website embedding support
- Now you can stream data from the notebook cell to the embedded viewer.
- Much improved support for having multiple viewers on the same web page.
- More configuration options have been added to control the visibility of the Menu bar, time controls, etc.
- Note: Use
pip install "rerun-sdk[notebook]"
to include the better notebook support. This includes the newrerun-notebook
package, which is used internally by [rerun-sdk
].
- 🧑🏫 New Examples
- 🛠️ Improved the logging API with many new and updated archetypes and components (see migration guide)
- 🖼️
TensorView
is now fully configurable from blueprint code - 🎛️ Revamped selection panel UI
- 🚚 Much work is being done under-the-hood to migrate our data-store to "chunks" (aka units of batched data). More on this in the next release!
- SDKs are already using chunks to transport data to the viewer, performance characteristics may have changed but should be largely the same for the moment.
⚠️ Breaking changes
HalfSizes2D
has been renamed toHalfSize2D
HalfSizes3D
has been renamed toHalfSize3D
.rrd
files from older versions won't load in Rerun 0.17
🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-17
🔎 Details
🪵 Log API
- Introduce chunks and use them on the client side:
- Remove unused scalar scattering component #6471
- Introduce
ImagePlaneDistance
Component #6505 - Introduce new archetype for
Axes3D
#6510 - Expose
Colormap
component forDepthImage
, depth image colormap now used outside of reprojection #6549 TimeSeriesAggregation
can now be set perSeriesLine
(and as blueprint default per View) #6558- Expose
FillRatio
component to configureDepthImage
back-projection radius scaling #6566 - Expose image opacity component #6635
- Make draw order editable & solve 2D flickering issues, add draw order to arrow2d archetype #6644
- Remove
Axes3D
archetype and addaxis_length
toTransform3D
#6676 - Expose UI point radii to logging & blueprint, remove old default radius settings in favor of blueprint default components #6678
- Rename
HalfSizes2D/3D
toHalfSize2D/3D
#6768
🌊 C++ API
- Add docs on how to install C++ SDK with conda-forge packages #6381 (thanks @traversaro!)
🐍 Python API
- Make barchart legend settable via blueprint #6514
- Expose tensor slice selection to blueprint #6590
- Use literal unions in Python enum codegen #6408
- Allow hiding top panel via blueprint #6409
- Improve the visibility of Python public APIs to type checkers #6462
- Expose
Interactive
component #6542 - Python components now implement the
ComponentBatchLike
interface #6543 - Allow streaming to the viewer from the cell where it's created #6640
- Introduce new Python API for setting overrides #6650
- Publish
rerun_notebook
in CI #6641
🦀 Rust API
- All components implement the
Default
trait now in Rust #6458 - Codegen
DerefMut
&Deref
for all trivial components #6470
🪳 Bug Fixes
- Allow removing blueprint entries even when they are invisible #6503
- Fix wrong depth projection value on picking when depth meter was edited #6551
- Always enable OpenGL fallback backend, fix
--renderer=gl
only working together withWGPU_BACKEND
env-var #6582 - Improve container selection panel UI #6711
- Fix annotation context labels not showing in views #6742
- Quiet the 'not a mono-batch' log spam when selecting keypoint with a batch class-id #6359
- Fix incorrect label placement for 3D arrows with origins #6779
- Don't pass RRD paths to other data-loaders #6617
🌁 Viewer Improvements
- Introduce a mechanism for blueprint-provided defaults #6537
- Allow resetting view property components from GUI for all generically implemented property UI #6417
- Don't log "SDK client connected" messages until after we have confirmed it's a client #6456
- Background color settings uses new generic UI now #6480
- TimeSeries y-range is now tightly synced with plot view & uses new generic UI #6485
- Remove option to enable/disable depth projection from UI #6550
- Expose tensor colormap/gamma/filter/scaling to blueprint #6585
- Handle static text messages in TextLogView gracefully, handle overrides #6712
- Multiple instances of points/arrows/boxes with single label display label now at the center #6741
🧑🏫 Examples
- Add the OCR example #6560 (thanks @andreasnaoum!)
- Add the Vista example #6664 (thanks @roym899!)
- Add the Stereo Vision SLAM example #6669 (thanks @02alexander!)
- Add 2D neural field notebook example #6775 (thanks @roym899!)
- Update the nuScenes example to use blueprint overrides and defaults #6783
- Update the plots example to use blueprint overrides #6781
📚 Docs
- Add links to our docs in component tooltips #6482
- Show the first line of the docs when hovering a component name [#6609](https://github.c...
0.16.1
Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk
- Rust:
cargo add rerun
andcargo install rerun-cli
- Online demo: https://rerun.io/viewer/version/0.16.1/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.15.1/rerun_cpp_sdk.zip
This patch release comes with the following fixes:
0.16.0: More blueprint control from code
Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk
- Rust:
cargo add rerun
andcargo install rerun-cli
- Online demo: https://rerun.io/viewer/version/0.16.0/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.16.0/rerun_cpp_sdk.zip
Release.0.16.mp4
✨ Overview & highlights
- 🟦 Customize views in code: We started exposing some view properties in the blueprint!
- 📋 Included are:
- Visible time ranges
- check this new how-to guide & example that demonstrates this with plots
- Time Series legend & y-axis configuration
- 2D & 3D View background color
- 2D View bounds
- Visible time ranges
- 📚 learn more on the new view blueprint doc pages
- 🚀 …more to come in the future!
- 📋 Included are:
- 🕰️ Deprecated
timeless
in favor of newstatic
logging- Except for the name change, they behave similarly in most use cases. Unlike with timeless, static data…
- …can't be mixed with non-static data on the same component.
- …will override previous static data and not keep old data in memory.
- Check out our migration guide.
- Except for the name change, they behave similarly in most use cases. Unlike with timeless, static data…
- 🖼️ 2D View's pan & zoom got redone, it's now a free canvas without any scroll bar
- 🤖 Added an example to use Rerun with ROS2.
As always there's a lot going on under the hood:
- 🚚 We streamlined our development processes & CI and examples.
- 🕸️ Our web page is about to switch from React to Svelte, making it a lot snappier!
- 💿 Instance key removal in 0.15.0 opened the door to major simplifications in our data store, this
will make it easier for us to improve performance and implement data streaming. - 🤗 We're making it easier to work with HuggingFace's Gradio API. Stay tuned! Most things for this already landed in this release and we'll soon build more direct support on top.
0.15.1 - Fix Python notebooks
Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk
- Rust:
cargo add rerun
andcargo install rerun-cli
- Online demo: https://rerun.io/viewer/version/0.15.1/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.15.1/rerun_cpp_sdk.zip
- Fix timeout in notebooks by making the
app_url
correctly point toapp.rerun.io
#5877 - CMake: Allow to call
find_package(rerun_sdk)
two or more times #5886 (thanks @traversaro!)
0.15.0 - Blueprints from Python
Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk
- Rust:
cargo add rerun
andcargo install rerun-cli
- Online demo: https://rerun.io/viewer/version/0.15.0/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.15.0/rerun_cpp_sdk.zip
The biggest news is the ability to create a blueprint via the Python logging API. Check out our associated blog post for more information.
import rerun.blueprint as rrb
blueprint = rrb.Blueprint(
rrb.Vertical(
rrb.Spatial3DView(name="3D", origin="/"),
rrb.Horizontal(
rrb.TextDocumentView(name="README", origin="/description"),
rrb.Spatial2DView(name="Camera", origin="/camera/image"),
rrb.TimeSeriesView(origin="/plot"),
),
row_shares=[3, 2],
)
rrb.BlueprintPanel(expanded=True),
rrb.SelectionPanel(expanded=False),
rrb.TimePanel(expanded=False),
)
The blueprint can then be sent to the viewer with
rr.send_blueprint(blueprint)
Or stored to a file, and then later opened in the viewer:
blueprint.save("my_nice_dashboard.rbl")
In this case, the results looks something like this:
Blueprints are currently only supported in the Python API, with C++ and Rust support coming later.
✨ Overview & highlights
- 🟦 Configure the layout and content of space views from Python (docs)
- 🖧 More powerful and flexible data loaders (docs)
- 🖵 Improved UI for managing recordings and applications
- 💾 Save and load blueprint files in the viewer
- 🎨 Configurable background color for 3D Space Views #5443
- 💪 Linux ARM64 support #5489 #5503 #5511
- 🖼️ Show examples in the welcome page
- 🖱️ Improve context-menu when right-clicking items in the blueprint panel and streams tree
- ❌ Remove
InstanceKey
from our logging APIs #5395 (migration guide) - ❌ Remove groups from blueprints panel #5326
🔎 Details
🪵 Log API
- Replace
MarkerShape
with code-generatedenum
type #5336 - Key-less data model 1: scrap
InstanceKey
from public logging APIs #5395 - Remove the check for
WrongNumberOfInstances
#5399 - Control panel expanded state via blueprint APIs #5484
- Remove deprecated
TimeSeriesScalar
#5604 - Customizable data loaders #5327 #5328 #5330 #5337 #5351 #5355 #5379 #5361 #5388
🌊 C++ API
- Fix arrow libraries from download & build not being found in some cases #5366
- CMake: Add
RERUN_INSTALL_RERUN_C
option to disable installation ofrerun_c
library #5374 (thanks @traversaro!) - CMake: Fix
install
not finding externalarrow
for dynamic linking #5375 (thanks @traversaro!) - Make
pinhole.hpp
robust againstmin/max
preprocessor macros (typically fromwindows.h
) #5432 - Build C++ SDK for Linux ARM64 #5489
- Generate fewer
.cpp
files: Inline forward serialization of transparent components to their respective datatypes #5544 - Fix
RERUN_C_BUILD_ARTIFACT
path value ifCARGO_BUILD_TARGET
env variable is set #5547 (thanks @traversaro!)
🐍 Python API
- All python components that wrap a
bool
now implement__bool__
#5400 - Add the remaining space views and name them consistently #5498
- Add option to include blueprint in an
.rrd
when calling.save(…)
#5572 - Allow naming space view containers #5626
🦀 Rust API
🪳 Bug Fixes
- Sort text log space view on currently selected timeline #5348
- Fix parents of queried paths getting visualized, fix 2D objects not showing at all in 3D if their camera parent is not included #5424
- Fix: allow creating 3D space views for pinhole-only 3D scenes #5563
- Fix depth cloud bounding boxes for depth cloud visualizations with transforms #5578
- Fix image view not handling images with extra leading dimensions of size
1
#5579 - Fix web viewer crash on invalid url parameter #5631
- Be consistent in how items are removed from selection #5643
- Fix layout issue on welcome screen for narrow window, triggering debug assertion #5650
- Fix broken 2D space view heuristics in Python Notebooks #5674
- Avoid a hang on linux by always create the renderer, even when we have no store_view #5724
- Fix crash/freeze when zooming out too far in a plot #5737
- Fix
draw_order
not working #5794
🌁 Viewer Improvements
- Remove groups from blueprints panel #5326
- Improved tracking of which space views were generated by a heuristic #5419
- Configurable background color for 3D Space Views #5443
- Save recordings from web viewer #5488
- Support loading
.rbl
blueprint files #5513 - Tensor space view can now show images #5567
- Entity path query now shows simple statistics and warns if nothing is displayed #5693
- Go back to example page with browser Back-button #5750
- On Web, implement navigating back/forward with mouse buttons #5792
- Support displaying 1D tensors #5837
🧑🏫 Examples
- New
incremental_logging
example #5462 - New standalone example showing blueprint configuration of some stock #5603
- New example visualizing KISS-ICP #5546 (thanks @02alexander!)
- Remove car example #5576
- Add blueprint to
arkit_scenes
example, leveraging the viewer's ability to re-project 3D->2D #5510 - Add blueprint to
nuscenes
example #5556 - Add blueprint to Face Tracking example #5616
- Add blueprint to Gesture Detection example #5619
- Add blueprint to Human Pose Tracking example #5612
- Add blueprint to Live Camera Edge Detection example #5613
- Add blueprint to LLM Embedding Ner example #5614
- Add blueprint to Objectron example #5617
- Add blueprint to Signed Distance Fields example #5635
- Add blueprint to the RGBD example [#5623](https://github....
0.14.1 - Fix C++ build artifacts
Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://app.rerun.io/.
- Python:
pip install rerun-sdk
- Rust:
cargo add rerun
andcargo install rerun-cli
- Online demo: https://app.rerun.io/version/0.14.1/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.14.1/rerun_cpp_sdk.zip
This release is identical to 0.14.0 and merely fixes an issue in the build artifacts for C++: 0.14.0 only contained binaries for Linux x64.
This release has the full set for Linux x64, Windows x64, Mac x64 & Mac Arm64.
0.14.0 - "Unlimited" point clouds & lines, quality of life improvements, bugfixes
0.14.release.video.final.mp4
Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://app.rerun.io/.
- Python:
pip install rerun-sdk
- Rust:
cargo add rerun
andcargo install rerun-cli
- Online demo: https://app.rerun.io/version/0.14.0/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.14.0/rerun_cpp_sdk.zip⚠️ There was a problem in our build pipeline causing this release to only contain Linux artifacts and none for Mac & Windows. This is fixed in 0.14.1.
Originally, we planned to do only a bugfix release, but we got an unexpected amount of goodies amassed already.
We're still ramping up for programmable blueprints (soon!), but meanwhile enjoy these improvements in 0.14!
Overview & Highlights
- 📈 Limits for number of points & lines per space view lifted.
- 🖱️ Added context menu (right-click) actions for items on the Blueprint panel. (Only getting started on this, more actions in future releases!)
- 🚀 Speed improvements for scenes with many transforms and large point clouds.
- 🔺 Built-in STL mesh support.
- 🎥 First-person camera.
- 🐛 Fixes regressions in Space View spawn heuristics from 0.13, and many more bugfixes.
- 🧑🏫 Two new examples: Gesture Recognition & RRT* Pathfinding
Details
🪵 Log API
- Add helpers for perspective cameras #5238
- Fix
spawn
starting the viewer even if logging is disabled #5284
🐍 Python API
- Add missing python docs for
disable_timeline
&reset_time
#5269 - Fix missing error message when passing
from_parent
+ rerun transform type torerun.Transform3D
#5270
🦀 Rust API
- Fix using
rerun
crate as a dependency on CI #5170
🪳 Bug Fixes
- Enforce the rule: heuristics should never add a new view that would be completely covered by an existing view #5164
- Remove log spam when quickly resizing the viewer #5189
- Fix incorrect minimum supported rust version mentioned in docs and examples #5195
- Less restrictive visualizability constraints of 2D entities, improved space view generation heuristics #5188
- Fix ugly UI for some arrow data #5235
- Fix missing redraw upon resetting blueprint #5262
- Fix non-deterministic redundancy check for space view spawning heuristic #5266
- Fix resetting vertical axis when using non-uniform zoom on Time Series #5287
🌁 Viewer Improvements
- Clear all blueprints in RAM and on disk when clicking "Reset Viewer" #5199
- Improve the orbit eye to always maintain an up-axis #5193
- Focus on current bounding-box when resetting camera-eye on a 3D space view (double click it) #5209
- Add STL mesh support #5244
- Add first person 3D eye-camera #5249
🚀 Performance Improvements
- More robust handling of maximum texture size for non-color data, slight perf improvements for large point clouds #5229
- Cached transforms & disconnected spaces for faster scenes with many transforms #5221
- Optimized cpu time for 3D point clouds (once again!) #5273
- Only compute store/caching stats when the memory panel is opened #5274
- Increase the max WebSocket frame limit for the native client #5282
🧑🏫 Examples
- Add Gesture Recognition example #5241 (thanks @andreasnaoum!)
- Add example visualizing RRT* #5214 (thanks @02alexander!)
📚 Docs
- Fix broken link in the installing-viewer documentation #5236 (thanks @BirgerMoell!)
🖼 UI Improvements
- Context Menu 1: Basic scaffolding and simple actions #5163
- Context menu 2: add support for multiple selection #5205
- Context menu 3: add "Move to new container" context menu action #5210
- Context menu 4: add "Clone space view" action #5265
- Context menu 5: refactor into multiple files #5289
- Clickable path parts in selection-panel #5220
- Don't show the blueprint section when selecting recordings #5245
- Use the same icon for recordings everywhere #5246
🎨 Renderer Improvements
- Lift point cloud size limitations #5192
- Lift line vertex/strip count limitations #5207
- Fix banding artifacts of 3D space view's skybox #5279
📦 Dependencies
0.13.0 - Fast time series, improved layout editing & UI overrides
Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://app.rerun.io/.
- Python:
pip install rerun-sdk
- Rust:
cargo add rerun
andcargo install rerun-cli
- Online demo: https://app.rerun.io/version/0.13.0/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.13.0/rerun_cpp_sdk.zip
This release focuses on scalar time series -- both from a performance and UI perspectives. Check out our associated blog post for more information.
Overview & Highlights
-
📈 Rerun can now visualize many time series in the kHz range in real-time:
- The new query cache optimizes data access, improving query performance by 20-50x
- Sub-pixel aggregation prevents unnecessary overdraw when rendering plots, improving rendering time by 30-120x
- Points, lines, arrows and boxes all benefit from query caching too to a lesser extent, yielding 2-5x performance improvements
-
🖼 UI overrides:
- The new
Scalar
,SeriesLine
&SeriesPoint
archetypes allow for customizing plots both at logging and visualization time - Customize marker shapes, marker sizes, etc from code or directly through the UI
- Specify axis labels, lock axes, etc from code or directly through the UI
- The new
-
🌁 Viewer:
- The number of compute threads can now be controlled using the
--threads
/-j
flag - Added support YUY2-encoded images (thanks @oxkitsune!)
- Space views can now be drag-and-dropped directly from the blueprint tree
- Scenes with 100+ entities are now up to 5x faster.
- The number of compute threads can now be controlled using the
-
🚚 New Space View and Container creation workflow:
- When selected, containers have a children list in the Selection Panel, where new Space Views and Containers may be added.
- New modal dialog to add Space Views and Containers.
- The same dialog is also available from the
+
button of the Blueprint tree UI. - The Space View's origin can now be edited in the Selection Panel.
- The container hierarchy can now be cleaned up with the new
Simplify Hierarchy
button in the Selection Panel for containers.
-
🦀 The rust SDK now exposes an optional integration with the
mint
crate -
🕸️ The web UI SDK now supports loading multiple
.rrd
URLs -
🔺 The web viewer now renders using WebGPU by default (when available), leading to lower memory usage on Chrome.
You can override this behavior using?renderer=webgl
/?renderer=webgpu
url parameter, or restart with WebGL/WebGPU respectively from the options menu.
As well as a lot of miscellaneous bug fixes and usability improvements: see details below.
Check out our migration guide.
Details
🪵 Log API
- Mark TimeSeriesScalar as deprecated in all SDKs and documentation #5102
🌊 C++ API
- Document that in C++ PinholeProjection::from_mat3x3 is column major #4843
- Include LICENSE files into C++ SDK Assets #4870 (thanks @rgolovanov!)
- Fix C++ arrow build flag forwarding #4921 (thanks @rgolovanov!)
🦀 Rust API
- Add integration with the
mint
crate #4753
🐍 Python API
- Fix support for compressing mono images by respecting mode to determine depth #4847
🪳 Bug Fixes
- External loader: don't do process IO on compute thread-pool #4942
- Fix a Visible Time Range UI issue where the summary string would display the wrong data range #5034
- Clear empty containers after tile drag-and-drop #5044
- Allow for very large meshes & plots by always picking the largest available GPU buffer size #5053
- Fix forever repaint of big scenes #5071
- Fix
RERUN_FLUSH_NUM_BYTES
and data size estimations #5086 - Make
rectangle_fs.wgsl
compile on chrome despite angle/mesa bug (#3931) #5074
🌁 Viewer Improvements
- Introduce Scalar, SeriesLine, and SeriesPoint archetypes with their own visualizers #4875
- Support modifying the plot style by introducing a generic framework for overriding components #4914
- Introduce a new blueprint archetype for AxisY configuration in a plot #5028
- Improve the selection/hover behavior for plots #5096
- Click a spatial space view background to select the space view itself #4796
- Double-clicking an entity in the blueprint & time panels focuses the 3D camera on it #4799
- When loading a .ply file, warn about ignored properties #4934
- Make it easier to position 3D eye-camera center #4943
- Include tessellation and rendering in CPU time shown in top bar #4951
- Allow selection of entities directly in the plot space view #4959
- Texture support for raw
Mesh3D
logging #4894
🚀 Performance Improvements
- Add
--threads
/-j
to control number of compute threads #5021 - Introduce the query cache:
- Primary caching 3: bare-bone latest-at caching #4659
- Primary caching 4: runtime toggle support #4680
- Primary caching 5: 2D & 3D point clouds #4681
- Primary caching 6: TextLogs & TimeSeries #4698
- Primary caching 7: Always expose the data time in query responses #4711
- Primary caching 8: implement latest-at data-time cache entry deduplication #4712
- Primary caching 9: timeless latest-at support #4721
- Primary caching 10: latest-at cache invalidation #4726
- Primary caching 11: cache stats and integration with memory panel #4773
- Primary caching 12: bare-bone range support #4784
- Primary caching 13: stats & memory panel integration for range queries #4785
- Primary caching 14: don't bake
LatestAt(T-1)
results into low-level range queries #4793 - Primary caching 15: range read performance optimization #4800
- Primary caching 16: context-free range semantics #4851
- Primary caching 17: timeless range #4852
- Primary caching 18: range invalidation (ENABLED BY DEFAULT 🎊) #4853
- Primary caching 19 (final): make cache globals non-static #4856
- Integrate query caching with more primitives:
- Configurable dynamic plot aggregation based on zoom-level #4865
- Improved automatic view creation heuristic, major speedup for scenes with many entities #4874
- Optimize point clouds #4932
🧑🏫 Examples
- Update all examples that use
TimeSeriesScalar
to useScalar
instead #5042
📚 Docs
- Improve documentation of the
Clear
archetype #4760 DisconnectedSpace
now only applies to spatial space views #4935- Fill gaps in image encoding documentation, fix how python documents union variants #4988