Root path: /Dawn Engine/DawnStream. Defaults ship in Gems/DawnStream/Registry/dawnstream.setreg.
Precedence
defaults < project setreg < CLI --dawnstream-*
Runtime console commands (e.g. ps_setBitrate) adjust a live session; they are not a full config layer. Streamer auth tokens are not CLI flags—use env vars (DAWNSTREAM_AUTH_TOKEN / Signaling.AuthTokenEnv).
Recommended tiers
| Tier | Width×Height | FPS | Target bitrate | Notes |
|---|
| Demo (recommended) | 1280×720 | 30 | ~4000 kbps | Fast iterate, stub or Route A |
| Production-oriented | 1920×1080 | 30 | ~8000 kbps | Needs real media + preferably hardware encode |
| setreg defaults | 1920×1080 | 30 | 8000 (1000–20000) | Ceiling; override for demos |
Keep GopSeconds=-1 (on-demand keyframes only) unless you have a reason for periodic IDRs.
Example project setreg
{
"Dawn Engine": {
"DawnStream": {
"Enabled": true,
"Mode": "AlwaysStreaming",
"Signaling": {
"Url": "ws://127.0.0.1:8090",
"StreamerId": "DawnStreamer",
"MaxViewers": 1,
"Embedded": false
},
"Video": {
"Codec": "h264",
"Width": 1280,
"Height": 720,
"TargetFps": 30,
"TargetBitrateKbps": 4000,
"MinBitrateKbps": 1000,
"MaxBitrateKbps": 12000,
"GpuColorConvert": true,
"ZeroCopyCapture": false,
"DegradationPreference": "MaintainFramerate"
},
"Network": {
"StunServers": ["stun:stun.l.google.com:19302"]
},
"Input": {
"AllowLocalInput": true,
"ReleaseOnFocusLost": true
}
}
}
}
Top-level
| Key | Default | CLI | Description |
|---|
Enabled | false | --dawnstream-enabled | Master switch; false = zero behavior change |
Mode | OnDemand | --dawnstream-mode | Disabled / OnDemand / AlwaysStreaming |
Signaling
| Key | Default | CLI | Description |
|---|
Url | ws://127.0.0.1:8090 | --dawnstream-signaling-url | Signaling WebSocket; embedded uses its port |
StreamerId | DawnStreamer | --dawnstream-streamer-id | Registered streamer name |
AuthToken | "" | — | Prefer empty; use env |
AuthTokenEnv | DAWNSTREAM_AUTH_TOKEN | — | Env var when AuthToken empty |
KeepAliveSecs | 30 | --dawnstream-keepalive-secs | Ping interval |
ReconnectSecs | 2 | --dawnstream-reconnect-secs | Reconnect backoff base |
MaxViewers | 1 | --dawnstream-max-viewers | Per-streamer viewer cap |
Embedded | false | --dawnstream-embedded-signaling | In-process signaling |
EnableQueue | false | --dawnstream-enable-queue | Queue when full |
MaxQueueLength | 0 | --dawnstream-max-queue-length | 0 = unlimited when queue on |
MaxPlayerCount | -1 | --dawnstream-max-player-count | Global cap; -1 unlimited |
AdminToken / AdminTokenEnv | "" / DAWNSTREAM_ADMIN_TOKEN | --dawnstream-admin-token | Admin permission |
RestApi / RestApiToken | false / "" | --dawnstream-rest-api / -rest-api-token | Embedded REST |
ServeStatic / HttpRoot / Homepage | false / "" / player.html | matching --dawnstream-* | Embedded static host |
Cors / CorsOrigins | false / [] | --dawnstream-cors / -cors-origins | CORS |
Standalone Node flags are documented in
Signaling—do not dual-configure one instance from both sides.
Video
| Key | Default | CLI | Description |
|---|
Enabled | true | --dawnstream-video | Video track |
OfferToReceive | false | --dawnstream-offer-to-receive | Streamer creates offer |
Codec | h264 | --dawnstream-codec | Primary codec |
CodecPreferences | [] | --dawnstream-codec-preferences | Negotiation list |
NegotiateCodecs | true | --dawnstream-negotiate-codecs | Allow negotiation |
Width / Height | 1920 / 1080 | --dawnstream-width / -height | Encode ceiling |
TargetFps / MaxFps | 30 / 0 | --dawnstream-fps / -max-fps | MaxFps=0 = no extra cap |
TargetBitrateKbps | 8000 | --dawnstream-target-bitrate | Target bitrate |
StartBitrateKbps | 0 | --dawnstream-start-bitrate | 0 = use target |
MinBitrateKbps / MaxBitrateKbps | 1000 / 20000 | -min-bitrate / -max-bitrate | Clamp window |
QualityPreset | Default | --dawnstream-quality-preset | Encoder preset |
LatencyMode | UltraLowLatency | --dawnstream-latency-mode | Latency profile |
GopSeconds | -1 | --dawnstream-gop-seconds | -1/0 = on demand only |
CapturePassHierarchy | MainPipeline,CopyToSwapChain | --dawnstream-capture-pass | FrameCapture path |
CaptureSlot | Output | --dawnstream-capture-slot | Attachment slot |
GpuColorConvert | true | --dawnstream-gpu-color-convert | GPU RGBA→I420 |
ZeroCopyCapture | false | --dawnstream-zero-copy-capture | Off by default—see
Building for real media |
DynamicResolution | false | --dawnstream-dynamic-resolution | Adaptive resolution |
MatchViewportResolution | false | --dawnstream-match-viewport-resolution | Follow viewport |
ViewportResolutionScale | 1.0 | --dawnstream-viewport-resolution-scale | Scale factor |
DegradationPreference | MaintainFramerate | --dawnstream-degradation-preference | Congestion policy |
ScalabilityMode | L1T1 | --dawnstream-scalability-mode | SVC mode |
EncoderGpuId | -1 | --dawnstream-encoder-gpu-id | GPU bind; -1 = default |
EnableFlexFec | false | --dawnstream-flexfec | FlexFEC |
Hdr | false | --dawnstream-hdr | Experimental HDR |
Additional pacing / quality / intra-refresh keys exist in setreg (PacingFactor, EncoderQualityMin/Max, …) with matching --dawnstream-* CLI where listed in DawnStreamConfigLoader.cpp.
Audio
Default off.
| Key | Default | CLI | Description |
|---|
Enabled | false | --dawnstream-audio | Enable audio track |
Codec | opus | --dawnstream-audio-codec | Audio codec |
SampleRate / Channels | 48000 / 2 | matching CLI | Format |
Gain | 1.0 | --dawnstream-audio-gain | Gain |
ForceMono | false | --dawnstream-audio-force-mono | Downmix |
SyncMode | AvSync | --dawnstream-audio-sync-mode | AvSync / Independent |
Network
| Key | Default | CLI | Description |
|---|
StunServers | Google STUN | --dawnstream-stun | ICE STUN list |
TurnServer | "" | --dawnstream-turn | TURN URL |
TurnUsername / TurnPassword | "" | -turn-username / -turn-password | TURN creds |
IcePortMin / IcePortMax | 0 / 0 | -ice-port-min / -max | 0 = OS default range |
| Key | Default | CLI | Description |
|---|
AllowLocalInput | true | --dawnstream-allow-local-input | Keep local devices |
ReleaseOnFocusLost | true | --dawnstream-release-on-focus-lost | Anti stuck-key |
ControlArbitration | FirstComeFirstServe | --dawnstream-control-arbitration | Multi-viewer policy |
AfkTimeoutSecs / AfkCountdownSecs | 0 / 10 | matching CLI | AFK (0 timeout = off) |
KeyFilterMode | Off | --dawnstream-key-filter-mode | Off / allow / block |
KeyAllowlist / KeyBlocklist | [] | matching CLI | Filter lists |
GamepadInput / TextInput / XrInput | true | matching CLI | Feature toggles |
Diagnostics
| Key | Default | CLI | Description |
|---|
LogStats | false | --dawnstream-log-stats | Periodic log |
LogStatsIntervalSecs | 10 | --dawnstream-log-stats-interval | Log period |
StatOverlay | false | --dawnstream-stat-overlay | ImGui HUD |
StatsCsvPath | "" | --dawnstream-stats-csv | CSV output path |
StatsCsvIntervalSecs | 1 | --dawnstream-stats-csv-interval | CSV period |
Editor
| Key | Default | Description |
|---|
StreamSource | LevelViewport | LevelViewport or Editor (full window + Qt input) |
StartOnLaunch | false | Auto-start streaming when Editor opens |
UseRemoteSignaling | false | false → embedded signaling |
Experimental
Treat as opt-in; not MVP defaults.
| Key | Default | CLI | Description |
|---|
FileTransfer / FileUpload | false | matching CLI | File send/receive |
FileUploadMimeAllowlist | [] | CLI list | MIME allow |
AllowConsoleCommands | false | --dawnstream-allow-console-commands | Remote console (gated) |
ConsoleCommandAllowlist | [] | CLI list | Allowed commands |
Simulcast | false | --dawnstream-simulcast | Simulcast declare |
UpstreamVideo / UpstreamAudio | false | matching CLI | Viewer → engine media |
InputRecording / MediaRecording | false | matching CLI | Record/replay features |
Next steps