diff --git a/src/lerobot/scripts/lerobot_dataset_viz.py b/src/lerobot/scripts/lerobot_dataset_viz.py index c8b8d56fd..e7594d268 100644 --- a/src/lerobot/scripts/lerobot_dataset_viz.py +++ b/src/lerobot/scripts/lerobot_dataset_viz.py @@ -168,8 +168,6 @@ def visualize_dataset( **kwargs, ) -> Path | None: if display_mode == "foxglove": - if save: - logging.warning("--save is ignored with --display-mode foxglove (no .rrd file is written).") from lerobot.utils.foxglove_visualization import serve_foxglove_dataset_playback logging.info("Starting Foxglove server") @@ -421,6 +419,17 @@ def main(): ) args = parser.parse_args() + + if args.display_mode == "foxglove": + rerun_only = ("mode", "save", "output_dir", "grpc_port", "batch_size", "num_workers") + ignored = [name for name in rerun_only if getattr(args, name) != parser.get_default(name)] + if ignored: + logging.warning( + "These flags only apply to `--display-mode rerun` and are ignored with " + "`--display-mode foxglove`: %s.", + ", ".join(f"--{name.replace('_', '-')}" for name in ignored), + ) + kwargs = vars(args) repo_id = kwargs.pop("repo_id") root = kwargs.pop("root") diff --git a/src/lerobot/utils/foxglove_visualization.py b/src/lerobot/utils/foxglove_visualization.py index 06b280bf1..b4315203d 100644 --- a/src/lerobot/utils/foxglove_visualization.py +++ b/src/lerobot/utils/foxglove_visualization.py @@ -17,7 +17,7 @@ Live control-loop streaming (:func:`log_foxglove_data`) and seekable dataset playback (:func:`serve_foxglove_dataset_playback`) over a Foxglove WebSocket server. Callers usually select a backend at runtime through the dispatch in :mod:`lerobot.utils.visualization_utils` rather than -importing from here directly. Requires the ``foxglove`` extra (``pip install 'lerobot[foxglove]'``). +importing from here directly. Requires the ``viz`` extra (``pip install 'lerobot[viz]'``). """ import logging @@ -84,7 +84,7 @@ def init_foxglove(host: str = "127.0.0.1", port: int | None = 8765) -> None: port: Port to bind the WebSocket server to (defaults to 8765). """ - require_package("foxglove-sdk", extra="foxglove", import_name="foxglove") + require_package("foxglove-sdk", extra="viz", import_name="foxglove") import foxglove # Live-stream state lives as attributes on ``log_foxglove_data``: @@ -276,7 +276,7 @@ def log_foxglove_data( for CPU and quality. """ - require_package("foxglove-sdk", extra="foxglove", import_name="foxglove") + require_package("foxglove-sdk", extra="viz", import_name="foxglove") if getattr(log_foxglove_data, "server", None) is None: raise RuntimeError("init_foxglove() must be called before log_foxglove_data().") @@ -401,7 +401,7 @@ def serve_foxglove_dataset_playback( waiting for the user to press play in the Foxglove app. """ - require_package("foxglove-sdk", extra="foxglove", import_name="foxglove") + require_package("foxglove-sdk", extra="viz", import_name="foxglove") import bisect import threading