Lichtblick
SkillFiles & storageUse when deploying, launching, or reviewing the Lichtblick web viewer — an open-source, Foxglove-compatible MCAP / ROS-bag / robotics log viewer served from S3 artifacts.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Lichtblick skill
What this skill tells your AI
The instructions your AI receives, as published by nebius/nebius-physical-ai in skills/tools/lichtblick/SKILL.md and read by ahel’s review.
Lichtblick is an open-source (MPL-2.0), Foxglove-compatible MCAP / ROS-bag /
robotics log viewer. It is the browser-based analog of rerun-viewer: a static
web viewer that opens artifacts, with no GPU. The image ships
Lichtblick (lichtblick-suite/lichtblick), the actively maintained community
fork of the archived, relicensed Foxglove Studio. It is a distinct product from
the now-proprietary Foxglove; no Foxglove account or proprietary component is
required.
- Tool name:
lichtblick— Image:npa-lichtblick— Port:8080— Tier:service. - Pinned OSS version: Lichtblick
1.26.0([tool.npa.supported-tools]). - CPU-only; not part of the
cuda12/cuda13-b300tag families.
Related:
skills/tools/foxglove/SKILL.mdcovers the official Foxglove app embedded with the@foxglove/embedSDK, the MCAP converter (npa workbench foxglove convert-run), and the agent's Foxglove pane — which falls back to this viewer when no Foxglove account is configured.
Interfaces
CLI:
# View an existing MCAP (plan only by default; --execute stages + launches):
npa workbench lichtblick serve --input-path s3://bucket/run/recording.mcap --execute
# Pack a robot camera-frame sequence (e.g. sim2real rollout/augment frames) into
# a real MCAP of foxglove.CompressedImage messages, then serve it:
npa workbench lichtblick serve \
--input-path s3://bucket/sim2real-b/<run-id>/augment/frames/ \
--from-frames --fps 10 --topic /sim2real/augment/camera --execute
npa workbench lichtblick launch # alias for serve
npa workbench lichtblick status
npa workbench lichtblick list
# Decode an MCAP into a native Rerun .rrd so Rerun renders it too (Rerun's built-in
# MCAP loader keeps foxglove/JSON messages as raw blobs; this maps the well-known
# schemas to archetypes). Open the result with `rerun x.rrd` or `sim2real rerun serve`.
npa workbench lichtblick to-rerun \
--input-path s3://bucket/sim2real-b/<run-id>/reports/sim2real.mcap \
--output-path <run-id>.rrd --execute
SDK: npa.sdk.workbench.lichtblick (serve, launch, status, list).
Container: caddy file-server serves the static Lichtblick bundle on :8080
(default CMD), with a HEALTHCHECK on /. Final USER nobody; Caddy's XDG
data/config dirs are owned by that user so the server starts cleanly.
What it does (tangible)
Lichtblick consumes real Physical AI workflow artifacts from S3 (mirroring how
rerun-viewer consumes sim2real.rrd — a separate viewer, not embedded in the
pipeline):
- MCAP export (
--from-frames):build_mcap_from_framesturns the Sim2Real pipeline'srollouts/.../cameraandaugment/framesimage artifacts into a real MCAP offoxglove.CompressedImagemessages at a chosen--fps, so the robot camera stream plays on a timeline. PNG/JPEG frames are packed byte-for-byte; raw.ppmrollout dumps (and other PIL-readable formats) are transcoded to PNG first (viaencode_frame_to_compressed_bytes), so genuine rollout cameras render instead of being silently skipped. Verified end-to-end: 32 Cosmos-Transfer2.5 augment frames → a 9.5 MB MCAP → rendered in a headless browser on topic/sim2real/augment/camera(200 + 206 range fetches, 0 console errors). - Native Sim2Real MCAP (finalize stage): the Sim2Real viz/finalize stage
(
sim2real_viz.emit_sim2real_mcap, gated byNPA_SIM2REAL_MCAP, default on when rerun is on) natively emitsreports/sim2real.mcapalongsidereports/sim2real.rrdfrom the same rollout data — camera frames asfoxglove.CompressedImage, VLM critiques asfoxglove.Log, and reward/advantage/score signals as numeric samples a Plot panel can chart. Open it withnpa workbench lichtblick serve --input-path s3://bucket/sim2real-b/<run-id>/reports/sim2real.mcap --execute. - Staging + launch (
--execute):serve_viewerstages the artifact from S3 (stage_input_to_mcap) and runs thenpa-lichtblickcontainer so the log is live at the returned URL. Without--executeit prints the plan (infra-free). - MCAP → Rerun (
to-rerun/build_rerun_rrd_from_mcap): Rerun can open an MCAP (rerun mcap convert), but its decoders target ROS2/protobuf, so our JSON/foxglove messages land as rawMcapMessage:datablobs (topics + timeline, no image/scalar/log panels).build_rerun_rrd_from_mcapdecodes the well-known schemas into native archetypes —foxglove.CompressedImage→rr.EncodedImage,foxglove.Log→rr.TextLog, numeric JSON (value) →rr.Scalars— so the same MCAP renders with full fidelity in Rerun. Complements the natively-emittedreports/sim2real.rrd; useful for any MCAP (incl. real-robot logs) → Rerun.
Deploy / launch contract
- Cross-tool data flows through S3 only.
serve/launchtake--input-path(S3 or local MCAP/bag/db3, or a camera-frames prefix with--from-frames) and optional--output-path; the artifact is staged into the viewer's own origin (/srv/data/<name>, served by the same Caddy on:8080) and opened via a deep-linked?ds=remote-file&ds.url=...URL. - Because the MCAP is co-served from the viewer origin, the browser fetch is
same-origin: no bucket CORS, no pre-signed URL, and no http/https
mixed-content block are involved. (Pointing
ds.urldirectly at an S3 URL instead would require bucket CORS + a presigned URL + an https viewer — that is deliberately not this tool's path.) Caddy serves the MCAP withAccept-Ranges: bytes, so Lichtblick streams it via HTTP range requests. - The deep link always targets the app root
/(data source in the query string), never a client-routed sub-path, socaddy file-serverneeds no SPA fallback:GET /always returnsindex.html. --host/--portcontrol the bind (default127.0.0.1:8080). The standalone viewer has no authentication and co-serves the selected artifact. Use a verified SSH forward or authenticated proxy for remote viewing; an explicit non-loopback--hostpublishes the artifact to everyone who can reach that interface.- The CLI resolves the
npa-lichtblickimage vianpa.deploy.images.container_image_for_tool(the supported default is public GHCR; a custom image must be explicit) and emits the container run command + viewer URL. Container launch itself is performed by the deploy/workflow path, mirroring howrerun-vieweris workflow-launched.
Source of truth
Launch logic lives in npa/src/npa/workbench/lichtblick/; the CLI and SDK call
into it. The Dockerfile is npa/docker/workbench/lichtblick/Dockerfile
(multi-stage node:22-bookworm build of the pinned OSS tag → caddy:2.11.4-alpine
runtime, both digest-pinned). Golden eval and safety posture: lichtblick in
npa/src/npa/smoke/golden_evals.yaml (kind build-import, gpu: none).
Signals
- GitHub stars
- 28
- Forks
- 15
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
lichtblick- Source
- github.com/nebius/nebius-physical-ai