Select filter
select limits which tracks or participants flow through a component.
Where it appears
Section titled “Where it appears”| Component | Location |
|---|---|
RTC sources (livekit, jitsi, daily, agora) | Inside config.select |
| Nodes and sinks | select on an object-form inputs entry |
Nodes and sinks have no top-level select: every filter belongs to the DAG edge
it applies to.
Fields
Section titled “Fields”| Field | Type | Description |
|---|---|---|
mediaTypes | string[] | Any combination of video, audio, and data; omitted means all types accepted by the component |
identities | string[] | Include only these participant identities |
excludeIdentities | string[] | Exclude these identities |
trackSources | string[] | Include only these track sources: camera, microphone, screen_share, screen_share_audio |
trackNames | string[] | Include tracks with these names |
trackSids | string[] | Include tracks with these SIDs |
RTC source example
Section titled “RTC source example”select lives inside the source config:
{ "name": "room_src", "type": "livekit", "config": { "serverUrl": "wss://your-project.livekit.cloud", "token": "eyJ...", "select": { "mediaTypes": ["video", "audio"], "identities": ["host"], "trackSources": ["camera", "microphone"] } }}Node / sink example
Section titled “Node / sink example”select goes on the input entry. Write an input as an object to filter it, and
as a plain string to take everything the component consumes:
{ "name": "mix_video", "type": "video_mixer", "inputs": [ { "name": "room_src", "select": { "mediaTypes": ["video"], "identities": ["presenter"] } } ], "config": { }}Each upstream is filtered independently, and string and object entries may be mixed:
{ "name": "mix_video", "type": "video_mixer", "inputs": [ { "name": "room_a", "select": { "mediaTypes": ["video"], "identities": ["alice"] } }, { "name": "room_b", "select": { "mediaTypes": ["video"], "identities": ["bob"] } } ], "config": {}}Here room_a contributes Alice’s video and room_b contributes Bob’s video. To
apply the same filter to several inputs, repeat it on each entry.
- On RTC sources,
selectcontrols network subscription — fewer tracks means less bandwidth. - On nodes and sinks,
selectcontrols processing — different downstream views from the same source. - A filter applies only to the edge it sits on; other inputs of the same component are unaffected.
- What survives the edge filter is still limited to the media types the component consumes — an
audio_mixernever receives video. - DataEvent streams such as captions and voice-agent transcripts use the
datamedia type, for example{"name":"agent","select":{"mediaTypes":["data"]}}. - Nodes do not forward media types they do not consume. Add a direct input for any upstream
datastream required by a downstream sink. - Omitted fields mean no filter for that dimension.