# MCAP

Nominal reads [MCAP](https://mcap.dev/) topics whose messages are encoded as protobuf, ROS 1, ROS 2 (CDR) or JSON. For a video topic, see [MCAP video ingest](https://dev.nominal.io/python/guides/video/mcap-video-ingest.md).

## Upload a file

**Nominal app**

1. In the sidebar, click **+** (**New**), then **Upload data**. Drop the `.mcap` file onto **Upload files**, or click **SELECT FILES**.
2. Click **SELECT A DESTINATION** and choose **Standalone dataset**. Pick a dataset, or click **NEW DATASET**, enter a name and click **CREATE DATASET**.
3. Click **CONFIRM & INGEST**.

**Python**

```python
from nominal.core import NominalClient

client = NominalClient.from_profile("default")
dataset = client.create_dataset("Robot run")
file = dataset.add_mcap("run.mcap")
file.poll_until_ingestion_completed()  # raises if ingestion fails
```

**nomctl**

```bash
nomctl ingest mcap --name "Robot run" run.mcap
```

## Options

An upload converts every topic. To convert only some, give either the topics to include or the topics to exclude. When you run Nominal’s first-party MCAP extractor yourself, from the upload wizard’s **File extraction** card or with `add_containerized`, it takes these settings as environment variables, with topics separated by commas.

| Setting | Nominal app | Python | nomctl | Extractor variable |
| --- | --- | --- | --- | --- |
| Convert only these topics | Clear **Include all channels**, choose **Inclusive**, and list them under **Include channels by topic** | `include_topics` | `--include-topic` | `INCLUDE_TOPICS` |
| Skip these topics | Clear **Include all channels**, choose **Exclusive**, and list them under **Exclude channels by topic** | `exclude_topics` | `--exclude-topic` | `EXCLUDE_TOPICS` |
| Skip a topic whose schema doesn’t resolve or whose encoding isn’t supported, instead of failing | — | `ignore_invalid_topics=True` | `--ignore-invalid-topics` | `IGNORE_INVALID_TOPICS=true` |
| A tag on every point | **Tags** | `tags` | `--file-tag` | — |

The extractor reads the `.mcap` file from `INPUT_FILE`.
