websocket-proxy 0.1.2__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: websocket-proxy
3
- Version: 0.1.2
3
+ Version: 0.3.0
4
4
  Summary: Foxglove WebSocket proxy with message transformations
5
5
  Keywords: websocket,foxglove,robotics,ros,ros2,proxy,compression
6
6
  Author: Marko Bausch
@@ -18,14 +18,12 @@ Classifier: Programming Language :: Python :: 3.13
18
18
  Classifier: Topic :: Internet
19
19
  Classifier: Topic :: Scientific/Engineering
20
20
  Classifier: Typing :: Typed
21
- Requires-Dist: numpy>=2.0.0
22
- Requires-Dist: pointcloud2>=0.2.3
21
+ Requires-Dist: pymcap-cli[video,pointcloud]
23
22
  Requires-Dist: websockets>=15.0.1
24
23
  Requires-Dist: typing-extensions>=4.12.2
25
24
  Requires-Dist: mcap-ros2-support-fast
26
25
  Requires-Dist: robo-ws-bridge
27
26
  Requires-Dist: rich>=14.2.0
28
- Requires-Dist: av>=12.0.0
29
27
  Requires-Python: >=3.10
30
28
  Project-URL: Homepage, https://github.com/mrkbac/robotic-tools
31
29
  Project-URL: Issues, https://github.com/mrkbac/robotic-tools/issues
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "websocket-proxy"
3
- version = "0.1.2"
3
+ version = "0.3.0"
4
4
  description = "Foxglove WebSocket proxy with message transformations"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -25,14 +25,12 @@ classifiers = [
25
25
  "Typing :: Typed",
26
26
  ]
27
27
  dependencies = [
28
- "numpy>=2.0.0",
29
- "pointcloud2>=0.2.3",
28
+ "pymcap-cli[video,pointcloud]",
30
29
  "websockets>=15.0.1",
31
30
  "typing-extensions>=4.12.2",
32
31
  "mcap-ros2-support-fast",
33
32
  "robo-ws-bridge",
34
33
  "rich>=14.2.0",
35
- "av>=12.0.0",
36
34
  ]
37
35
 
38
36
  [project.urls]
@@ -49,7 +47,7 @@ build-backend = "uv_build"
49
47
 
50
48
  [tool.uv.sources]
51
49
  mcap-ros2-support-fast = { workspace = true }
52
- pointcloud2 = { workspace = true }
50
+ pymcap-cli = { workspace = true }
53
51
  robo-ws-bridge = { workspace = true }
54
52
 
55
53
  [dependency-groups]
@@ -3,11 +3,11 @@
3
3
  from websocket_proxy.proxy import ProxyBridge
4
4
  from websocket_proxy.transformers import TransformerRegistry
5
5
  from websocket_proxy.transformers.image_to_video import ImageToVideoTransformer
6
- from websocket_proxy.transformers.pointcloud_voxel import PointCloudVoxelTransformer
6
+ from websocket_proxy.transformers.pointcloud_pureini import PointCloudPureiniTransformer
7
7
 
8
8
  __all__ = [
9
9
  "ImageToVideoTransformer",
10
- "PointCloudVoxelTransformer",
10
+ "PointCloudPureiniTransformer",
11
11
  "ProxyBridge",
12
12
  "TransformerRegistry",
13
13
  ]
@@ -12,7 +12,7 @@ from websocket_proxy.dashboard import DashboardRenderer
12
12
  from websocket_proxy.proxy import ProxyBridge
13
13
  from websocket_proxy.transformers import TransformerRegistry
14
14
  from websocket_proxy.transformers.image_to_video import ImageToVideoTransformer
15
- from websocket_proxy.transformers.pointcloud_voxel import PointCloudVoxelTransformer
15
+ from websocket_proxy.transformers.pointcloud_pureini import PointCloudPureiniTransformer
16
16
 
17
17
  logger = logging.getLogger(__name__)
18
18
 
@@ -86,16 +86,22 @@ def parse_args() -> argparse.Namespace:
86
86
  )
87
87
 
88
88
  parser.add_argument(
89
- "--pointcloud-voxel-size",
90
- type=float,
91
- default=0.1,
92
- help="Voxel size (in meters) for point cloud downsampling (default: 0.1)",
89
+ "--pointcloud-encoding",
90
+ choices=["lossy", "lossless", "none"],
91
+ default="lossy",
92
+ help="Point cloud encoding mode (default: lossy)",
93
93
  )
94
94
  parser.add_argument(
95
- "--pointcloud-keep-nans",
96
- dest="pointcloud_skip_nans",
97
- action="store_false",
98
- help="Keep NaN points when voxelizing point clouds (default: drop NaNs)",
95
+ "--pointcloud-compression",
96
+ choices=["zstd", "lz4", "none"],
97
+ default="zstd",
98
+ help="Point cloud compression algorithm (default: zstd)",
99
+ )
100
+ parser.add_argument(
101
+ "--pointcloud-resolution",
102
+ type=float,
103
+ default=0.01,
104
+ help="Resolution for lossy float compression of point clouds (default: 0.01)",
99
105
  )
100
106
 
101
107
  parser.add_argument(
@@ -110,7 +116,7 @@ def parse_args() -> argparse.Namespace:
110
116
  help="Dashboard refresh rate in seconds (default: 1.0)",
111
117
  )
112
118
 
113
- parser.set_defaults(image_use_hardware=True, pointcloud_skip_nans=True)
119
+ parser.set_defaults(image_use_hardware=True)
114
120
  return parser.parse_args()
115
121
 
116
122
 
@@ -132,9 +138,10 @@ async def main_async(args: argparse.Namespace) -> None:
132
138
  )
133
139
  registry.register(image_transformer)
134
140
 
135
- pointcloud_transformer = PointCloudVoxelTransformer(
136
- voxel_size=args.pointcloud_voxel_size,
137
- skip_nans=args.pointcloud_skip_nans,
141
+ pointcloud_transformer = PointCloudPureiniTransformer(
142
+ encoding=args.pointcloud_encoding,
143
+ compression=args.pointcloud_compression,
144
+ resolution=args.pointcloud_resolution,
138
145
  )
139
146
  registry.register(pointcloud_transformer)
140
147