Skip to content

Latest commit

 

History

History
1088 lines (953 loc) · 90 KB

CHANGELOG.md

File metadata and controls

1088 lines (953 loc) · 90 KB

Rerun changelog

0.8.1 - Bug fixes - 2023-08-17

🐍 Python SDK

  • Add a warning category and stacklevel to rerun warnings.warn calls #2985

🪳 Bug Fixes

  • Fix always redrawing in the presence of a 3D space view #2900
  • Fix unable to set camera spinning until camera has moved #2990

🌁 Viewer Improvements

  • Allow changing plot aspect ratio with scroll + cmd/ctrl + alt #2742
  • Automatically select user timeline if no timeline was explicitly selected yet #2986

🧑‍🏫 Examples

  • Add Helix to demo.rerun.io #2930

📈 Analytics

  • Make sure re_analytics never log higher than at debug level #3014

0.8.0 - Infrastructure investments and more transform improvements - 2023-07-27

Rerun is an easy-to-use visualization toolbox for computer vision and robotics.

Overview & Highlights

  • log_pinhole is now easier to use in simple cases and supports non-RDF camera coordinates. #2614
    • You only need to set focal length and optional principal point instead of setting the full 3x3 matrix.
    • There is also a new argument: camera_xyz for setting the coordinate system. The default is RDF (the old default). This affects the visible camera frustum, how rays are projected when hovering a 2D image, and how depth clouds are projected.
  • The visualizer can now show coordinate arrows for all affine transforms within the view. #2577
  • Linestrips and oriented bounding boxes can now be logged via batch APIs in python.
    • See: log_linestrips_2d, log_linestrips_3d, #2822 and log_obbs #2823
  • Rust users that build their own Viewer applications can now add fully custom Space Views. Find more information here.
  • New optional flush_timeout specifies how long Rerun will wait if a TCP stream is disconnected during a flush. #2821
    • In Rust, RecordingStream::connect now requires flush_timeout specified as an Option<Duration>.
      • To keep default behavior, this can be specified using the rerun::default_flush_time() helper.
    • In Python flush_init_sec is now an optional argument to rr.connect()
  • In Rust, the RecordingStream now offers a stateful time API, similar to the Python APIs. #2506
    • You can now call set_time_sequence, set_time_seconds, and set_time_nanos directly on the RecordingStream, which will set the time for all subsequent logs using that stream.
    • This can be used as an alternative to the the previous MsgSender::with_time APIs.
  • The Rerun SDK now defaults to 8ms long microbatches instead of 50ms. This makes the default behavior more suitable for use-cases like real-time video feeds. #2220
  • The web viewer now incremental loads .rrd files when streaming over HTTP. #2412

Open Photogrammetry Preview

Ongoing Refactors

  • There have been a number of significant internal changes going on during this release with little visible impact. This work will land across future releases, but is highlighted here since much of it is visible through the changelog.
    • The layout of the Viewer is now controlled by a Blueprint datastore. In the future this will allow for direct API control of the layout and configuration of the Viewer. A very early prototype of this functionality is available via the rerun.experimental module in Python.
    • An entirely new code-generation framework has been brought online for Rust, Python and C++. This will eventually enable new object-centric APIs with a more scalable, consistent, and ergonomic experience.
    • Bringup of C++ support is now underway and will eventually become our third officially supported SDK language.

Known Regressions

  • Due to the Blueprint storage migration, blueprint persistence on web is currently broken. Will be resolved in: #2579

In Detail

🐍 Python SDK

  • Clean up warnings printed when rr.init hasn't been called #2209
  • Normalize Python typing syntax to 3.8+ #2361
  • Simpler, sturdier stateful time tracking in both SDKs #2506
  • Fix not taking np.array for single colors #2569
  • Add a basic pyright config #2610
  • Improve log_pinhole and support non-RDF pinholes #2614
  • Expose batch APIs for linestrips #2822
  • Expose batch APIs for oriented bounding boxes #2823

🦀 Rust SDK

  • Add example for adding custom Space Views #2328
  • Simpler, sturdier stateful time tracking in both SDKs #2506
  • Automagic flush when take()ing a MemorySinkStorage #2632
  • Logging SDK: Log warnings if user data is dropped #2630
  • Add support for RecordingStream::serve #2815

🌁 Viewer Improvements

  • Better handle scroll-to-zoom in 3D views #1764
  • Add command to screenshot the application #2293
  • Show layout in blueprint tree view #2465
  • Double-click to select entity #2504
  • Add Rerun.io link/text in top bar #2540
  • New auto-layout of space views #2558
  • Add 'Dump datastore' command to palette #2564
  • Support any dtype for depth images #2602
  • Change "Save Selection" command to Cmd+Alt+S #2631
  • Consistent transform visualization for all entities with transforms #2577
  • Improve log_pinhole and support non-RDF pinholes #2614

🚀 Performance Improvements

  • Flush the batches every 8ms instead of 50 ms #2220
  • Replace image crate jpeg decoder with zune-jpeg #2376
  • Stream .rrd files when loading via http #2412

🪳 Bug Fixes

  • Fix deadlock when misusing the Caches #2318
  • Fix unstable order/flickering of "shown in" space view list on selection #2327
  • Fix transforms not applied to connections from transform context #2407
  • Fix texture clamping and color gradient selection being displayed incorrectly #2394
  • Fix projected ray length #2482
  • Tweak the depth bias multiplier for WebGL #2491
  • Clip image zoom rectangle #2505
  • Fix missing feature flags for benchmarks #2515
  • run_all.py script fixes #2519
  • Update egui_tiles with fix for drag-and-drop-panic #2555
  • Convert objectron proto.py back to using typing.List #2559
  • Exclude from objectron/proto/objectron/proto.py from just py-format #2562
  • Fix pinhole visualization not working with camera extrinsics & intrinsics on the same path #2568
  • Fix: always auto-layout spaceviews until the user interveens #2583
  • Fix freeze/crash when logging large times #2588
  • Update egui_tiles to fix crash #2598
  • Fix clicking object with single instance (of every component) selecting instance instead of entity #2573
  • Cleanup internal data-structures when process has been forked #2676
  • Fix shutdown race-condition by introducing a flush_timeout before dropping data #2821
  • Fix ui-scale based point/line sizes incorrectly scaled when zooming based on horizontal dimension #2805
  • Fix visibility toggle for maximized Space Views #2806
  • Fix loading file via CLI #2807
  • Fix disconnected space APIs in Python SDK #2832
  • Avoid unwrap when generating authkey #2804

