OpenNOW
Reference

Configuration

Settings model, defaults, compatibility normalization, and storage for OpenNOW

OpenNOW persists user settings as JSON at app.getPath("userData")/settings.json. The source model is Settings in opennow-stable/src/shared/gfn/settings.ts; defaults and compatibility rules live in opennow-stable/src/main/settings.ts.

File locations

DataPath
Settingsapp.getPath("userData")/settings.json
Auth stateapp.getPath("userData")/auth-state.json
Stable CloudMatch device IDapp.getPath("userData")/gfn-device-id.json
App languageBrowser localStorage key opennow.locale
Thumbnail cacheapp.getPath("userData")/media-thumbs/
Screenshotsapp.getPath("pictures")/OpenNOW/Screenshots/
Recordingsapp.getPath("pictures")/OpenNOW/Recordings/

Video, stream, and native settings

SettingTypeDefaultDescription
resolutionstring"1920x1080"Stream resolution
aspectRatioAspectRatio"16:9"16:9, 16:10, 21:9, or 32:9
posterSizeScalenumber1.05Library poster scaling
fpsnumber60Target frame rate
maxBitrateMbpsnumber75Maximum stream bitrate in Mbps
recordingBitrateMbpsnumber | nullnullRecording video bitrate in Mbps; null leaves bitrate selection to MediaRecorder
streamClientModeStreamClientMode"web"Renderer WebRTC by default; experimental native mode starts the Rust streamer on supported desktop platforms
nativeStreamerBackendNativeStreamerBackendPreference"gstreamer"Compatibility currently forces gstreamer
nativeVideoBackendNativeVideoBackendPreference"auto"Normalized to auto, d3d11, d3d12, or vulkan
nativeStreamerExecutablePathstring""Optional explicit native streamer path
nativeCloudGsyncModeNativeStreamerFeatureMode"auto"Native Cloud G-Sync/VRR mode
nativeD3dFullscreenModeNativeStreamerFeatureMode"auto"Windows native fullscreen behavior
nativeExternalRendererbooleanfalseOptional separate native renderer window; compatibility disables it outside Windows
transportModeStreamTransportMode"webrtc"Native media transport; legacy nvst values normalize back to WebRTC
showNativeStreamerStatsbooleanfalseShow the native streamer's own stats overlay during native streaming
codecVideoCodec"H264"Stream codec preference: H264, H265, or AV1
colorQualityColorQuality"8bit_420"Bit-depth/chroma preference: 8bit_420, 8bit_444, 10bit_420, or 10bit_444; 10-bit color is treated separately from HDR
decoderPreferencestring"auto"Decoder preference hint: auto, hardware, or software; read before Electron startup to choose Chromium acceleration switches
encoderPreferencestring"auto"Encoder preference hint: auto, hardware, or software; read before Electron startup to choose Chromium acceleration switches and sent with stream preferences
regionstring""Preferred region URL; empty means auto
sessionProxyEnabledbooleanfalseUse an explicit proxy for session/signaling requests
sessionProxyUrlstring""Proxy URL when enabled
gameLanguageGameLanguage"en_US"Game language sent to GFN
enablePersistingInGameSettingsbooleanfalseRequest NVIDIA's per-game in-game graphics/settings persistence on new sessions
enableL4SbooleanfalseRequest L4S behavior where supported
enableCloudGsyncbooleanfalseUser-facing Cloud G-Sync/VRR preference
nativeTransitionDiagnosticsinternal/optionalundefinedNative transition diagnostics state
videoShaderVideoShaderSettingsdisabled, sharpen 40, neutral color valuesWeb-mode GPU post-processing shader settings

Native streamer settings control an experimental opt-in path. Keep streamClientMode at the default "web" unless you are testing native streaming and expect possible platform-specific fallback behavior.

