seydd.toml
Generated from packages/seydd/src/config.rs: the structs the daemon deserialises the
file into are the schema, so this page cannot disagree with the binary. Pass the file with
seydd --config /etc/seyd/seydd.toml. See Integrate the daemon for
a walkthrough and the protocol contract for the
publisher-control messages.
[agent]
Section titled “[agent]”The robot’s identity, transport and policy.
| Key | Type | Required | Default | Meaning |
|---|---|---|---|---|
robot_id |
string | yes | — | The robot’s id as enrolled with the cloud; what pilots and the console see. |
signal_url |
string | yes | — | The signal server’s WebSocket URL, wss://host/ws. Enrolment derives its REST address from it. |
credential_path |
path | no | "/var/lib/seyd/robot.key" |
Ed25519 seed file, created on first run. The private half never leaves the robot; enrolment registers the public half (ADR 0007). |
quic_port |
integer | no | 4433 |
UDP port the QUIC endpoint binds; the port a router forward or pinhole must open. |
ipv6 |
boolean | no | true |
Bind and advertise IPv6 as well as IPv4. |
port_mapping |
boolean | no | true |
Ask the router for a port mapping (PCP, NAT-PMP, UPnP) during discovery, so a robot behind a consumer router is reachable without a manual forward. |
qos_profile |
string | no | "balanced" |
The QoS ceiling: latency, balanced or quality. |
max_sessions |
integer | no | 4 |
Concurrent pilot sessions (one driver, the rest observers). |
host_override |
string | no | empty | Skip discovery and advertise this host only (LAN testing). |
recovery_ladder |
boolean | no | true |
Ask for the cheapest useful recovery point (LTR → intra-refresh → IDR) rather than always demanding a keyframe. Set false for a publisher that mishandles any kind but idr. |
relay |
boolean | no | true |
Serve a session through the cloud relay when the pilot could not connect directly (ADR 0010). The pilot only asks after its direct attempts fail, and its HUD says so; set false to refuse relayed sessions altogether. |
enrolment_token |
string | no | empty | One-time enrolment token, redeemed on first start when no credential exists yet. SEYD_ENROLMENT_TOKEN overrides it — prefer the environment, so a provisioning secret need not be written to disk. |
[[channel]]
Section titled “[[channel]]”One per channel; numbered from 1 in file order, and that numbering is what the pilot sees.
| Key | Type | Required | Default | Meaning |
|---|---|---|---|---|
kind |
"video" | "sensor" | "command" |
yes | — | video, sensor or command. |
name |
string | yes | — | The channel’s name as shown to the pilot and used in SeydSession.send. |
input |
string | no | empty | Where the bytes come from: rtsp:// or rtp:// for video, udp:// for a sensor. Required for video and sensor channels without layers. |
output |
string | no | empty | Where a command channel delivers each driver message, as one UDP datagram per message. |
codec |
string | no | "json" |
A WebCodecs codec string for video (avc1.42001f, hev1.…, mjpeg); json or octet-stream for messages. |
fps |
integer | no | 0/false |
Nominal frame rate of a video channel; 0 for messages. |
layer |
array of tables | no | empty | Simulcast layers. Empty means the single input above — the ordinary case, and what every pre-simulcast config keeps doing. |
max_bitrate_kbps |
integer | no | 0/false |
The most this video channel’s publisher can encode, in kbps; 0 (the default) means it has no limit of its own. Set it when the encoder tops out below the QoS profile’s ceiling — a drone whose highest setting is 4 Mbps under the quality profile’s 6 — so the rate controller’s range, floor and video-config requests stay within what the publisher can deliver. |
[[channel.layer]]
Section titled “[[channel.layer]]”Simulcast layers of a video channel (ADR 0008), lowest first.
| Key | Type | Required | Default | Meaning |
|---|---|---|---|---|
name |
string | yes | — | The layer’s name, reported in layer messages and the HUD. |
input |
string | yes | — | The stream carrying this encoding, rtsp:// or rtp://. |
activate_above_kbps |
integer | no | 0/false |
The ABR target at or above which this layer is the right choice. The lowest layer is the base and is used whenever nothing better is affordable, so leaving it at 0 is correct. |
[publisher_control]
Section titled “[publisher_control]”Where seydd posts video-config, recovery-request, layer and session messages for the publisher.
| Key | Type | Required | Default | Meaning |
|---|---|---|---|---|
udp |
string | yes | — | host:port the daemon sends its JSON control messages to, one per datagram. |
Simulcast example
Section titled “Simulcast example”From the Layer doc comment in config.rs:
toml [[channel]] kind = “video” name = “main” codec = “avc1.42001f” # must admit the highest layer fps = 25
[[channel.layer]] name = “low” input = “rtsp://cam:554/Streaming/Channels/102”
[[channel.layer]] name = “high” input = “rtsp://cam:554/Streaming/Channels/101” activate_above_kbps = 1800