🧑‍🏫 Examples

  • Add example template #2392
  • Show hidden url search param in app.rerun.io #2455
  • Minimal example of running an intel realsense depth sensor live #2541
  • Add a simple example to display Open Photogrammetry Format datasets #2512
  • Move examples/api_demo -> tests/test_api #2585

📚 Docs

  • Docs: link to rr.save and suggest rerun instead of python -m rerun #2586
  • Update docs about transforms #2496
  • Fixup remaining usages of log_rigid3 in docs #2831

🎨 Renderer Improvements

  • Expose type erased draw data that can be consumed directly #2300
  • Use less mut when using RenderContext #2312

🧑‍💻 Dev-experience

  • Better error messages in build.rs #2173
  • Recommend sccache in CONTRIBUTING.md #2245
  • introduce re_tracing #2283
  • lint: standardize formatting of let-else-return statements #2297
  • Centralized build tools in re_build_tools #2331
  • Lint for explicit quotes #2332
  • Added example screenshot instructions in just upload --help #2454
  • Added support for puling image from an URL to upload_image.py #2462
  • setup_dev.sh now installs pngcrush #2470
  • Added docs/code-examples to the directories checked by py-lint and py-format #2476
  • Link to demo in PR + check checkboxes #2543
  • Add script to find external issues we haven't commented on #2532
  • Move CI-related scripts to its own folder #2561
  • Render PR description as template #2563
  • Add basic testing automation against all version of Python using nox #2536
  • Run clippy on public API too #2596
  • Bump all py-lint-related package versions #2600
  • Crates publishing script #2604
  • Fix rust docs deploy #2615
  • Add support for .gitignore to scripts/lint.py #2666

🗣 Refactors

  • Refactor space-view dependencies:
    • Move spatial space view to its own crate #2286
    • Separate crate for bar chart space view #2322
    • Separate crate for time series space view #2324
    • Separate crate for tensor space view #2334
    • Separate viewport related files out to a new re_viewport crate #2251
    • Remove timepanel dependency from viewport #2256
  • New trait system for SpaceViews:
    • Initial Space View trait & port of text space views to the new Space View trait system #2281
    • Extend/iterate on SpaceViewClass framework with SceneContext & port SpatialSpaceView scene parts #2304
    • Finalize move of SpatialSpaceView to SpaceViewClass trait framework #2311
    • Typename cleanup in SpaceViewClass framework #2321
    • Automatic fallback for unrecognized Space View Class, start removing old ViewCategory #2357
    • Rename ScenePart -> ViewPartSystem + related renamings #2674
    • Dynamically registered space view (part/context) systems #2688
  • Viewer's command queue is now a channel, allowing to queue commands without mutable access #2339
  • Break up app.rs into parts #2303
  • Break out re_log_types::component_types as re_components #2258
  • Introduce StoreHub and rename Recording->Store #2301
  • Move StoreHub out of the Viewer during Update #2330
  • Expand CommandSender to support SystemCommand #2344
  • Use camino crate for UTF8 paths in re_types_builder #2637
  • Separate 2d & 3d spaceview classes, removal of ViewCategory, SpaceViewClass driven spawn heuristics #2716
  • Move object property heuristics to heuristics.rs #2764

📦 Dependencies

  • Version rand & friends at workspace level #2508
  • Update to PyO3 0.19 #2350
  • Pin half to 2.2.1 #2587

📘 Blueprint Changes

  • Drive blueprints off of a DataStore #2010
  • Split SpaceView -> SpaceViewState + SpaceViewBlueprint #2188
  • Split the Blueprint into AppBlueprint and ViewportBlueprint #2358
  • Swap the naming of Viewport and ViewportBlueprint #2595
  • Basic persistence for blueprints #2578

🏭 New Codegen Framework

  • Codegen/IDL 1: add more build tools #2362
  • Codegen/IDL 2: introduce re_types_builder #2363
  • Codegen/IDL 3: introduce re_types #2369
  • Codegen/IDL 4: definitions for a Points2D archetype #2370
  • Codegen/IDL 5: auto-generated Python code for Points2D #2374
  • Codegen/IDL 7: handwritten Python tests and extensions for Points2D #2410
  • Codegen/IDL 6: auto-generated Rust code for Points2D #2375
  • Codegen/IDL 8: handwritten Rust tests and extensions for Points2D #2432
  • Codegen'd Rust/Arrow 1: upgrading to actual TokenStreams #2484
  • Codegen'd Rust/Arrow 2: matching legacy definitions #2485
  • Codegen'd Rust/Arrow 3: misc fixes & improvements #2487
  • Codegen'd Rust/Arrow 4: out-of-sync definitions CI detection #2545
  • Codegen'd Rust/Arrow 5: doc, definitions and regression tests for combinatorial affixes #2546
  • Codegen'd Rust/Arrow 6: serialization #2549
  • Codegen'd Rust/Arrow 7: deserialization #2554
  • Codegen'd Rust/Arrow 8: carry extension metadata across transparency layers #2570
  • Codegen'd Rust/Arrow 9: Rust backport! #2571
  • End-to-end cross-language roundtrip tests for our archetypes #2601
  • Automatically derive Debug and Clone in Rust backend #2613
  • Generating (de)serialization code for dense unions in Rust backend #2626
  • Fix FixedSizeList deserialization edge-case + trivial optimizations #2673
  • Make Datatype & Component both inherit from Loggable #2677
  • Roundtrip-able Transform3Ds #2669
  • Don't inline recursive datatypes in Rust backend #2760
  • Automatically derive tuple_struct attr and trivial From impls where possible #2772
  • Introduce roundtrip-able Points3D archetype (py + rs) #2774
  • Add fmt::Debug implementations to various types. #2784 (thanks @kpreid!)
  • Isolate testing types in Rust backend #2810
  • Fix out-of-sync codegen hash #2567
  • Python backport: add log_any() #2581
  • Integrate unit examples into codegen stack #2590
  • Disable codegen on windows #2592
  • Python codegen: big cleaning and paving the way towards transforms #2603
  • Automatically assume arrow transparency for components #2608
  • Fix wrong path being rerun_if_changed() in compute_dir_hash #2612
  • Support transparency at the semantic layer #2611
  • Don't use builtin required anymore, introduce nullable instead #2619
  • Rust codegen: generate proper docstrings #2668
  • Support nullable Arrow unions using virtual union arms #2708
  • Introduce support for querying Archetypes #2743
  • Introduce legacy shims and migrate DataCell to re_types::Component #2752

