Skip to main content

Settings, i18n, Theme

User settings

settings.rs holds preferences of the program, not of the project. They are stored as JSON in $XDG_CONFIG_HOME/venturi/settings.json (default ~/.config/venturi/settings.json).

GroupFields
GeneralLanguage, kinetic scrolling (timeline, media pool)
PlaybackProxies on/off and quality, look-ahead / behind seconds, frame-cache budget, HW decode mode (Auto, Off, NVDEC, Vulkan; Auto/Off on macOS), HW decode budget, Intel experimental decode
RecordingInput device, take format, take folder
IntegrationsServe MCP on the local socket
ShortcutsKeymap: one or more shortcuts per Action (34 actions)
Not in the dialogPanel layout, recent projects, EQ and compressor presets

Persistence rules

RuleWhy
Missing or unreadable file → defaults; every key in the file is optional.Old or hand-edited files never block startup; new settings get their default.
Enum values are stored as stable string ids ("nvdec", "it"…), never as indices.Reordering or adding variants does not corrupt saved files.
Actions missing from the file keep their default shortcuts.New actions get a binding without resetting the user's keymap.
Saved by eframe's periodic save() and on close; presets are saved immediately.Panel sizes change every frame while resizing; writing on each change would be wasteful, but a preset must not be lost.
Loaded before any thread starts.The Intel experimental-decode flag must set an environment variable while the process is still single-threaded.

Localisation

  • Strings come from rust-i18n: i18n!("locales", fallback = "en") in main.rs, looked up with t!("key").
  • crates/vv-app/locales/*.yml holds one file per area (menu, timeline, viewer, mixer…), each key with en and it entries.
  • Language is System, English or Italian. System reads the OS locale (sys-locale) and falls back to English if it is not available.
  • Language names are shown in their own language, so the setting can be found from an interface the user cannot read.

Theme

theme.rs keeps egui's default visuals and overrides only the identity colours, taken from the logo:

ConstantUse
ACCENT (#FF6A1F)Selection highlights, active toggles, keyframes, links
ACCENT_FILLDarker accent for fills that carry light text
ACCENT_TRANSLUCENTBox selections
ERROR, PLAYHEADOffline media and clipping; the playhead line

The overrides are applied to both egui's dark and light themes.

Input tweaks

  • Timeline zoom uses Alt+wheel instead of egui's default Ctrl, so Shift+wheel is free for track height and Ctrl+wheel scrolls horizontally.
  • raw_input_hook clears stuck wheel modifiers and, on macOS, fixes the ISO key.
  • Shortcuts are ignored while a text field has focus, so typing a title never cuts or deletes clips.