After sign-in, Settings fetches the current MES subscription from https://mes.geforcenow.com/v4/subscriptions and uses its entitled width/height/framesPerSecond profiles to filter the resolution and FPS menus. If a saved profile is no longer entitled, OpenNOW normalizes it to the closest entitled profile before launch; if the subscription response has no entitlement list, the app keeps the safe 1920x1080/60 fallback instead of exposing the static high-end presets.

Codec diagnostics in Settings are renderer session state, not persisted settings.json fields. They test H.264, H.265, and AV1 browser decode/encode support, whether Chromium reports GPU-backed acceleration, and store the latest results in sessionStorage under opennow.codec-test-results.v1. On Linux, a software-only or missing-H.265 result shows a VA-API setup hint: AppImage builds still use the host distro codec/driver stack, and proprietary NVIDIA systems may need distro codec packages plus libva-nvidia-driver/nvidia-vaapi-driver even after OpenNOW's restart-applied NVIDIA VA-API flags are enabled.

Input and shortcuts

SettingTypeDefaultDescription
clipboardPastebooleanfalsePaste clipboard text into the stream
enableGyroscopeControlsbooleanfalseExperimental controller motion-sensor input mapping for gyro aiming when the input backend supports it
steamControllerCompatibilityModebooleanfalsemacOS-only Chromium HID compatibility workaround for Steam Controller input
nativeCursorOverlaybooleantrueUse the WebRTC cursor data channel overlay instead of leaving cursor rendering to the stream
mouseSensitivitynumber1Relative mouse delta multiplier
mouseAccelerationnumber1Acceleration strength clamped to 1–150
shortcutToggleStatsstring"F3"Toggle stats overlay
shortcutTogglePointerLockstring"F8"Toggle pointer lock
shortcutToggleFullscreenstring"F10"Toggle fullscreen
shortcutStopStreamstring"Ctrl+Shift+Q"Stop session
shortcutToggleAntiAfkstring"Ctrl+Shift+K"Toggle anti-AFK
shortcutToggleMicrophonestring"Ctrl+Shift+M"Toggle microphone
shortcutScreenshotstring"F11"Screenshot
shortcutToggleRecordingstring"F12"Start/stop recording
keyboardLayoutKeyboardLayoutdefault keyboard layoutKeyboard scan-code layout used for input mapping
allowEscapeToExitFullscreenbooleanfalseLet Escape exit fullscreen when enabled

Microphone and stream UI

SettingTypeDefaultDescription
microphoneModeMicrophoneMode"disabled"Disabled, push-to-talk, or voice-activity
microphoneDeviceIdstring""Preferred input device ID
hideStreamButtonsbooleanfalseHide stream overlay buttons
showAntiAfkIndicatorbooleantrueShow anti-AFK status indicator
showStatsOnLaunchbooleanfalseOpen stats overlay when a session starts
hideServerSelectorbooleanfalseSkip/hide queue server selector UI where possible
sessionCounterEnabledbooleanfalseEnable session timer display behavior
showSessionTimeRemainingInStatsOverlaybooleanfalseShow the GFN session-limit countdown in the stats overlay
sessionClockShowEveryMinutesnumber60Re-show the session timer every N minutes
sessionClockShowDurationSecondsnumber30Duration for each session timer display
appAccentColorAppAccentColor"green"Desktop UI accent preset: green, blue, violet, amber, or rose
appThemeAppTheme"auto"UI theme: light, dark, or auto
translucentUIbooleanfalseUse translucent settings/nav overlay surfaces

Controller, window, and app behavior

SettingTypeDefaultDescription
controllerModebooleanfalseController-first library UI
launchInConsoleModebooleanfalseLaunch sessions with GFN's TV/console app launch mode and fullscreen controller shell
autoFullScreenbooleanfalseAuto-enter fullscreen when controller mode triggers it
favoriteGameIdsstring[][]Saved favorites
windowWidthnumber1400Last window width
windowHeightnumber900Last window height
discordRichPresencebooleanfalseEnable Discord Rich Presence
autoCheckForUpdatesbooleantrueCheck for app updates automatically
updateChannelUpdateChannel"stable"Updater channel: stable releases or opt-in nightly previews
lastSeenReleaseHighlightsVersionstring""Last app version for which the What's New modal was acknowledged