🌊 Starting work on C++

  • Seed of C and C++ SDKs #2594
  • Move C++ SDK to own folder #2624
  • C++ codegen #2678
  • C++ codegen for reporting arrow data type for structs #2756
  • Don't inline recursive datatypes in C++ backend #2765
  • C++ codegen to_arrow_data_type for unions #2766
  • C++ codegen arrow serialize non-union components/datatypes without nested rerun types #2820
  • C++ codegen of structs and unions #2707
  • Fix cpp formatter differences #2773

🤷‍♂️ Other

  • test_api: set different app_id based on what test is run #2599
  • Introduce rerun compare to check whether 2 rrd files are functionally equivalent #2597
  • Remove files.exclude in vscode settings #2621
  • Support feature-gated rust attributes #2813

0.7.0 - improved transforms, better color mapping, bug & doc fixes - 2023-06-16

Overview & Highlights

While we're working on significant updates around interfaces and customizability, here's a smaller release packed with useful improvements 🎉

  • Much more powerful transformation logging
    • any affine transforms works now!
    • supports many more formats and shows them in the viewer as-is
  • Better color mapping range detection for images and tensors
  • Many small improvements to samples & documentation

In detail

🐍 Python SDK

  • Improved 3D transform ingestion & affine transform support #2102
  • Normalize Python typing syntax to 3.8+ #2361
  • Enforce from __future__ import annotations in Python files #2377
  • Add jpeg_quality parameter to log_image #2418

🦀 Rust SDK

  • Improved 3D transform ingestion & affine transform support #2102
  • impl Copy for Arrow3D. #2239 (thanks @kpreid!)

🪳 Bug Fixes

  • Stable image order, fixing flickering #2191
  • Fix double clicking objects no longer focusing the camera on them #2227
  • Fix off-by-half pixel error in textured rectangle shader #2294
  • Update wgpu-hal to 0.16.1 to fix mobile Safari #2296
  • Fix some browsers failing due to 8k texture requirement, pick always highest available now #2409
  • Fix visibility toggles for time series not working #2444

🌁 Viewer Improvements

  • Time panel now always talks about "events" instead of "messages" #2247
  • Automatically determine image/tensor color mapping & need for sRGB decoding #2342

🚀 Performance Improvements

  • Optimization: avoid a memory allocation when padding RGB u8 to RGBA #2345

🧑‍🏫 Examples

  • Example of how to embed the Rerun Viewer inside your own GUI (+ ergonomic improvements) #2250
  • Objectron Rust example: install protoc for the user #2280
  • Remove weird-looking argument parsing in examples #2398
  • Fix tracking_hf example: put scaled thing under its own root entity #2419
  • Clean up our examples #2424
  • New face detection example based on MediaPipe #2360
  • Update web examples #2420
  • Update titles and tags for examples with real data #2416

📚 Docs

  • Merge rerun-docs repository into this monorepo #2284
  • Add manifest + readmes to examples #2309
  • Fix and clean up BUILD.md #2319
  • Link to /examples in PR description #2320
  • Make examples setup a separate page #2323
  • Add site_url to mkdocs.yml #2326
  • Add log_cleared to the common index #2400
  • Use forked mkdocs-redirects #2404
  • Add support for classes to generated python common API index #2401
  • Added support for creating multi-resolution stacks with upload_image.py #2411
  • Document annotation context in manual #2453

🕸️ Web

  • Update wasm-bindgen to 0.2.87 #2406
  • When loading on web, match style and show a progress indicator while wasm is loading #2421

📈 Analytics

  • Add crash retriever script #2168

🧑‍💻 Dev-experience

  • Image uploader script #2164
  • Replace wasm-bindgen-cli with library wasm-bindgen-cli-support #2257
  • Fix manual release/dispatch workflows #2230
  • Add instructions on how to fix weird gsutil crash #2278
  • Link to preview of latest commit in PR body #2287
  • CI: Retry linkinator #2299
  • Remove long dead code python unit test #2356
  • Added gcloud project name to upload_image.py #2381
  • Fix typo in run_all.py #2441
  • Small changelog improvements #2442
  • Minor fixes/improvements of upload_image.py #2449
  • Improve changelog generator #2447

🗣 Refactors

  • Centralize freestanding store helpers #2153

📦 Dependencies

  • Update xml-rs v0.8.13 -> v0.8.14 #2425
  • Update pip package requests to 2.31 with bug fix #2426

0.6.0 - 3D in 2D and SDK batching - 2023-05-26

Overview & Highlights

  • You can now show 3D objects in 2D views connected by Pinhole transforms #2008
  • You can quickly view images and meshes with rerun mesh.obj image.png #2060
  • The correct to install the rerun binary is now with cargo install rerun-cli #2183
  • native_viewer is now an opt-in feature of the rerun library, leading to faster compilation times #2064
  • Experimental WebGPU support #1965
  • SDK log calls are now batched on the wire, saving CPU time and bandwidth

In Detail

🐍 Python SDK

  • ⚠️ BREAKING: You must now call rr.init if you want logging to work.
  • ⚠️ BREAKING: set_enabled has been removed. In order to disable logging at runtime, call set_global_data_recording(None). See also the doc section on this topic.
  • log_mesh_file: accept either path or bytes #2098
  • Add draw_order to 2D primitives #2138
  • Add rr.version() #2084
  • Add an experimental text-box component and logtype #2011
  • Fix a race condition for notebooks #2073
  • Redesign multi-recording & multi-threading #2061
  • More robust wait for exit condition during .serve() #1939
  • SDK batching/revamp 3: sunset PythonSession #1985

