Recording video
This guide shows how to record mp4 clips from a visualizer or a scene sensor during a run.
Watch the embedded video
Each VideoRecorderCfg entry is independent: different sources write different files at their own
cadence, with no limit on simultaneous recorders.
Quick Start
Add a VideoRecorderCfg to env_cfg.video_recorders:
Or pass --video on the command line to record without editing the environment config. It records the
first capture-capable visualizer selected by --viz. Without --viz, it uses the first configured
visualizer (preferring one that supports capture), or creates a headless Kit visualizer when none is
configured. To record several sources at once, list one VideoRecorderCfg per source in
env_cfg.video_recorders; --video_length and --video_interval apply to every recorder:
See the —video sources for the command-line selection rules, and Sources_
and Clip control_ below for the VideoRecorderCfg options. To record from a different camera
angle than the interactive view, see Recording from an independent camera angle_.
Examples
All three examples use the Shadow Hand cube-reorientation task,
Isaac-Reorient-Cube-Shadow-Camera-Direct, which ships with a built-in tiled camera
sensor. Examples 1 and 2 each demonstrate one recording source; Example 3 combines all four.
Example 1: Kit viewport
- Records the Kit interactive viewport (RTX renderer)
- Shows 4 parallel environments
- One clip is written to
videos/recording_tutorial/example_1/kit_viewport_0000.mp4
Example 2: Scene sensor, headless
- No visualizer window opens; frames are read directly from the
tiled_camerasensor - One clip is written to
videos/recording_tutorial/example_2/sensor_0000.mp4 source="sensor:tiled_camera"is the key under which the camera is registered inenv.scene.sensors- The sensor must have the recorded channel in its
data_types;rgbis the default, anddepth,segmentation, andnormalsare also available (seeSources_)
Example 3: All sources simultaneously
Four independent clips are written to videos/recording_tutorial/example_3/:
kit_viewport_0000.mp4: Kit interactive viewport (RTX renderer)tiled_kit_viewport_0000.mp4: Kit tiled-camera grid (per-environment views)newton_viewport_0000.mp4: Newton GL viewer framebuffersensor_0000.mp4: scene tiled-camera sensor (offline render)
Watch the embedded video Watch the embedded video
Recipes
The recipes below are command-line and configuration snippets that are not part of the tutorial script.
Recording during RL training
Record a short clip at regular intervals while training, without opening a window:
With no --viz or configured visualizer, --video records from a headless Kit visualizer. This writes a
200-step clip every 2,000 steps. The train and play entrypoints put clips in videos/
under the run’s log directory unless a recorder sets output_dir; a script that builds its own
recorders writes to output_dir (default videos). Add --viz kit to watch the run in a
window while recording the same view.
Recording depth or segmentation from a scene sensor
Append a channel to the sensor source to record something other than RGB. Each recorder writes its own file, so several channels of one camera can be recorded in the same run:
Depth uses the turbo colormap over depth_colormap_min to depth_colormap_max. Use the
same prefix-per-recorder pattern for segmentation and normals.
Recording while streaming with Viser or Rerun
Viser and Rerun stream to a browser or viewer and have no frame capture, so they cannot be recorded. Pair them with a capture-capable visualizer that runs headless next to them:
Alternatively, record directly from a scene camera with source="sensor:<name>", which needs no
visualizer.
Recording from an independent camera angle
Configure the recording angle on the visualizer, not the recorder. To record from a headless Newton
visualizer at a different angle alongside an interactive Kit viewer, configure both and omit --viz
so the configuration selects them:
Alternatively, use a ~isaaclab.sensors.CameraCfg sensor in the scene and record
with source="sensor:<name>", which gives full control over the recording viewpoint
without requiring a second interactive visualizer.
Sources
The source string selects what to capture:
The camera angle, resolution, and other visualizer settings are configured on the corresponding
visualizer config, not on the recorder. A named visualizer source must also have a matching active
visualizer in sim.visualizer_cfgs. Set its headless=True when it should capture without a window.
The deprecated visualizer:newton source still selects Newton GL; use visualizer:newton_gl.
The Newton RTX viewer framebuffer can be recorded with "visualizer:newton_rtx", but
recording its streaming view is not supported.
Clip control
One clip at the start of a run:
Recurring clips every 1,000 env steps:
Keep only the most recent clip on disk:
Limitations
-
source="visualizer:kit"andsource="visualizer:kit:streaming_view"require cubric to propagate Newton Fabric scene transforms to the RTX renderer. Without cubric, a warning is logged and a black-frame warning is emitted at clip write time. Usesource="visualizer:newton_gl"for guaranteed capture with Newton physics. -
source="visualizer:newton_gl:streaming_view"andsource="visualizer:kit:streaming_view"requirestreaming_view=Trueon the corresponding visualizer cfg. A~RuntimeErroris raised at the first capture attempt if it is not set. -
For
source="sensor:<name>", the named sensor must exist on the scene config with the recorded channel ("rgb"by default) in itsdata_types.
To record video while streaming with Rerun or Viser, see Recording while streaming with Viser or Rerun_.
See also
- https://isaac-sim.github.io/IsaacLab/release/3.0.0/source/concepts/visualization.html: configuring interactive visualizers and recording from them
- /source/how-to/visualizer_streaming_camera_view: tiled camera panel setup
- /source/how-to/capture_sensor_frames: saving per-frame sensor outputs as images