Isaac Sim Headless Usage (--no-window)

SkillWeb & browsing

Run a built Isaac Sim 6 headless with --no-window and the renderer disabled. Use for batch SDG jobs, physics-only CI, or unattended server runs.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Isaac Sim Headless Usage (--no-window) skill

What this skill tells your AI

The instructions your AI receives, as published by isaac-sim/isaacsim in skills/isaac-sim-headless-deployment/SKILL.md and read by ahel’s review.

Purpose

Launch Isaac Sim without a window for batch simulation, automated data generation, and server workloads using supported CLI flags and SimulationApp patterns.

Prerequisites

  • Built Isaac Sim ($ISAAC_SIM_DIR or _build/linux-x86_64/release).
  • NVIDIA GPU with a current driver (nvidia-smi).
  • Shell env contract from isaac-sim-orchestrator: $ISAAC_SIM_DIR, $ISAAC_LAB_DIR, $WORKSPACE_DIR.

Limitations

  • Targets Isaac Sim 6 / Kit 110 unless a section states otherwise.
  • Does not replace official NVIDIA documentation for unsupported edge cases.

Troubleshooting

Error / symptomCauseSolution
Extension or import not foundWrong $ISAAC_SIM_DIR or stale buildPoint env vars at _build/linux-x86_64/release or rebuild
Black or empty framesMissing lights or non-RTX render modeAdd dome/key light; confirm RTX / PathTracing settings
Hang on stage load or first renderMDL compile or oversized stageFollow isolation steps in isaac-sim-troubleshooting

This skill covers headless usage of a built or installed Isaac Sim. It does not cover Docker images, container orchestration, or CI/CD wiring — those live with the deployment infrastructure that wraps Isaac Sim, not in this skill.

Available Scripts

ScriptPurposeArguments
scripts/batch_simulation.pyHeadless batch simulation loop for Isaac Sim (Kit 110)see script --help
scripts/ci_physics_nightly.shCI physics-only nightly runner via python.sh or Kit CLI<test_script.py> [args...]

Running scripts

From agent runtimes that expose skill execution helpers, invoke helpers with run_script():

run_script("scripts/batch_simulation.py", args=["--help"])