🦀 Rust SDK

  • ⚠️ BREAKING: set_enabled has been removed. In order to disable logging at runtime, create a no-op recording via RecordingStream::disabled(). See also the doc section on this topic.
  • ⚠️ BREAKING: Session has been replaced by RecordingStream #1983
  • ⚠️ BREAKING: native_viewer is now an opt-in feature of the rerun library #2064
  • Rust SDK: bring back support for implicit splats #2059
  • Introduce a 2D DrawOrder component #2056
  • Add Tensor::from_image_file and Tensor::from_image_bytes #2097
  • Redesign multi-recording & multi-threading #2061

🌁 Viewer Improvements

  • Support projecting 3D entities in 2D views #2008
  • Set Rerun viewer native app icon using eframe #1976
  • Use alt key again for rolling camera in 3d views #2066
  • Show tensors shaped [H, W, 1, 1] as images (and more!) #2075
  • Show meshes and images with rerun foo.obj bar.png #2060
  • Don't persist blueprints for unknown apps #2165

🪳 Bug Fixes

  • Fix hover/select highlights when picking single points in a scene with multiple point clouds #1942
  • Fix crash for missing class ids causing zero sized texture #1947
  • Handle leaking of prerelease into alpha version #1953
  • Fix incorrect memory usage stats for destroyed on-creation-mapped buffers #1963
  • Fix: don't starve web-socket decoding task #1977
  • When hovering a 3D view in the presence of images, fix previously incorrect depth shown in 2D view #2009
  • Fix: use the mac icon on mac #2023
  • SDK batching/revamp 2.2: homegrown arrow size estimation routines #2002
  • Fix twice as wide alpha-to-coverage edge on circles, leading to artifacts #2053
  • Bugfix: allow hovered items to be clicked to set selection #2057
  • Detect, warn and gracefully handle corrupt cells in lookup_arrow #2055
  • Fix failing dependency install of mesh_to_sdf #2081
  • Stop playback when we reach the end of the data #2085
  • tornado >6.1 doesn't work with recent jupyter #2092
  • Premultiply alpha of RGBA u8 images #2095
  • Fix premature pausing when reaching end of still-streaming stream #2106
  • 2D layering fixes #2080
  • Fix depth precision issues on WebGL due to different NDC space #2123
  • Fix flushing race in new multi-recording SDK #2125
  • Web viewer: catch and show panic messages that happens at startup #2157
  • Don't early-exit on non-pinhole transforms when looking up cameras #2194
  • Mitigate depth offset precision issues on web #2187
  • Fix colormaps #2204
  • Fix annotation images sometimes drawn in the background #1933
  • Fix hovering depth clouds #1943
  • Fix incorrect 2D camera for scenes with negative 2D coordinates #2051
  • Fix web depth/projection regression, causing incorrect rendering on all 3D scenes #2170

🚀 Performance Improvements

  • SDK batching/revamp 1: impl DataTableBatcher #1980
  • Upgrade arrow2/convert and use native buffers for the tensor u8 types #1375
  • Use the same RRD encoding for the SDK comms as for everything else #2065
  • Optimize GLTF/GLB texture loading in debug builds #2096
  • Premultiply the alpha on the GPU #2190
  • Switch compression algorithm from zstd to lz4 #2112
  • Support RRD streams with and without compression. Turn off for SDK comms #2219

🧑‍🏫 Examples

  • Join threads at end of multi-threading example #1934
  • Add argument parsing to the rerun_demo #1925
  • Use zipfile python library instead of unzip command in arkitscene #1936
  • Fix backslashes in arkitscene rigid transformation path #1938
  • Fix mp_pose example 2D points having incorrectly interpreted depth #2034
  • SDK batching/revamp 2.1: clock example for Rust #2000
  • Add scripts/run_all.py #2046
  • Check examples/python/requirements.txt in CI #2063
  • Fix glb mesh data set downloads #2100
  • Add more examples to https://app.rerun.io/ #2062

🖼 UI Improvements

  • Update egui to latest and wgpu to 0.16 #1958
  • Add keyboard shortcut for "Follow", and stop following on "Restart" #1986 (thanks @h3mosphere!)
  • Improve UI for keypoint and class-ids of annotations contexts #2071
  • Improvements to memory measurements and reporting #2069
  • Switch from egui_dock to egui_tiles #2082
  • Allow horizontal scrolling in blueprint panel #2114
  • Nicer (& fixed up) help texts for space views #2070
  • Allow dragging time cursor in plots #2115

🕸️ Web

🎨 Renderer Improvements

  • Full (experimental) WebGPU support #1965
  • Depth offset for lines & points #2052
  • Update to wgpu 0.16.1 #2205

🚜 Refactors

  • Replace complex uses of query_entity_with_primary with query_latest_single #2137
  • Make selection state independent of blueprint #2035
  • Remove unused MeshSourceData #2036
  • Move selection state into an independent crate, re_viewer_context #2037
  • Move item-ui to separate module, move AppOptions to re_viewer_context #2040
  • Move Caches to re_viewer_ctx and make it generic #2043
  • Move time control to re_viewer_context #2045
  • Move ViewerContext & ComponentUiRegistry to viewer_context #2047
  • Move data ui to new re_data_ui crate #2048
  • Use instant for Time::now() #2090
  • Move from instant -> web_time #2093
  • "namespace" flag parameters for linestrip & point cloud shader flags #2033

✨ Other Enhancement

  • Update minimum supported Rust version to 1.69.0 #1935
  • Allow users to select the bind address (ip) to use with --bind #2159

🧑‍💻 Dev-experience

  • Suggest users open an issue on crash, and other fixes #1993
  • Lint error names in map_err #1948
  • New dispatch-only workflow for running the lint-job #1950
  • Move clippy_wasm/clippy.toml to under scripts #1949
  • Fix run-wasm crash on trying to wait for server #1959
  • Introduce new reusable workflow jobs and cleanup manual trigger #1954
  • Use new CI workflows on pull-request #1955
  • Try making pull-request workflows non-concurrent #1970
  • Another attempt to make jobs non-concurrent on a per-PR basis #1974
  • If there's a {{ pr-build-summary }} in the PR description, update it. #1971
  • Run the cube notebook on PR #1972
  • Add ability to manually run a web build to upload to an adhoc name #1966
  • Limit ipython to 8.12 in the jupyter example #2001
  • New manual job to publish a release based on pre-built wheels #2025
  • Use the correct rust analyzer settings #2028
  • New helper for sticking Serde-encodable data into arrow #2004
  • Fix taplo-cli failing to install #2068
  • run_all.py: add --fast, --separate, and --close #2054
  • Remove Clipboard::set_text #2078
  • run_all.py: print output on sequential run failure #2079
  • Use the american spelling of "gray" #2099
  • Make sure rerun/rerun_py/re_viewer build info is updated on each build #2087
  • Fix setup scripts for Mac M1/MacPort configuration #2169 (thanks @abey79!)
  • Better error messages in build.rs #2173
  • cargo install rerun-cli #2183
  • Fix cargo test #2199
  • Fix run all for new rust-cli target & add rerun-web alias for quick running of the web player #2203

