Skip to content
Console

Select filter

select limits which tracks or participants flow through a component.

ComponentLocation
RTC sources (livekit, jitsi, daily, agora)Inside config.select
Nodes and sinksselect on an object-form inputs entry

Nodes and sinks have no top-level select: every filter belongs to the DAG edge it applies to.

FieldTypeDescription
mediaTypesstring[]Any combination of video, audio, and data; omitted means all types accepted by the component
identitiesstring[]Include only these participant identities
excludeIdentitiesstring[]Exclude these identities
trackSourcesstring[]Include only these track sources: camera, microphone, screen_share, screen_share_audio
trackNamesstring[]Include tracks with these names
trackSidsstring[]Include tracks with these SIDs

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"]
}
}
}

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, select controls network subscription — fewer tracks means less bandwidth.
  • On nodes and sinks, select controls 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_mixer never receives video.
  • DataEvent streams such as captions and voice-agent transcripts use the data media 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 data stream required by a downstream sink.
  • Omitted fields mean no filter for that dimension.