Updates and build metadata

The About settings page gets update state from opennow-stable/src/main/updater.ts. Packaged builds check GitHub Releases automatically 12 seconds after startup and then every 6 hours when autoCheckForUpdates is enabled; manual checks, downloads, and restart-to-install actions use the same updater controller. The updater does not auto-download or auto-install updates, can use OPENNOW_GH_TOKEN or GH_TOKEN for GitHub Releases requests, and applies updateChannel through opennow-stable/src/main/updateChannel.ts: stable uses the latest feed without prereleases, while nightly uses the nightly feed with prereleases enabled and downgrade checks disabled.

Linux updater support is gated by the package type detected in opennow-stable/src/main/linuxUpdaterSupport.ts. AppImage installs are supported when the APPIMAGE environment variable is present, and .deb updates are supported only on Debian-compatible systems with dpkg or apt available. Other Linux installs report updates as disabled and direct users to the GitHub Releases AppImage or a Debian/Ubuntu package instead of trying an incompatible .deb updater path.

opennow-stable/src/main/appBuildInfo.ts combines app.getVersion() with build metadata embedded by electron.vite.config.ts. OPENNOW_BUILD_NUMBER, BUILD_NUMBER, or GITHUB_RUN_NUMBER becomes currentBuildNumber; OPENNOW_BUILD_COMMIT or GITHUB_SHA becomes the embedded commit. The Settings UI displays currentDisplayVersion, which is the package version plus (build N) when a build number is available. In unpackaged development mode, updater state is disabled but still reports the same build-info fields.

App language

App language is selected in Settings, but it is renderer UI state rather than a Settings JSON field. The selected locale is stored in browser localStorage as opennow.locale; when unset or invalid, OpenNOW falls back to the browser locale and then English. Translation files are loaded from locales/*.json, with locales/en.json as the English source file.

Compatibility rules

On load, OpenNOW merges saved settings with defaults, migrates legacy values, then saves the file if anything changed.

  • Codec and color-quality values are normalized to the supported user-facing enum values. The default stream preference is H.264 + 8bit_420; 10-bit color depth does not enable HDR, which is still hardcoded off until a separate HDR toggle exists.
  • streamClientMode: "native" is normalized back to "web" only when the app is running on an unsupported desktop platform.
  • nativeStreamerBackend is forced to gstreamer.
  • nativeExternalRenderer is honored only on Windows and is normalized to false elsewhere.
  • transportMode is forced to webrtc; legacy nvst values are migrated away until that transport is complete.
  • nativeVideoBackend is normalized to auto, d3d11, d3d12, or vulkan.
  • updateChannel is normalized to stable or nightly.
  • appTheme is normalized to light, dark, or auto; translucentUI is normalized to a boolean.
  • steamControllerCompatibilityMode is normalized to a boolean.
  • videoShader is normalized to safe UI ranges: sharpen 0–100, saturation 0–200, contrast/brightness 50–150, vibrance 0–100, and film grain 0–100.
  • Old macOS-style default shortcuts are migrated to the current Ctrl+Shift+... defaults.
  • mouseAcceleration is clamped to 1–150; legacy booleans become 100 or 1.
  • recordingBitrateMbps is rounded and clamped to 1–200 Mbps; invalid, missing, or null values use automatic MediaRecorder bitrate selection.
  • appAccentColor is normalized to green, blue, violet, amber, or rose.
  • The short-lived legacy sessionTimeRemainingDisplay: "stats" | "both" value migrates to showSessionTimeRemainingInStatsOverlay: true and is removed from saved settings.

On this page

On this page