🤷‍♂️ Other

0.5.1 - Patch Release - 2023-05-01

Overview & Highlights

This Release fixes a few small bugs on top of the v0.5.0 release.

In Detail

  • Bump hyper version due to RUSTSEC-2023-0034 #1951
  • Round to nearest color_index when doing color mapping #1969
  • Use an sRGB-correct gray gradient when displaying grayscale images #2014
  • Don't use console.error #1984
  • Fix failure to save files when split table contains no data #2007

0.5.0 - Jupyter MVP, GPU-based picking & colormapping, new datastore! - 2023-04-20

Overview & Highlights

This new release adds MVP support for embedding Rerun in Jupyter notebooks, and brings significant performance improvements across all layers of the stack.

  • Rerun can now be embedded in Jupyter notebooks
    • Tested with Jupyter Notebook Classic, Jupyter Lab, VSCode & Google Colab; checkout our How-to guide
    • Try it out live on Google Colab
  • All colormapping tasks are now done directly on the GPU
    • This yields very significant performance improvements for colormapping heavy workload (e.g. segmentation)
    • Try it out in our new segment_anything example that shows off the latest models from Meta AI
  • GPU picking & hovering now works with all of our primitives, including meshes & depth clouds
    • This fixes all the shortcomings of the previous CPU-based system
    • Rerun's automatic backprojection of depth textures ("depth clouds") is now feature complete
    • Try it out in our updated nyud example
  • Our datastore has been completely revamped to more closely match our latest data model
    • This yields very significant performance improvements for workloads with many events
    • Checkout this post for a detailed walkthrough of the changes

In Detail

🐍 Python SDK

  • Document that we also accept colors in 0-1 floats #1740
  • Don't initialize an SDK session if we are only going to be launching the app #1768
  • Allow torch tensors for log_rigid3 #1769
  • Always send recording_id as part of LogMsg #1778
  • New reset_time API #1826 #1854
  • Always flush when we remove a sink #1830
  • More robust wait for exit condition during .serve() #1939

🪳 Bug Fixes

  • Fix broken outlines (hover/select effect) for lines #1724
  • Fix logged obb being displayed with half of the requested size #1749 (thanks @BenjaminDev!)
  • Fix log_obb usage #1761
  • Always create the log_time timeline #1763
  • Fix undo/redo selection shortcut/action changing selection history without changing selection #1765
  • Fix various crashes #1780
  • Fix crash when trying to do picking on depth clouds d94ca3dd35e73e1984ccb969d0c7abd0d3e0faa9
  • ci: fix benchmarks #1799
  • ci: fix cargo deny #1806
  • Fix "too many points" crash #1822
  • Allow re-use of RowIds if no conflict is possible #1832
  • Reduce memory used by staging belts on Web #1836
  • Test and handle all tensor dtypes as images #1840
  • Fix the python build when running without web_viewer enabled #1856
  • Error instead of expect inside msg_encode #1857
  • Fix shutdown race condition in re_sdk_comms client #1861
  • Fix broken instance picking in presence of images #1876
  • Make sure JPEGs are always decoded #1884
  • Fix crash when saving store to file #1909
  • Don't clean up LogDbs that only contain a BeginRecordingMsg #1914
  • Fix picking entities with image + another object (or label) twice #1908
  • Fix double clicking camera no longer focusing on said camera #1911
  • Fix annotation images sometimes drawn in the background #1933
  • Use zipfile python library instead of unzip command in arkitscene demo #1936
  • Fix backslashes in arkitscene rigid transformation path #1938
  • Fix hover/select highlights when picking single points in a scene with multiple point clouds #1942
  • Fix hovering depth clouds #1943

🚀 Performance Improvements

  • batching 4: retire MsgBundle + batching support in transport layer #1679
  • Optimize the depth-cloud shader when depth=0 #1729
  • arrow2_convert primitive (de)serialization benchmarks #1742
  • arrow2 estimated_bytes_size benchmarks #1743
  • arrow2 erased refcounted clones benchmarks #1745
  • benchmarks for common vector ops across smallvec/tinyvec/std #1747
  • Columnar TimePoints in data tables and during transport #1767
  • Compile with panic = "abort" #1813
  • Process 2D points per entities like 3D points #1820
  • re_query: use latest data types (DataRow/DataCell) #1828
  • Depth cloud textures are now cached frame-to-frame #1913

🧑‍🏫 Examples

  • Add new ARKitScenes example #1538 (thanks @pablovela5620!)
  • New example code for Facebook research's segment-anything #1788
  • Add minimal_options example for Rust SDK #1773 (thanks @h3mosphere!)
  • Remove manual depth projection from car and nyud examples #1869
  • Always spawn instead of fork in multiprocessing example #1922
  • Add --num-frames arg to canny (webcam) example #1923
  • Add argument parsing to rerun_demo #1925
  • Join threads at end of multithreading example #1934

📚 Docs

  • Add typing_extensions to requirements-doc.txt #1786
  • Fix typos in notebook readme #1852
  • Update docs related to notebook #1915

🖼 UI Improvements

  • Hover rays for tracked 3D cameras #1751
  • Collapse space-view by default if there is only one child #1762
  • Option to show scene bounding box #1770
  • Assign default colors to class-ids when annotation context is missing #1783
  • Add Restart command and keyboard shortcut for moving time to start of timeline #1802 (thanks @h3mosphere!)
  • New option to disable persistent storage #1825
  • Show previews of colormaps when selecting them #1846
  • Smooth out scroll wheel input for camera zooming #1920

