Skip to content

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.exe is running on discrete NVIDIA/AMD graphics (verify FPS counter).
  • [ ] Time Bounds Verified: Simulation start/end dates fall inside all loaded .bsp SPICE kernel windows.
  • [ ] Offline Readiness: Any HttpSynchronization or 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 PropertyVisibility debug panels are toggled off.