Settings

Editor preferences and configuration options

Overview#

The Settings panel provides configuration options for the editor including display settings, performance options, connection settings, and user preferences. Settings are persisted in LocalStorage and survive across sessions.

Display Settings#

Theme#

OptionDescription
DarkDark theme (default)
LightLight theme
AutoFollow system preference

Viewport Quality#

PresetDescription
LowReduced quality for performance
MediumBalanced quality
HighHigh quality rendering
UltraMaximum quality

Visual Helpers#

SettingDescriptionDefault
GridShow ground gridOn
Grid SizeGrid dimensions10
Grid DivisionsGrid subdivisions10
Axes HelperShow XYZ axesOn
Scale BarShow scale indicatorOff

Performance Settings#

SettingDescriptionDefault
Target FPSFrame rate limit (30/60/120)60
VSyncVertical syncOn
Frustum CullingSkip off-screen objectsOn

Connection Settings#

SettingDescription
Server URLWebSocket server address
Auto-reconnectReconnect on disconnect
Connection StatusCurrent connection state

Sync Options#

SettingDescriptionDefault
Sync CameraShare camera viewOff
Sync SelectionShare selection stateOn

Editor Preferences#

General#

SettingDescriptionDefault
Auto-saveAutomatic scene savingOn
Auto-save IntervalSave frequency (seconds)60
Undo LevelsMaximum undo history50
Confirm DeleteShow delete confirmationOn

Controls#

SettingDescriptionDefault
Mouse SensitivityCamera rotation speed1.0
Zoom SpeedScroll zoom factor1.0
Gizmo SizeTransform gizmo scale1.0

Snap Settings#

SettingDescriptionDefault
Snap to GridPosition snappingOff
Grid Snap SizeSnap increment1.0
Rotation SnapAngle snappingOff
Rotation Snap AngleSnap degrees15°

Units#

SettingOptionsDefault
LengthMeters, FeetMeters
AngleDegrees, RadiansDegrees
TimeSeconds, FramesSeconds

Extension Settings API#

Extensions can define custom settings using the @settings decorator:

from witwin.settings import Settings, settings
from witwin.components import float_field, bool_field, string_field
 
@settings(name="MyExtensionSettings", category="my_extension")
class MyExtensionSettings(Settings):
    api_key = string_field("", description="API Key")
    enabled = bool_field(True, description="Enable extension")
    threshold = float_field(0.5, min=0.0, max=1.0)

Accessing Settings#

from witwin.settings import SettingsRegistry
 
# Get settings instance
my_settings = SettingsRegistry.get("my_extension")
 
# Read values
if my_settings.enabled:
    print(f"Threshold: {my_settings.threshold}")

Storage#

Settings are stored in browser LocalStorage:

localStorage["witwin_settings"] = JSON.stringify({
  theme: "dark",
  viewportQuality: "high",
  gridEnabled: true,
  // ...
})