🤷‍♂️ Other Viewer Improvements

  • Change EntityPathHash to be 64 bit #1723
  • Central GpuReadback handling for re_viewer, experimental space view screenshots #1717
  • Readback depth from GPU picking #1752
  • Use GPU picking for points, streamline/share picking code some more #1814
  • Use GPU picking for line(like) primitives, fix interactive flags #1829
  • Use GPU colormapping when showing images in the GUI #1865

🕸️ Web

  • Make CI publish latest tagged web-viewer to app.rerun.io #1725
  • Implement re_tuid::Tuid::random() on web #1796
  • Refactor the relationship between the assorted web / websocket servers #1844
  • Notebooks: make presentation_id consistent and use data-attribute for rrd #1881
  • 2.5GB before GC kick in on web #1944

🎨 Renderer Improvements

  • GPU based picking with points #1721
  • improved renderer label handling #1731
  • Improved readback data handling #1734
  • GPU based mesh picking #1737
  • Improve dealing with raw buffers for texture read/write #1744
  • GPU colormapping, first step #1835
  • GPU tensor colormapping #1841
  • GPU picking for depth clouds #1849
  • Implement billinear filtering of textures #1850 #1859 #1860
  • Refactor: remove GpuTexture2DHandle::invalid #1866
  • Fix filtering artifact for non-color images #1886
  • Refactor: Add helper functions to GpuTexture2DHandle #1900

🛢 Datastore Improvements

  • Datastore: revamp bench suite #1733
  • Datastore revamp 1: new indexing model & core datastructures #1727
  • Datastore revamp 2: serialization & formatting #1735
  • Datastore revamp 3: efficient incremental stats #1739
  • Datastore revamp 4: sunset MsgId #1785
  • Datastore revamp 5: DataStore::to_data_tables() #1791
  • Datastore revamp 6: sunset LogMsg storage + save store to disk #1795
  • Datastore revamp 7: garbage collection #1801
  • Incremental metadata registry stats #1833

🗣 Merged RFCs

  • RFC: datastore state of the union & end-to-end batching #1610

🧑‍💻 Dev-experience

  • Post-release cleanup #1726
  • Remove unnecessary dependencies #1711 (thanks @vsuryamurthy!)
  • Use copilot markers in PR template #1784
  • re_format: barebone support for custom formatting #1776
  • Refactor: Add new helper crate re_log_encoding #1772
  • setup_web.sh supports pacman package manager #1797 (thanks @urholaukkarinen!)
  • Add rerun --strict: crash if any warning or error is logged #1812
  • End-to-end testing of python logging -> store ingestion #1817
  • Fix e2e test on CI: Don't try to re-build rerun-sdk #1821
  • Install the rerun-sdk in CI using --no-index and split out linux wheel build to run first #1838
  • Remove more unused dependencies #1863
  • Improve end-to-end testing slightly #1862
  • Turn off benchmarks comment in each PR #1872
  • Fix double-negation in scripts/run_python_e2e_test.py #1896
  • Improve PR template with better comment, and no copilot by default #1901
  • Optimize generate_changelog.py #1912

🤷‍♂️ Other

0.4.0 - Outlines, web viewer and performance improvements - 2023-03-28

release.0.4.0.mp4

Overview & Highlights

  • Add support for mesh vertex colors #1671
  • Lower memory use #1535
  • Improve garbage collection #1560
  • Improve the web viewer #1596 #1594 #1682 #1716
  • Nice outlines when hovering/selecting
  • Add an example of forever-streaming a web-camera image to Rerun #1502
  • Fix crash-on-save on some versions of Linux #1402
  • And a lot of other bug fixes
  • Many performance improvements

We now host an experimental and unpolished web-viewer at https://app.rerun.io/ for anyone to try out!

In Detail

🐍 Python SDK

  • Expose all Rerun enums and types to main module scope #1598
  • Make log_point more forgiving and update docstring #1663
  • Add support for mesh vertex colors #1671

🦀 Rust SDK

  • ⚠️ Session::new has been replaced with SessionBuilder #1528
  • ⚠️ session.spawn(…) -> rerun::native_viewer::spawn(session, …) #1507
  • ⚠️ session.show() -> rerun::native_viewer::show(session) #1507
  • ⚠️ session.serve(…) -> rerun::serve_web_viewer(session, …); #1507
  • ⚠️ rerun::global_session is now hidden behind the global_session feature flag #1507
  • Add support for mesh vertex colors #1671

🪳 Bug Fixes

  • datastore: disable compaction (fixes 2x memory issue) #1535
  • Fix garbage collection #1560
  • Avoid using undefined extern "C" on windows #1577
  • Fix crash on decoding old .rrd files #1579
  • datastore: stabilize dataframe sorts #1549
  • Stop using infinities in wgsl shaders #1594
  • Workaround for alpha to coverage state leaking on (Web)GL renderer #1596
  • Use a patched wasm-bindgen-cli with fix for 2GiB bug #1605
  • Misc: make example in log_pinhole runable #1609 (thanks @Sjouks!)
  • Early-out on zero-sized space-views to prevent crashes #1623
  • Print our own callstack on panics #1622
  • Handle ctrl+c to gracefully shutdown the server(s) #1613
  • Fix crash on serve exit, second attempt #1633
  • Fix wrong remove-tooltip for entities and groups #1637
  • Fix requiring requiring focus for shutdown via ctrl+c when starting viewer from command line #1646
  • Fix eye spin after eye reset #1652
  • Fix crash on negative radii by instead warning #1654
  • Fix crash when trying to listen on a taken TCP port #1650
  • Don't show 2D labels in 3D space views. #1641
  • Fix Z fighting with improved depth offset math #1661
  • Whether a spatial view is 2d or 3d is now reevaluated over time unless picked explicitly #1660
  • Update wgpu to v0.15.3, fixing meshes on Windows Chrome #1682
  • Fix a bug in the image hover code, causing the wrong RGBA values to be printed #1690
  • Fix a bug that caused points to be render too large #1690
  • Fix web crash on missing uniform buffer padding #1699
  • Fix memory_usage example relying on implicit recursive features #1709
  • Track changed state in nav mode combo box #1703
  • Fix crash-on-save by switching file-picker dialog to xdg-portal #1402
  • Change roll-shortcut from ALT to SHIFT #1715
  • Fix CpuWriteGpuReadBelt producing unaligned gpu buffer offsets #1716
  • Fix arrows requiring a radius to be visible #1720

