Releases: rerun-io/rerun
Development Build
This is a prerelease. It is not intended for production use.
Please report any issues you find.
Example Hosted App
https://rerun.io/viewer/commit/2e561c5
Wheels can be installed with:
pip install --pre --no-index -f https://build.rerun.io/commit/2e561c5/wheels --upgrade rerun-sdk
or
pip install --pre --no-index -f https://github.com/rerun-io/rerun/releases/download/prerelease --upgrade rerun-sdk
CMake fetch-content for C++ SDK
include(FetchContent)
FetchContent_Declare(rerun_sdk URL https://build.rerun.io/commit/2e561c5/rerun_cpp_sdk.zip)
FetchContent_MakeAvailable(rerun_sdk)
or
include(FetchContent)
FetchContent_Declare(rerun_sdk URL https://github.com/rerun-io/rerun/releases/download/prerelease/rerun_cpp_sdk.zip)
FetchContent_MakeAvailable(rerun_sdk)
0.20.0 - Map view & native H.264 video support
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 --locked
- Online demo: https://rerun.io/viewer/version/0.20.0/
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.20.0/rerun_cpp_sdk.zip
nuscenes.updated.with.map.mp4
📖 Release blogpost: https://rerun.io/blog/maps
🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-20
✨ Overview & highlights
- 🗺️ There is now an map view!
- 🎬 Native viewer now supports H.264 video if ffmpeg is installed.
- 📽️ Videos now load a lot faster use less RAM.
- 📂 Improvements to the existing
Open
(Viewer) &log_file
(SDK) workflows, and addition of a newImport
workflow.- Blueprints can now easily be re-used across different applications, recordings and SDKs
- The new
Import
feature allows you to drag-and-drop any data into an existing recording, directly in the viewer.
- ☰ Dataframe queries are now streamed, reducing memory usage.
- 💊 Add capsule archetype.
- 📚 Doc improvements
- Arrow schemas are now documented for all types.
- Better structure to the how to section and a few more pages
⚠️ Breaking changes & deprecations
- 🐍 Python 3.8 is being deprecated
- 🔌
connect
&serve
got deprecated in favor ofconnect_tcp
&serve_web
- 🎨 In Python, lists of numbers without type information are now assumed to be packed integer color representations, unless the length is exactly 3 or 4
🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-20
🔎 Details
🎬 Video
- Support H.264 video on native via user installed ffmpeg executable #7962
- Make mp4 parsing a lot faster & tremendously lower memory overhead #7860
- Fix playback of HDR AV1 videos in native viewer #7978
- Show all samples/frames in a video in a nice table #8102
- Calculate and show video frame number #8112
- Expose basic information about group of pictures in video data in the selection panel #8043
- Fix some videos having offsetted (incorrect) timestamps #8029
- Fix video backward seeking / stepping back sometimes getting stuck (in the presence of b-frames) #8053
- Make sure videos all end up in different space views #8085
- Fix video on web sometimes not showing last few frames for some videos #8117
- Fix issues with seeking in some H.264 videos on native & web #8111
- Fix view creation heuristics for videos #7869
- Improve video doc page #8007
- Update re_mp4 to fix integer overflow bug #8096
🪵 Log API
- Add
Capsules3D
archetype #7574 (thanks @kpreid!) rr.log_file_from_path
now defaults to the active app/recording ID #7864- Allow overriding albedo color on
Asset3D
#7458 (thanks @EtaLoop!) rr.serve
->rr.serve_web
,rr.connect
->rr.connect_tcp
#7906
🌊 C++ API
- C++: Improve error message when finding X11 macro
Unsorted
#7855 - Forward
CMAKE_TOOLCHAIN_FILE
to arrow build for sdk cross-compilation #7866 (thanks @SunDoge!) - Update the python package to support python 3.13, update C++ arrow to 18.0.0 #7930
🐍 Python API
- Allow passing seconds/nanoseconds to
VideoFrameReference
archetype #7833 - Officially deprecate support for python 3.8 #7933
- Update the python package to support python 3.13, update C++ arrow to 18.0.0 #7930
- Remove the upper bound constraint on python version #7949
- Enable dataframe streaming across Python FFI #7935
- Fix python SDK's shutdown unsafely dropping cross-FFI resources #8038
- Improve edge-cases and warn on ambiguity for Rgba32 datatype #8054
- Check rerun notebook version on first import #8030
🦀 Rust API
- Allow logging individual components directly (Impl
AsComponents
for allObjectKind::Component
) #7756 (thanks @oxkitsune!) re_query::Caches
->re_query::QueryCache
#7915
🪳 Bug fixes
- [bugfix] Make sure blueprint gets sent to the notebook view being created #7811
- Fix too short picking ray in pinhole-only scenarios #7899
- Update zune-jpeg to fix crash on bad JPEGs #7952
- Consistent open/import/log_file behaviors in all common scenarios #7966
- ChunkStore: fix row-id computation when removing dangling static chunks #8020
EntityTree
: only check for entity deletions when necessary #8103- WebSocket server now indefinitely keeps track of non-data RPC commands #8146
🌁 Viewer improvements
- A Rerun Viewer session now matches 1:1 to a Rerun TCP server #6951 (thanks @petertheprocess!)
- Implement support for in-place drag-n-drop #7880
- Implement
Menu > Import
and associated command #7882 - Expose additional information about decoded frames in the viewer #7932
- Update crates, including
rfd
for better file dialogs #7953 - Line strips are no longer a disconnected series of quads #8065
- Show data density graph in collapsed time panel #8137
- Show the root entity "/" in the streams panel #8142
🚀 Performance improvements
- Don't keep around additional CPU copy of loaded mesh files #7824
- Make mp4 parsing a lot faster & tremendously lower memory overhead #7860
- Fix slow receive when using native WebSocket #7875
- Implement support for fully asynchronous
QueryHandle
s #7964
🧑🏫 Examples
- Fix Rust DNA sample writing to a temporary file #7827
- Add
ml_depth_pro
example #7832 (thanks @oxkitsune!) - Add map view to nuscenes python example #8034 (thanks @tfoldi!)
- Add an example to display OpenStreetMap-sourced data on the map view #8044
- Improve NuScenes example with more geo data & blueprint #8130
📚 Docs
- Clarify viewport documentation and reference the type list for view classes #7826
- Finish dataframe reference page #7865
- Docs: static data #7856
- Docs: concepts > recordings #7896
- Docs: "How-to: reuse blueprints across languages" #7886
- Docs: application model part 1: native workflows #7905
- Document arrow datatypes #7986
🖼 UI improvements
- Map View and
GeoPoints
archetype #6561 (thanks @tfoldi!) - Replace the "Options" submenu with a settings screen #8001
- Improve error message style slightly #8092
- Much nicer looking error and warning messages #8127
🧑💻 Dev-experience
- Show list of enabled features with
rerun --version
[#7885](https://github.com/rerun-io/rerun/pul...
0.19.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 --locked
- Online demo: https://rerun.io/viewer/version/0.19.1/
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.19.1/rerun_cpp_sdk.zip
This release fixes an error thrown when the web viewer is closed.
🔎 Details
🕸️ Web
- Fix wasm-bindgen patch #7970
📦 Dependencies
- Add wasm-bindgen version check to CI #7983
0.19.0 - Video and Dataframe API
Rerun is an easy-to-use visualization toolbox and data platform 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 --locked
- Online demo: https://rerun.io/viewer/version/0.19.0/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.19.0/rerun_cpp_sdk.zip
rerun_video_in_rerun.mp4
📖 Release blogpost: https://rerun.io/blog/dataframe
🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-19
✨ Overview & highlights
This release introduces two powerful features: a dataframe API (and view), as well as video support.
☰ Dataframe API
We now have an API for querying the contents of an .rrd file. This integrates with popular packages such as Pandas, Polars, and DuckDB.
You can read more in the Dataframe API how-to guide.
We have also added a matching dataframe view inside the Rerun Viewer.
Read more here.
🎬 Video
Rerun now supports logging MP4 videos using the new AssetVideo
archetype.
This can greatly reduce bandwidth and storage requirements.
While the web viewer supports a variety of codecs, the native viewer supports only the AV1 codec for the moment, but we plan to support H.264 in the near future as well.
Read more about our video supports (and its limits) in our video docs.
⚠️ Breaking changes
- 🗾 Blueprint files (.rbl) from previous Rerun versions will no longer load automatically
- 🐧 Linux: Rerun now requires glibc 2.17+
- 🦀 Rust: The minimum supported Rust version is now 1.79
🧳 Migration guide: http://rerun.io/docs/reference/migration/migration-0-19
🔎 Details
📑 Raw changelog: 0.18.2...0.19.0
🪵 Log API
- BGR(A) image format support #7238
- Tensor & depth image value ranges can now be configured, from UI & code #7549
- New planar pixel formats:
Y_U_V24
/Y_U_V16
/Y_U_V12
-_LimitedRange
/FullRange
#7666 - Add
ShowLabels
component, which controls whether instances’ labels are shown #7249 (thanks @kpreid!) - Refactor
MediaType
guessing #7326
🌊 C++ API
- Add
nullptr
check when forwarding from component to datatype #7430
🐍 Python API
- Add missing
show_labels
anddraw_order
arguments in Python API #7363 (thanks @kpreid!) - Allow logging to a recording without first calling
rr.init()
#7698 - Add support for NumPy arrays to the arrow serializer for string datatypes #7689
🦀 Rust API
- Update MSRV to Rust 1.79 #7563
- Update ndarray to 0.16 and ndarray-rand to 0.15 #7358 (thanks @benliepert!)
- Replace
host_web_viewer
method withWebViewerConfig::host_web_viewer
#7553 - Fix Rust's
TimeColumn::new_seconds/new_nanos
creating sequence timelines #7402
🪳 Bug fixes
- Purge the query cache to prevent GC livelocks #7370
- Bug fix: always show latest data in follow-mode #7425
- Fix encoded image being suggested for non-image blobs (like video) #7428
- Chunk store: support for overlapped range queries #7586
- Fix image & video cache creating new entries when selecting data without explicit media type #7590
🌁 Viewer improvements
- The viewer will tail an .rrd that's is being written to #7475
- Native video support for AV1 #7557
- Allow splitting entity path expressions with whitespace #7782
🚀 Performance improvements
- Improve performance for scenes with many entities & transforms #7456
Caches
per recording #7513- Automatic removal of unreachable static chunks #7518
- Invalidate hub-wide caches on deletions and overwrites #7525
- Do not cache static entries in the query-time latest-at cache #7654
- Make sure Arrow
filter
andtake
kernels early out where it makes sense #7704
🧑🏫 Examples
- Add drone LiDAR example #7336
- Add
instant_splat
example #7751 (thanks @pablovela5620!)
📚 Docs
- Add video reference docs #7533
- Document that Rerun does not support left-handed coords #7690
- Add a How-to guide for the dataframe API #7727
- Docs: move "roadmap" down to "development" #7775
- Add a "Getting started" guide for the dataframe API #7643
- Docs: clean up reference menu #7776
- Updating "Navigating the viewer" #7757
🖼 UI improvements
- Add a hook for views to add additional UI in the tab title bar #7438
- Text fields in the selection panel now span the available width #7487
- Do not deselect on ESC when it was used to close some other UI element #7548
- Add UI for precisely picking an exact sequence time #7673
- Remove the feature flag for plot query clamping #7664
🎨 Renderer improvements
- Introduce image data conversion pipeline, taking over existing YUV conversions #7640
🧑💻 Dev-experience
0.18.2: Bug fixes and performance improvements
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 --locked
- Online demo: https://rerun.io/viewer/version/0.18.2/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.18.2/rerun_cpp_sdk.zip
Rerun 0.18.1
was (soft) yanked as we realized a bit too late that it was incomplete: we're jumping straight from 0.18.0
to 0.18.2
.
0.18.2
is simply 0.18.1
with #7308 on top.
This patch release comes with the following fixes:
🌊 C++ API
- Install
sdk_info.h
even ifRERUN_INSTALL_RERUN_C
option isOFF
#7246 (thanks @traversaro!)
🐍 Python API
- Fix
VisualizerOverrides
serializer and improved error handling #7288
🦀 Rust API
- Add
rerun::external::ndarray
#7259 - Handle proper half-size splatting semantics in
from_mins_and_sizes
#7291
🪳 Bug fixes
- Fix error when trying to clear non-existent component #7215
- Fix gamma (srgb EOTF) for GLTF via
Asset3D
embedded rgb(a) textures #7251 - Fix
Chunk::component_batch_raw
not checking the bitmap first #7286 - Fix and test all known
HybridResults
issues from 0.18 #7297 - Fix secondary plot components ignoring blueprint defaults #7302
- Fix relayout on tab background click #7283
- Update
time
crate to 0.3.36, fixing compilation on newer Rust versions #7308
🚀 Performance improvements
- Speed up data density graph by rendering them more coarsly #7229
- Default
RERUN_CHUNK_MAX_BYTES
to 384kiB instead of 4MiB #7263 - Speed up handling of large numbers of transform entities #7300
- Fix memory leak by updating to
re_arrow2 0.17.5
#7262
🖼 UI improvements
- Hide time controls if there is only one time point on a timeline #7241
📦 Dependencies
0.18.1: Bug fixes and performance improvements
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 --locked
- Online demo: https://rerun.io/viewer/version/0.18.1/
- C++
FetchContent
: https://github.com/rerun-io/rerun/releases/download/0.18.1/rerun_cpp_sdk.zip
This patch release comes with the following fixes:
🌊 C++ API
- Install
sdk_info.h
even ifRERUN_INSTALL_RERUN_C
option isOFF
#7246 (thanks @traversaro!)
🐍 Python API
- Fix
VisualizerOverrides
serializer and improved error handling #7288
🦀 Rust API
- Add
rerun::external::ndarray
#7259 - Handle proper half-size splatting semantics in
from_mins_and_sizes
#7291
🪳 Bug fixes
- Fix error when trying to clear non-existent component #7215
- Fix gamma (srgb EOTF) for GLTF via
Asset3D
embedded rgb(a) textures #7251 - Fix
Chunk::component_batch_raw
not checking the bitmap first #7286 - Fix and test all known
HybridResults
issues from 0.18 #7297 - Fix secondary plot components ignoring blueprint defaults #7302
- Fix relayout on tab background click #7283
🚀 Performance improvements
- Speed up data density graph by rendering them more coarsly #7229
- Default
RERUN_CHUNK_MAX_BYTES
to 384kiB instead of 4MiB #7263 - Speed up handling of large numbers of transform entities #7300
- Fix memory leak by updating to
re_arrow2 0.17.5
#7262
🖼 UI improvements
- Hide time controls if there is only one time point on a timeline #7241
📦 Dependencies
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.