Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
jazzy

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
kilted

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
lyrical

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
rolling

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro foxy showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro lunar showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro jade showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro indigo showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro kinetic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file

No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

cloudini repository

cloudini_lib cloudini_ros

ROS Distro
humble

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
cloudini_lib 1.4.1
cloudini_ros 1.4.1

README

   
Packages Release Conan Center License
Build Ubuntu Windows macOS Pixi Package
ROS 2 Humble Jazzy Lyrical Rolling

Cloudini

Cloudini (pronounced with Italian accent) is a pointcloud compression library.

Its main focus is speed, but it still achieves very good compression ratios.

Its main use cases are:

  • To improve the storage of datasets containing pointcloud data (being a notable example rosbags).

  • Decrease the bandwidth used when streaming pointclouds over a network.

It works seamlessly with PCL and ROS, but the main library can be compiled and used independently, if needed.

What to expect

The compression ratio is hard to predict because it depends on the way the original data is encoded.

For example, ROS pointcloud messages are extremely inefficient, because they include some “padding” in the message that, in extreme cases, may reach up to 50%.

(Yes, you heard correctly, almost 50% of that 10 Gb rosbag is useless padding).

But, in general, you may expect considerably better compression, at a similar or higher speed, than ZSTD or LZ4 alone.

These are measurements on real-world clouds from 13 sensors (public datasets and the samples in this repository), with the 1.4.0 defaults: V6 at 1 mm resolution, refined to the data, followed by ZSTD. “ZSTD alone” is ZSTD level 1, the level Cloudini uses, on the same raw cloud.

Compressed size per sensor

Cloudini adds little or no time on top of ZSTD, because ZSTD has much less data left to compress: encoding is 1.4–2× faster than ZSTD alone on the Velodyne clouds, the PCD sample and the stereo cloud, and 0.87–1.05× its speed on Ouster and Hesai. Decoding runs at 0.67× (Hesai) to 1.42× (KITTI) the speed of ZSTD alone.

Encode and decode throughput per sensor

Measured on one pinned core of an i7-13700H laptop, best of 5 runs.

You can measure the compression ratio and speed on your own data with mcap_codec_benchmark, built with cloudini_lib (no ROS needed), on any MCAP file containing sensor_msgs/msg/PointCloud2 topics:

./build/release/tools/mcap_codec_benchmark my_bag.mcap --mode V6 --zstd

How it works

The algorithm contains two steps:

  1. Encoding the pointcloud, channel by channel.
  2. Compression using either LZ4 or ZSTD.

The encoding is lossy for floating point channels (typically the X, Y, Z channels) and lossless for RGBA and integer channels (packed colors stored in a FLOAT32 field named rgb/rgba are detected by name and never quantized).

Now, I know that when you read the word “lossy” you may think about grainy JPEGS images. Don’t.

The encoder applies a quantization using a resolution provided by the user.

Typical LiDARs have an accuracy/noise in the order of +/- 1 cm. Therefore, using a resolution of 1 mm (+/- 0.5 mm max quantization error) is usually a very conservative option.

Compile instructions

Some dependencies are downloaded automatically using CPM. To avoid downloading them again when you rebuild your project, I suggest setting CPM_SOURCE_CACHE as described here.

To build the main library (cloudini_lib)

cmake -B build/release -S cloudini_lib -DCMAKE_BUILD_TYPE=Release
cmake --build build/release --parallel

ROS compilation

To compile it with ROS, just pull this repo into your ws/src folder and execute colcon build as usual.

ROS specific utilities

For more information, see the cloudini_ros/README.md

  • point_cloud_transport plugins: see point_cloud_transport plugins for reference about how they are used.

  • cloudini_topic_converter: a node that converts a sensor_msgs/PointCloud2 topic into a compressed point_cloud_interfaces/CompressedPointCloud2 (compressing:=true), or vice-versa (compressing:=false).

  • cloudini_rosbag_converter: a command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/PointCloud2 topics into compressed point_cloud_interfaces/CompressedPointCloud2 or vice-versa. It does not need a ROS installation: a pre-compiled Linux AppImage can be downloaded from the release page.

Compiling the WASM module

File truncated at 100 lines see the full file