🚀 Performance Improvements

  • Add re_arrow_store profile scopes #1546
  • datastore: early exit missing components at table level #1554
  • datastore: track bucket count in store stats & mem panel #1555
  • LogDb: dont split on index bucket size #1558
  • Introduce a simpler cache dedicated to just decode JPEGs #1550
  • Implement outlines for points 2d/3d/depth & use them for select & hover in Viewer #1568
  • Simplify ImageCache #1551
  • New time panel density graph #1557
  • Refactor the Arrow Mesh3D type to use zero-copy Buffers #1691
  • Remove the redundant costly transform check during categorization #1695
  • batching 3: DataRow & DataTable + no bundles outside of transport #1673

🧑‍🏫 Examples

  • Very simple example streaming from an opencv camera #1502
  • Initial TurtleBot subscriber demo #1523

📚 Docs

  • Link to the Python SDK build instructions in rerun_py/README.md #1565

🖼 UI Improvements

  • Fix combining outline mask for selection & hover #1552
  • Implement outlines for rectangles & use them for select & hover of image primitives in Viewer #1559
  • Show log messages in egui toast notifications #1603
  • Adapt UI for smaller screens #1608
  • Nicer toast notifications #1621
  • Don't hover things in 2D/3D views if we are dragging something #1643
  • Allow rolling 3D camera with primary mouse button + alt modifier #1659
  • Name space views after the space and indicate duplicate names #1653
  • Add banner about mobile browsers being unsupported #1674
  • Improve ui for tensors and color map selection #1683
  • Only show the mobile OS warning banner on web #1685
  • Improve the depth backprojection feature #1690
  • Swap overlay order of selection & hover outlines #1705
  • Turn on depth cloud backprojection by default #1710
  • Add radius boost for depth clouds on outline #1713

🤷‍♂️ Other Viewer Improvements

  • Fix web feature name in error messages #1521
  • Use outlines for mesh selections instead of highlight colors #1540
  • Implement outlines for line renderer & use them for select & hover of "line-like" primitives in Viewer #1553
  • Load .rrd file over HTTP #1600
  • Revert "Handle ctrl+c to gracefully shutdown the server(s)" #1632
  • More eager GC, and remove --fast-math optimization for wasm #1656
  • Detect failure to install GUI log callback #1655
  • Warn when most of the RAM has been used up by Rerun #1651
  • Apply color maps to all types of depth tensors #1686
  • Size boosted outlines for points & lines, color & size tweaking #1667
  • Default point radius to 1.5 ui points #1706
  • When streaming an rrd from http: play it, don't follow it #1707

🕸️ Web

  • Use log as our log backend instead of tracing #1590
  • Turn on allocation tracker at run-time and for web #1591
  • Set correct MIME types in re_web_viewer_server #1602
  • Upload web viewer to a bucket #1606
  • Use hostname for default websocket address #1664
  • Upload the colmap rrd file to gcloud #1666
  • Show a warning by default on mobile browsers #1670
  • Add analytics to the hosted index.html #1675
  • Always upload latest prerelease to a dedicated prefix #1676
  • Allow url param override on app.rerun.io #1678
  • Show the git commit in the about section in pre-release builds #1677
  • Update the web icon #1688

🎨 Renderer Improvements

  • Outlines via masking & postprocessing in re_renderer #1532
  • Add missing profiling scopes in re_renderer #1567
  • Don't call wgpu::Device::poll on the web #1626
  • Merge final outline render into composite step in order to fix blending #1629
  • renderer: fix the groupby logic in mesh instancing #1657
  • Fix outlines being offset diagonally by about half a pixel #1668
  • Gpu readback belt for fast & easy data readback from gpu #1687
  • Make CpuWriteGpuReadBelt texture copies easier/less error prone #1689

✨ Other Enhancement

  • datastore: split out formatting & sanity checks in their own modules #1625
  • Add rerun --save: stream incoming log stream to an rrd file #1662
  • batching 1: introduce DataCell & retire ComponentBundle #1634
  • Data store batching 2: split out component traits #1636

📈 Analytics

  • Analytics: don't spam warning when there is an HTTP connection problem #1564
  • Analytics: Rename "location" to "file_line" in the "crash-panic" event #1575

🗣 Merged RFCs

  • RFC: component-datatype conversions #1595
  • RFC: pre-proposal for blueprint store #1582

🧑‍💻 Dev-experience

  • Update rayon #1541
  • Fix some 1.68 clippy lints #1569
  • Remove duplicated 'nix' crate #1479
  • Better MsgId format #1566
  • Lint vertical spacing in Rust code #1572
  • CI: Replace wasm_bindgen_check.sh with actually building the web-viewer #1604
  • Add --all-features to Rust Analyzer flags #1624
  • Run clippy for wasm, with own clippy.toml config file #1628
  • Update tokio v1.24.1 -> v1.26.0 #1635
  • Add a workflow input for running benchmarks manually #1698
  • Add missing } to fix rust workflow #1700
  • Fix lint.py #1719
  • Add a script that generates a changelog from recent PRs and their labels #1718

🤷‍♂️ Other

0.3.1 - Remove potentially sensitive analytics - 2023-03-13

Remove potentially sensitive analytics, including path to rerun source code on panics, and rerun branch name when building from source #1563

0.3.0 - 2023-03-07

Overview & Highlights

After a successful launch a couple of weeks ago, we're back with our second release! With a few exceptions this release focuses on internal refactors & improving our processes. However, we think you'll enjoy these goodies that made it in nonetheless!

23-03-02_18.44.38.patched.mp4

