Skip to content

0.15.0 - Blueprints from Python

Compare
Choose a tag to compare
@rerun-bot rerun-bot released this 09 Apr 15:07
· 1557 commits to main since this release

Rerun is an easy-to-use visualization toolbox for multimodal and temporal data.
Try it live at https://rerun.io/viewer.


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-generated enum 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 of rerun_c library #5374 (thanks @traversaro!)
  • CMake: Fix install not finding external arrow for dynamic linking #5375 (thanks @traversaro!)
  • Make pinhole.hpp robust against min/max preprocessor macros (typically from windows.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 if CARGO_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
  • ARFlow Example Page #5320 (thanks @YiqinZhao!)
  • Fix controlnet example for current controlnet package version and add blueprint #5634
  • Fix RRT-Star example not showing up on website or rerun.io/viewer #5628
  • Fix not logging 3D gesture z component correctly in Gesture Detection example #5630 (thanks @andreasnaoum!)
  • Updated READMEs for examples: LLM Embedding-Based Named Entity Recognition, nuScenes, Objectron, Open Photogrammetry Format, Raw Mesh #5653 (thanks @andreasnaoum!)
  • Updated READMEs for the examples - Batch 1 #5620 (thanks @andreasnaoum!)

📚 Docs

  • Docs: improve discoverability of image compression #5675
  • Improve getting started doc section #5689
  • Update web viewer links #5738
  • Update docs with guides and tutorials for blueprint #5641
  • Update README and description of arkit_scenes example #5711 (thanks @BirgerMoell!)
  • Improve readme of depth_guided_stable_diffusion example #5593 (thanks @BirgerMoell!)

🖼 UI Improvements

  • New timezone option: seconds since unix epoch #5450 (thanks @murgeljm!)
  • Always enable entity path filter editor #5331
  • Add icons for entities and components, and use them everywhere #5318
  • Add support for context menu for viewport tab title and selected container's children list #5321
  • Fix ListItem indentation so icons are properly aligned #5340
  • Blueprint tree always starts at the origin now, "projected" paths are called out explicitly #5342
  • Merge example page into welcome screen #5329
  • ListItem's collapsing triangle is now styled consistently with the rest of the item #5354
  • Add helpers to enable stable and controllable collapsed state in hierarchical lists #5362
  • Different icon for empty entity paths #5338
  • Merge quick start guides #5378
  • Update welcome screen panel illustrations #5394
  • More context menu in blueprint and streams tree:
    • Refactor #5392
    • Add support to show/hide DataResults #5397
    • Add support for removing DataResult from a space view #5407
    • Create a new space view with selected entities #5411
    • Add context menu to streams tree #5422
    • Add "Expand/Collapse all" actions #5433
    • Cleanup #5456
  • Automatically expand and scroll the blueprint tree when focusing on an item #5482
  • Save blueprint to file #5491
  • Add new design guidelines for title casing etc #5501
  • Automatically expand and scroll the streams tree when focusing on an item #5494
  • Reduce the height of the tab bars and side panel titles #5609
  • Support toggling item visibility on touch screens #5624
  • Select active recording if nothing else is selected #5627
  • Enable selecting data sources and blueprints and recordings in them #5646
  • Warn user when a software rasterizer is used #5655
  • Improve spacing and alignment of menus #5680
  • Simplify Welcome Screen and use card-based layout for examples #5699
  • Make selection history global instead of per recordings #5739
  • Improve formatting of numbers on plot Y axis #5753
  • Show all loaded applications in recordings panel #5766
  • Wider selection panel by default #5777
  • Tighter UI for tensor, annotation-context, view coordinates, recording #5782
  • Always show welcome screen, but sometimes fade it in #5787

🕸️ Web

  • Support loading multiple recordings and/or blueprints in web-viewer #5548
  • Build release .wasm with debug symbols #5708

🧑‍💻 Dev-experience

  • Build wheels for Linux ARM64 #5511

📦 Dependencies

  • Update wgpu to 0.19.3 #5409
  • Update h2 to 0.3.26 to address RUSTSEC-2024-0332 #5775

🤷‍ Other

  • Build CLI for Linux ARM64 #5503
  • Allow hiding/showing entity subtrees under shown/hidden parent tree #5508
  • Introduce basic support for $origin substitution in EntityPathFilter #5517
  • Introduce rr.notebook_show() to simplify notebook experience #5715
  • Also remove nested inclusions when removing a subtree #5720
  • Prevent gratuitous blueprint saves by not garbage collecting when the blueprint hasn't changed #5793
  • Refactor Selection using IndexMap and make it more encapsulated #5569