cap is a Foxglove extension for historical ROS bag and MCAP search.
It indexes the currently opened recording inside Foxglove, lets users search for scenes with quick filters or snippets, and jumps straight to the matching timestamp with optional camera previews.
- Search a whole recording instead of scrubbing manually.
- Jump directly to the scene that matches a signal condition or snippet.
- Preview likely camera frames alongside search results when compressed image topics are present.
- Foxglove desktop installed locally
- Node.js
25.2.1and npm11.6.2for the tested setup in this repo - A local
.bagor.mcaprecording that Foxglove can open, or the bundleddemo/cap-demo-recording.mcap
If you use nvm, run nvm use in this repo to match the tested Node version.
npm installnpm run local-installThis copies the extension into your Foxglove extensions folder and rebuilds it in production mode first.
- Restart or reload Foxglove.
- Open
demo/cap-demo-recording.mcapfor the fastest first run, or use your own supported.bagor.mcap. - Add the
cappanel to your layout. - Wait for the panel to build its local search index from the currently opened recording.
With the bundled demo recording:
- Set the preview topic to
/camera/front/compressed. - Create a quick filter with
vehicle.autonomy_enabled, operatoris active, duration8. - Add
controls.brake_pressed is activeas a second condition if you want to isolate the braking moment. - Run the snippet from docs/first-run-demo.md to jump directly to the
crosswalk_brakeevent.
npm run build
npm run compat:fixtures
npm run demo:generate
npm run lint
npm run package
npm run smokenpm run build: local extension bundlenpm run compat:fixtures: regenerate the checked-in compatibility MCAPs and validate all checked-in fixtures plus any private bag fixtures declared in.compat-fixtures/manifest.jsonnpm run demo:generate: recreate the tiny public demo recordingnpm run package: generate a.foxebundle for sharing or release uploadnpm run smoke: lint, compatibility validation, and packaging in one pass
Short version:
- ROS bag: supported
- MCAP: fixture-backed for checked-in JSON and JSON Schema variants, with broader support documented below
Compatibility details, caveats, and the fixture checklist live in docs/compatibility.md and docs/compatibility-checklist.md.
This repo includes a tiny synthetic MCAP at demo/cap-demo-recording.mcap for a deterministic first run.
The recommended distribution path is:
- Keep the repo lightweight with a tiny synthetic demo.
- Use the bundled 60 second MCAP for first-run demos and screenshots.
- Host larger public demo recordings separately.
- Document exactly which topics or signals make
caplook good in that demo.
More detail lives in docs/demo-data.md and the exact walkthrough lives in docs/first-run-demo.md.
The repo now includes two launch-facing references:
- docs/distribution-assets.md: GitHub description/topics, release copy, Foxglove listing copy, and media checklist
- docs/announcement-kit.md: channel-ready launch copy, direct outreach text, and asset-to-demo mapping
- docs/marketing-cadence.md: weekly distribution loop, scoreboard template, human-only handoffs, and follow-up growth tasks
- docs/publishing.md: versioning, packaging, tag push, and GitHub release workflow
Yes, for supported recordings.
When a user opens a different supported recording, cap rebuilds its in-panel search index from that data source. That means:
- the quick-filter signal list updates automatically
- camera topic choices update automatically
- snippets still work, but they need to reference signal names that exist in the currently opened recording
- Historical search depends on Foxglove's offline message-range API, so live sources are not currently supported.
- Camera previews currently rely on sparse previews from
sensor_msgs/CompressedImage. - Some MCAPs may still be unsupported if they use uncommon schema layouts or custom encodings outside the paths handled today.
- Bag regression coverage depends on private fixture files because this repo does not ship redistributable
.bagsamples.
If onboarding is confusing or a recording does not work, open a GitHub issue.
- Use the onboarding template for setup friction.
- Use the compatibility template for unsupported bags or MCAPs.
- Generated
.foxebundles are ignored. - Local bag files, MCAP files, and generated indexes are ignored.
- Suggested GitHub repo description and topics are in
.github/repository-metadata.md. - Launch copy, media guidance, and the publishing checklist live in
docs/distribution-assets.mdanddocs/publishing.md.
