Why Is Rendering On If It's Headless?
When running a simulation on a server, there's no display, so it runs in headless mode. That's where a common misconception takes hold — "No display, so no rendering, so no GPU usage either." Both of those follow-on assumptions can be wrong.
"headless" Means "No Window" — Nothing More
headless means no display window; it does not mean no rendering. Plenty of consumers need render output even when nothing is shown on screen.
Rendering diagram…
- HLS streaming / video recording — Pixels must be produced, so rendering is required.
- RTX sensors / synthetic data generation (SDG) — Render output is consumed as point clouds, images, and labels, so rendering is required.
- Pure physics batch (trajectories and KPIs only) — This is the only case where rendering is genuinely unnecessary.
A 2×2 breakdown makes the picture clear:
| Render required | Render not required | |
|---|---|---|
| headless | HLS · recording · RTX sensors | Pure physics batch |
| with display | Debugging · live view | (n/a) |
▶ Simulation footage — the four-camera composite from a warehouse AMR run dispatched with headless: true (overview top-left, top-down top-right, chase bottom-left, aisle bottom-right). Not a single window was opened, yet four cameras rendered at once, producing four 720p streams plus a separate 4K composite. In this run's profile, HLS capture alone consumed 22.7% of every tick — the GPU was working that hard with nothing on screen. Note the top-left overview camera framing only the roof: a useless angle still pays the full render cost.
GPU Usage Is Higher Than You Expect
⚠️ NVENC loads the GPU even with
-RenderOffScreen— Encoding video in headless mode keeps NVENC (the hardware encoder) consuming substantial GPU resources. This is why "it's headless, so I can just leave it running with nohup" is risky — the GPU is working even with no visible window. Unattended runs must have an automatic shutdown (time limit) as a safety guard.
💡 WebRTC is the exception — Headless is sufficient in most cases, but some native livestream paths (WebRTC) require a display context, so headless is disabled for those. What you need to produce determines whether rendering and headless are active.
In a nutshell
📌 headless = no window ≠ no render. HLS, recording, RTX sensors, and synthetic data all require rendering in headless mode, and NVENC uses GPU resources on top of that. Rendering is truly off only for pure physics batches — unattended runs must have an automatic shutdown guard.
See standard test results with videos and verdict evidence on the imSim Portal.
View public results →