From a built Isaac Sim tree, run the same file with ./python.sh (Linux) or python.bat (Windows) from _build/*/release, or execute shell helpers directly when they do not require the simulator.

Launch modes

1. Headed (Default)

./isaac-sim.sh
# Launches isaacsim.exp.full.kit with full UI

2. Headless with Rendering

For headless GPU rendering (generates images without a window):

# Native headless — uses EGL/Vulkan offscreen
./isaac-sim.sh --no-window

# With explicit display (required on some systems)
DISPLAY=:0 ./isaac-sim.sh --no-window

3. Headless No Rendering

For physics-only simulation (no viewport, no rendering):

./isaac-sim.sh --no-window --/app/renderer/enabled=false

4. Python Standalone Scripts

Run simulation logic from a standalone Python script:

./python.sh my_simulation.py
# Uses Isaac Sim's Python environment with all extensions available

The script controls headless behavior via the SimulationApp config (see Batch simulation pattern below) — python.sh does not need a --no-window flag.

5. Kit CLI with Script Execution

# Default — full Isaac Sim experience with rendering enabled
./kit/kit apps/isaacsim.exp.full.kit --exec "my_script.py"

# Headless physics-only batch
./kit/kit apps/isaacsim.exp.full.kit \
    --no-window \
    --/app/renderer/enabled=false \
    --exec "physics_batch.py"

Key CLI Flags

FlagDescription
--no-windowDisable window creation (headless)
--/app/renderer/enabled=falseDisable rendering entirely
--/app/window/width=WSet viewport width
--/app/window/height=HSet viewport height
--/app/settings/fabricDefaultStageFrameHistoryCount=NFrame history for Fabric
--enable EXT_IDEnable specific extension
--ext-folder PATHAdd extension search path
--exec SCRIPTExecute script on startup
--no-ros-envSkip ROS 2 auto-sourcing

App Configurations

Config FileUse Case
isaacsim.exp.full.kitFull simulation (default)
isaacsim.exp.full.newton.kitNewton physics engine
isaacsim.exp.full.fabric.kitFabric scene delegate
isaacsim.exp.base.kitMinimal base (faster startup)
isaacsim.exp.base.python.kitPython-only base
isaacsim.exp.base.python.physics.headless.kitPhysics-only headless (CI nightly)
isaacsim.exp.base.zero_delay.kitZero-delay base

CI Physics-Only Nightly Runs

For physics-only nightly CI (no rendering, no window), use the dedicated kit file:

# Kit CLI mode — self-contained headless physics config
./kit/kit apps/isaacsim.exp.base.python.physics.headless.kit \
    --no-window \
    --/app/renderer/enabled=false \
    --exec "test_physics_batch.py"

For standalone Python scripts that bootstrap SimulationApp themselves, use python.sh with renderer-disable flags:

# python.sh mode — flags passed through to Carbonite/Kit settings
./python.sh test_physics_batch.py \
    --/renderer/enabled=false \
    --/app/window/enabled=false \
    --/app/livestream/enabled=false

The kit file (isaacsim.exp.base.python.physics.headless.kit) bakes in:

  • renderer.enabled = false — no GPU rendering subsystem
  • app.window.enabled = false — no window creation
  • app.livestream.enabled = false — no streaming
  • All UI/viewport/manipulator extensions disabled
  • All rendering extensions disabled (omni.hydra.rtx, omni.rtx.*, omni.syntheticdata, omni.replicator.core)
  • Physics-optimal loop settings (rateLimitEnabled = false, manualModeEnabled = true, useFixedTimeStepping = true)

The wrapper script scripts/ci_physics_nightly.sh encapsulates both modes. Set CI_KIT_MODE=1 for Kit CLI, or leave unset for python.sh (default).

Batch Simulation Pattern

The canonical headless bootstrap pattern lives in:

  • source/standalone_examples/api/isaacsim.simulation_app/hello_world.py (minimal)
  • source/standalone_examples/api/isaacsim.simulation_app/load_stage.py (stage open + step loop with --test mode)

For an N-episode batch driver, wrap that bootstrap in a Python for episode in range(N) loop. Use the current APIs:

  • isaacsim.core.experimental.utils.stage for stage open / waiting on load
  • isaacsim.core.simulation_manager.SimulationManager.setup_simulation(dt=..., device=...) to configure physics
  • isaacsim.core.experimental.utils.app (enable_extension, play, stop, update_app) to drive the loop

Skeleton (paraphrased from load_stage.py, adapted for batch):

run_batch_simulation(scene_path, num_episodes, steps_per_episode, dt, device) — headless SimulationApp loop that opens a USD, waits for load, sets up physics, steps, and stops each episode.

See scripts/batch_simulation.py.

Avoid the legacy isaacsim.core.api.World / isaacsim.core.utils.stage paths — they are deprecated in Kit 110.

Migration: see Renaming Extensions for the omni.isaac.*isaacsim.* map covering omni.isaac.core, omni.isaac.utils, and friends.

Performance Tuning for Batch/Headless

Physics-Only (Fastest)

config = {"headless": True, "renderer": None}
# In step loop:
world.step(render=False)

Throughput: 10-50x real-time depending on scene complexity.

Memory Management

  • Clear stage between episodes: world.clear() + garbage collect
  • Use instanceable assets: make_instanceable: true in config.yaml
  • Monitor GPU memory: nvidia-smi — Kit leaks if stages aren't properly cleared
  • GB10 (Jetson): Max ~35K prims, 16GB shared memory — reduce scene complexity

Known Issues (Kit 110)

  • DISPLAY=:0 required for headless viewport on Kit 110 with complex stages on some GPU configurations
  • Viewport never initializes without DISPLAY on some configurations — use --no-window + offscreen rendering
  • CUDA OOM: Monitor with nvidia-smi, keep under 90% GPU VRAM utilization
  • Startup time: ~30-60s cold start; use persistent processes for interactive batch
  • Newton physics + torch conflict: Never import torch before physics settle

Signals

GitHub stars
4k
Forks
539
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
isaac-sim-headless-deployment
Source
github.com/isaac-sim/isaacsim