You can now generate point clouds directly from depth textures and choose a wide variety of color maps. Check out this video on how to use it. This is a lot faster and more convenient than doing so manually in your own code Some caveats: Picking is not yet working and visible history may behave differently (related to #723)

Other highlights:

  • Viewer
    • Improved formatting of date-times in plots #1356
    • Labels for 3D objects have now a color can now be selected & hovered #1438
    • Scale factor is saved across sessions and more persistent between screens #1448
    • Showing tensors in the viewer is now faster
  • SDK
    • Python packages now work with Ubuntu-20.04 #1334
    • u8 segmentation stay u8 now (they converted to u16 before) #1376
    • 2D Line strips can now be logged directly #1430
    • Add a strict mode to the Python SDK where misuses of the API result in exceptions being raised.#1477
    • Fix disabling Python API through init not working #1517
  • General
    • We build now with fewer build dependencies (there is however still more work to do!). Notably, we previously used a version of the time crate which had a security issue (CVE-2020-26235), thanks @mpizenberg for helping out!
    • Print more information & troubleshooting info on crash

Meanwhile, we did a bunch of improvements to our manual. If you had trouble running Rerun so far, check our updated troubleshooting page (and as always, please open an issue if something doesn't work).

⚠️ BREAKING: old .rrd files no longer load ⚠️

In Detail

New Features

  • Generate point clouds directly from depth textures
    • re_renderer: implement depth cloud renderer #1415
    • Integrate depth clouds into Rerun #1421
    • CPU & GPU color maps #1484
    • Integrate GPU color maps into depth clouds #1486
  • Python SDK: Add strict mode #1477
  • OS independent Zoom factor & serialization thereof #1448
  • Labels for 3D objects have now a color can now be selected & hovered #1438
  • Add 2d support for linestrips #1430
  • Add signal handler on *nix with troubleshooting and stacktrace #1340
    • Point users to our troubleshooting page on panic #1338

Performance

  • Speed up conversions for color arrays in Python #1454
  • Speed up fixed-sized array iteration #1050
  • Speed up tensor handling by padding data through more directly
    • Direct conversion to dynamic image from Tensors #1455
    • Convert view_tensor to use the new native Tensors #1439
  • Add option to show performance metrics in the UI in release builds too #1444
  • Faster stable diffusion sample #1364
  • SDK: stream to disk with save feature #1405
  • re_renderer has now a direct CPU->GPU copy mechanism
    • CpuWriteGpuReadBelt for fast frame by frame memory transfers #1382
    • Uniform buffer utility using CpuWriteGpuReadBelt #1400
    • Use CpuWriteGpuReadBelt for mesh data gpu upload #1416

Small improvements & Bugfixes

  • UI
    • Add scroll-bars the "Add/Remove entities" window #1445
    • Unify the time formatting between the time panel and the plot #1369
    • Timeline
      • Fix precision issue when zooming in on the timeline #1370
      • Improve the gap-detector #1363
    • Better time axis on plot view #1356
    • Prevent wrap on 'Streams' text #1308
    • Update to eframe 0.21.3 with fix for web text input #1311
  • re_renderer
    • Fix crash due to always expecting Rgba8Unorm backbuffer on Web & Bgra8Unorm on native #1413
    • Allow controlling the graphics backend & power preference through standard wgpu env vars #1332
  • Heuristic for camera frustum length is now based on scene size #1433
  • Fix python type signature for tensor names #1443
  • Don't convert u8 segmentation images to u16 #1376
  • Docs (excluding the manual)
    • Improve the docs of connect and serve #1450
    • Update log_mesh and log_meshes docs. #1286
    • Add guidelines for adding dependencies in a PR #1431
    • Add a few more sections to CODE_STYLE.md #1365
    • Fixup for some doc links #1314
    • Document undocumented environment variables on help page. #1335
    • Link to SDK operating modes doc in both SDK #1330
  • More information in --version #1388
  • Remove already broken show method from Python SDK #1429
  • Analytics
    • Send analytics events with callstacks on panics and signals #1409
    • Put all analytics to one bucket #1390
    • add event for when we serve the web-viewer .wasm #1379
    • register SDK language and data source #1371
    • Refactor analytics #1368
  • Versioned log streams streams #1420
  • Fix path issues when running debug viewer within workspace #1341
  • Detailed errors for re_renderer include_file! #1339
  • Limit logging in web-viewer to warn in order to workaround a crash issue (and reduce log spam) 1514
  • Fix disabling API through init not working #1517

CI, Testing & Build improvements

  • Reduce build dependencies
    • Get rid of time 0.1.* dependency #1408
    • Remove unnecessary ordered-float #1461
    • Remove extraneous image features and dependencies #1425
    • Replace reqwest with ureq #1407
    • Remove derive_more dependency #1406
  • Use different artifact names for wasm/js in debug builds #1428
  • Separate mac wheels & trigger wheel build from ui #1499
  • Add spell checking to CI #1492
  • Repo size
    • Always create new orphaned branch for gh-pages #1490
    • GitHub Action to prevent large files #1478
  • Python
    • Remove the python job path filters #1452
    • Use ruff for our python lints #1378
    • Use python3 in the jobs that weren't tested in PR #1348
  • Testing
    • Add a test of memory use when logging a lot of big images #1372
  • Switch ci_docker to a container based on ubuntu 20.04 #1334
  • Release handling
    • Switch release action to ncipollo #1489
    • Fix our continuous pre-releases #1458
    • Delete the prerelease before creating the new one #1485
    • Set prerelease to true even for version-tagged CI job #1504
    • Let the release job take care of creating the tag #1501
    • Use cargo update -w instead of cargo check when prepping prerelease #1500
    • Use prerelease tag instead of latest and update pointer on prerelease #1481
    • Include date in pre-release version #1472
    • Switch pre-release action to ncipollo/release-action #1466
  • Disallow some methods and types via Clippy#1411

Other non-user-facing refactors

  • Fix: don't create a dummy LogDb when opening the Rerun Menu #1440
  • re_renderer
    • Draw Phases in preparation of executing Renderer several times on different targets #1419
      • Fix mesh creation failing to copy index data. #1473
      • do not silently drop draw phases #1471
    • Simplify bind group allocation call by passing pool collection object. #1459
    • Interior mutable buffer/texture/bindgroup pools #1374
    • Rename all instances of frame_maintenance to begin_frame #1360
    • Texture & buffer call now wgpu's destroy on removal from pool #1359
    • Arrow buffers as (optional) first-class citizen #1482
    • Log static re_renderer resource generation #1464
  • Internal log_text_entry_internal to break circular deps #1488
  • Delete ClassicTensor and cleanup #1456
  • Fix re_renderer file watcher watching the same file several times #1463
  • Analytics
    • More ergonomic API #1410
    • Streamlining host vs. recorder python/rust versions #1380
    • Fix workspace detection #1437
  • Introduce DeserializableComponent trait and high-level query_latest #1417

Full Changelog

0.2.0 - 2023-02-14

First public release!