Cheat Sheet & Boilerplate Templates
Quick-reference hotkeys, interactive Lua console (~) commands, and copy-paste starter templates for new OpenSpace assets.
Essential Keyboard Shortcuts
| Key | Action | Notes |
|---|---|---|
~ (Tilde) |
Open / Close Lua Console | Execute single-line Lua commands live during a session. |
Spacebar |
Pause / Resume Simulation Time | Freezes orbital motion while keeping camera navigation active. |
F |
Toggle Camera Friction | Switches smooth inertial damping on/off for rotation, zoom, and roll. |
Shift + Left-Drag |
Roll Camera | Rotates camera roll angle around the view axis. |
Ctrl + Left-Drag |
Pan Camera | Offsets focus target framing without orbiting. |
Esc |
Close Open Menus / Exit Prompt | Closes active UI popovers or prompts to quit OpenSpace. |
Live Lua Console (~) Snippets
Press ~ in OpenSpace to test properties, camera flights, and time jumps on the fly:
-- Fly smoothly to a target node
openspace.navigation.flyTo("Mars")
-- Fly to exact geographic coordinates (Node, Lat, Lon, Altitude in meters)
openspace.navigation.flyToGeo("Earth", 41.8663, -87.6068, 50000)
-- Reset camera to default startup view
openspace.navigation.resetNavigationState()
-- Jump to a specific UTC timestamp
openspace.time.setTime("2026-11-12T20:00:00")
-- Set simulation speed (seconds of sim time per real second)
openspace.time.setDeltaTime(3600) -- 1 hour / sec
-- Pause / unpause simulation clock
openspace.time.togglePause()
-- Toggle visibility of a single node
openspace.setPropertyValueSingle("Scene.ISS.Renderable.Enabled", true)
-- Batch-disable all orbital trails matching a wildcard
openspace.setPropertyValue("Scene.*Trail.Renderable.Enabled", false)
-- Change PropertyVisibility tier via script (0=Novice, 1=User, 2=Advanced, 3=Developer)
openspace.setPropertyValueSingle("Modules.ImGUI.Main.PropertyVisibility", 2)
Minimal .asset Boilerplate Template
Copy this skeleton when starting any new custom node in ${USER}/data/assets/:
local assetHelper = asset.require("util/asset_helper")
local parentAsset = asset.require("scene/solarsystem/planets/earth/earth")
local CustomAssetNode = {
Identifier = "UniqueNodeIdentifier",
Parent = "Earth",
Transform = {
Translation = {
Type = "GlobeTranslation",
Globe = "Earth",
Latitude = 0.0,
Longitude = 0.0,
Altitude = 1000
},
Rotation = {
Type = "GlobeRotation",
Globe = "Earth",
Latitude = 0.0,
Longitude = 0.0
},
Scale = {
Type = "StaticScale",
Scale = 1.0
}
},
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = 10000,
Texture = asset.localResource("texture.png")
},
GUI = {
Name = "Display Name in UI",
Path = "/Custom/Category"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(CustomAssetNode)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(CustomAssetNode)
end)
Pre-Show Checklist
Before running a live presentation or dome recording:
- [ ] GPU Confirmed:
OpenSpace.exeis running on discrete NVIDIA/AMD graphics (verify FPS counter). - [ ] Time Bounds Verified: Simulation start/end dates fall inside all loaded
.bspSPICE kernel windows. - [ ] Offline Readiness: Any
HttpSynchronizationor WMS layers have been pre-cached in${USER}/cache/if the venue has restricted internet. - [ ] Keybind Safety: Unused destructive hotkeys are overridden or disabled in your show
.profile. - [ ] Clean Viewport: Developer overlays, FPS counters, and
PropertyVisibilitydebug panels are toggled off.