Skip to Content
ReferenceSettings

Settings reference

All settings live in data/AppSettings.kt, backed by SharedPreferences (omnicall_settings.xml). Every field is Compose state, so changes recompose and persist immediately.

Profile

SettingValuesDefault
Display namefree textdevice model, else "You"
Avatarmonogram / preset (0–N) / cropped photomonogram

The display name is not editable on the Home screen - Home shows a read-only “You’ll join as {name}” card. Change it in Settings → Profile.

Appearance

SettingValuesDefault
ThemeSYSTEM / LIGHT / DARKSYSTEM

Drives both the app’s Material 3 scheme and the call palette. The video backdrop stays black in all three.

Camera

SettingValuesDefault
Default cameraFront / BackFront
Mirror front cameraon / offon (self-view only)

Video resolution (VideoQuality)

PresetCaptureEncoder capDegradation
Auto960×540@30 (adaptive)BWE-drivendrop resolution, hold FPS
Data Saver640×480@30900 kbpshold resolution, drop FPS
HD1280×720@302,500 kbps
Full HD1920×1080@306,000 kbps
2K2560×1440@3012,000 kbps
4K3840×2160@3020,000 kbps

Presets the device’s cameras can’t capture are hidden (CameraCapabilities).

Video codec (VideoCodec)

ValueLabelNotes
AV1AV1Best compression. Needs AV1 on both devices; often software-only.
H265H.265 / HEVCEfficient; hardware support is uneven.
H264H.264 / AVCDefault. Universal hardware support; only codec a browser can receive.

There is no “Auto” - it was removed because the outcome varied by device and made calls unpredictable. See media negotiation.

Screen sharing (ScreenShareResolution / ScreenShareFps)

ResolutionShort edgeBase bitrate (30 fps)60 fps
HD720p2,800 kbps×5/3
Full HD1080p6,000 kbps×5/3
Nativefull panel12,000 kbpslocked to 60 fps

Aspect ratio is always preserved (the receiver letterboxes, never crops).

SettingValuesDefault
Frame rate30 / 60 fpsnative
Auto-rotate on screen shareon / offoff - when on, the viewer’s whole screen rotates to the sharer’s orientation

Microphone

Mode (MicMode)

ModeLabelSee
DEFAULTStandardaudio pipeline
DENOISEVoice IsolationRNNoise + platform NS stacked
RAWWide Spectrumno processing, no AEC - needs headphones

Once a call starts, the picker locks out modes in the other hardware group until the call ends.

Gain

SettingRangeStepDefault
Mic gain0–200 %10 %100 %
Overboostraises ceiling to 500 %-off

A post-AEC/NS output trim with a tanh soft-knee above ±26000. Exactly 100 % is a no-op (raw signal). 0 % is silence - see the footgun note.

Studio Microphone

SettingEffect
Wide Spectrum toggleShortcut to MicMode.RAW. Greyed out with a “needs headphones” hint when none are connected.

Server

SettingDefault
Signaling server URLthe hosted default (wss://…)

Must be wss:// and point at the server root (trailing /). “Reset to default” restores the bundled URL.

CallStats snapshot

The debug panel reads this data class:

data class CallStats( sendResolution, recvResolution: String?, // "1280×720" sendBitrateKbps, recvBitrateKbps: Int, // byte-delta approximation sendFps, recvFps: Int, rttMs: Int?, videoCodec: String?, packetLossPct: Double, hardwareEncode, hardwareDecode: Boolean?, // null = not reported yet audioCodec: String?, audioSendBitrateKbps, audioRecvBitrateKbps: Int, audioSampleRateHz: Int, audioStereo: Boolean?, cpuPercent: Int?, // this process, 0-100 across all cores batteryTempC: Float?, // null if not reported powerWatts: Float?, // |current| × voltage; null if unavailable )