# TDMS

Upload NI TDMS files from the Python client or NI FlexLogger®. The Python client converts each TDMS channel to a channel named `<group>.<channel>`, with spaces replaced by underscores. It takes timestamps from each channel’s `wf_start_time` and `wf_increment` properties, or from a time channel you name.

## Upload a file

**Python**

Install the Python client’s `tdms` extra:

```bash
pip install "nominal[tdms]"
```

Then upload the file to a new dataset:

```python
from nominal.core import NominalClient
from nominal.tdms import upload_tdms

client = NominalClient.from_profile("default")
dataset = upload_tdms(client, "test_run.tdms", name="Test run 12")
```

To add a file to an existing dataset, use [`upload_tdms_to_dataset`](https://dev.nominal.io/python/ref/thirdparty/tdms.md).

**NI FlexLogger®**

Add the **Nominal-TDMS-Upload** plugin to your FlexLogger® project, as in [Load the plugin in FlexLogger®](https://dev.nominal.io/ni-flexlogger.md#load-the-plugin-in-flexlogger). It uploads each TDMS file once FlexLogger® closes it.

## Options

| Setting | Python |
| --- | --- |
| A time channel to use instead of the waveform properties | `timestamp_column` and `timestamp_type`, together |
| A tag on every row | `tags` |
| A tag read from a channel | `tag_columns` |

NI® and NI FlexLogger® are registered trademarks of NI®.
