# The PID library

- **MCP resource:** rdmbench://help/pid-library
- **Version:** 0.2.0
- **Runs on:** macOS 15 Sequoia or later, Apple silicon or Intel
- **Needs:** An Enttec DMX USB Pro with its DMX/RDM firmware (major version 2)
- **Price:** Free

Every fixture's maker adds parameters of its own beyond the ones E1.20
defines: a color calibration, a fan mode, a dimmer curve. A fixture
should describe each one when asked, and many do. The PID library names
the ones a fixture lists but will not describe, so they read as words
in the report rather than a number in hex. It also holds fixture
profiles: what particular models are known to get wrong, and the
channel layouts their manuals give (see
[GDTF files and the PID library](/help/fixture-files/)).

## What the bench has

Choose **Fixture → PID Library…** (⌥⌘P) *(macOS)*
to see the tables this bench has, one per brand: where each came from,
how many parameters it names, and its source, usually the maker's
manual. Select a table to see the names. Under the tables are the
fixture profiles and the quirks each records. This works with nothing
connected.

In the report's **Parameters** list, a manufacturer parameter the
library named is marked `table`. One marked `mfr` was named by the
fixture itself, or by nothing, in which case it shows as *(unmapped)*:
a table for that brand, or a newer one, would name it.

## Updates

**The library updates itself.** Each time you connect, the bench asks
the public RDMBench PID library whether there is a newer version and
offers it in a banner: **Update**, **Later**, or **Skip This Version**.
Only a list of files is fetched, and nothing about your fixtures is
sent. Turn the check off in Settings with *Check for PID library
updates when connecting*, and check by hand with **RDMBench → Update
PID Library…**. Downloaded tables are kept beside the app's own copy,
and win over it where both name the same parameter.

## Adding to the library

When a fixture describes a parameter the library does not know, the
report shows a banner saying so. **Propose…** sends what the fixture
said to the public library on GitHub, for its maintainer to review.
**Export…** saves it as a file instead. Either way it holds the
fixture's own names and descriptions, and nothing that identifies the
unit. A fixture that lists parameters but describes none of them can
still be sent: it tells the library which ones to look up in the
manual.

**Fixture → Contribute Fixture Profile…** does the same for the model:
its personalities, sensors and parameters, as a starting point for a
profile.

## From the command line

`rdmbench-cli pid-tables` lists the PID library's tables and profiles,
and `rdmbench-cli update-pids` updates them (`--check` only asks).
`rdmbench-cli export-pids` writes the parameters a fixture describes
that the library lacks; `--share` leaves out the unit's UID.
