Replicator Agent (IRA)#
This guide covers breaking changes and migration steps for users upgrading from IRA 0.x.x (shipped with Isaac Sim 5.1 and before) to IRA 1.x.x (Isaac Sim 6.0 and after).
IRA 1.0.0 is a complete architectural overhaul. The configuration schema, Python API, dependency graph, and internal module layout have all changed. Existing 0.x configs and code will not work without modification.
What Changed at a Glance#
IRA 1.x retains all core capabilities of 0.x, including:
environment loading
character and robot spawning
sensor placement
synthetic data generation
While it redesigns how each of those areas is configured and executed. The table below summarizes every major feature area, including, the version that supports it and what has changed:
Feature |
0.x |
1.x |
Notes |
|---|---|---|---|
Environment / Scene Loading |
Yes |
Yes |
|
Environment Prop Sublayers |
– |
New |
|
Human Character Spawning |
Yes |
Yes |
Flat |
Robot Spawning (Nova Carter, iw.hub) |
Yes |
Yes |
|
Character Behavior Control |
Yes |
Yes |
External |
Robot Behavior Control |
Yes |
Yes |
Same change: external command files replaced by inline |
Named Actor Groups |
– |
New |
Characters, robots, and sensors are organized into independently configured named groups. |
Routine-trigger Behavior Loop |
– |
New |
Actors continuously pick weighted behaviors; triggers interrupt routines with priority-queued sequences. Replaces the old |
Behavior Types (wander, patrol, stop/halt) |
Yes |
Yes |
0.x supported GoTo, Idle, and Patrol-like commands through text files. 1.x formalizes these as typed behaviors ( |
Behavior Tree Groups |
– |
New |
A character or robot group can use |
Event and Time Triggers |
Yes |
Yes |
0.x used |
USD Schema Integration |
– |
New |
Actor config is persisted in USD API schemas ( |
Per-actor Deterministic Seed |
– |
New |
Each actor’s seed is derived from its name, group, and the global seed, enabling reproducible yet independent randomization. |
Sensor and Camera Placement |
Yes |
Yes |
|
Sensor Placement Strategies |
– |
New |
|
Camera Randomization Parameters |
Yes |
Yes |
Height, angle, focal length, and distance ranges moved from extension settings into the per-group YAML config. |
Single Data Writer |
Yes |
Yes |
|
Multiple Concurrent Writers |
– |
New |
|
Per-writer Timing Control |
– |
New |
|
Per-writer Sensor Selection |
– |
New |
|
Additional Writers |
– |
New |
|
Semantic Labels on Actors |
– |
New |
|
Character Colliders |
– |
New |
Optional cylinder or box collision shapes per character group. |
Robot Onboard Camera Selection |
– |
New |
|
Pydantic Config Validation |
– |
New |
Config files are validated with Pydantic v2 models providing clear, actionable error messages. |
Simulation Duration in Seconds |
– |
New |
|
UI Workflow |
Yes |
Yes |
Simplified from 5 steps to 3. The Generate Random Commands and Save Commands steps are removed. |
Headless and Script-based Generation |
Yes |
Yes |
|
Animation Backend |
Yes |
Yes |
|
Command Files ( |
Yes |
Removed |
Replaced entirely by inline |
|
Yes |
Removed |
Replaced by |
|
Yes |
Removed |
No longer supported. |
Workflow and UI Changes#
The end-to-end workflow for running IRA has changed significantly.
UI Workflow#
The UI workflow has been simplified. The biggest change is the removal of the Generate Random Commands step.
Step |
0.x Workflow |
1.x Workflow |
|---|---|---|
1 |
Load config file |
Load config file (default minimal config loads automatically) |
2 |
Click Set Up Simulation |
Click Set Up Simulation |
3 |
Click Generate Random Commands for characters |
(removed – behaviors are defined in config) |
4 |
Click Save Commands (disk icon) |
(removed – no command files) |
5 |
Click Start Data Generation |
Click Start Data Generation |
In 0.x, command generation and saving were separate manual steps. In 1.x, all
actor behavior is pre-defined in the YAML config using routines and
triggers, so the setup-to-generation flow is two clicks.
Default Config File Location#
Version |
Location |
|---|---|
0.x |
|
1.x |
|
In 1.x, minimal.yaml is loaded by default. For a full example with
characters, cameras, and writers, use full_pipeline.yaml.
Headless or Script-Based Data Generation#
The script entry point has changed:
# OLD (0.x)
./python.sh tools/actor_sdg/sdg_scheduler.py -c [config file path]
# NEW (1.x)
./python.sh tools/actor_sdg/actor_sdg.py -c [config file path]
The sdg_scheduler.py script is replaced by actor_sdg.py. The
--save_usd flag from the old script is no longer documented as a script
argument.
Simulation Duration#
In 0.x, simulation_length was specified in frames (assuming 30 FPS).
Users had to mentally convert: 300 frames = 10 seconds.
In 1.x, simulation_duration is specified in seconds directly
(for example, 60.0). The simulation still runs at a fixed 30 FPS internally.
Configuration File Changes#
The YAML configuration schema has been redesigned from scratch.
Version Field#
The version field now tracks the extension version and must have a
1.x.x major version.
# 0.x
isaacsim.replicator.agent:
version: 0.7.0
# 1.x
isaacsim.replicator.agent:
version: 1.6.0
Top-Level Structure#
0.x Field |
1.x Replacement |
Notes |
|---|---|---|
|
|
Moved to root level. Now a 32-bit uint (0..4294967295). Auto-generated from system time if omitted. |
|
|
Renamed. Was in frames (at 30 FPS), now in seconds. A value of |
|
|
Section renamed from |
|
|
Completely restructured (refer below). |
|
|
Completely restructured (refer below). |
|
|
Completely restructured (refer below). |
|
|
Completely restructured (refer below). |
|
(removed) |
Response section no longer exists. Use triggers instead. |
|
(removed) |
Event section no longer exists. Use triggers instead. |
Example of top-level migration:
# OLD (0.x)
isaacsim.replicator.agent:
version: 0.7.0
global:
seed: 123456789
simulation_length: 1800
# NEW (1.x)
isaacsim.replicator.agent:
version: 1.6.0
seed: 123456789 # optional, auto-generated if omitted
simulation_duration: 60.0 # 1800 frames / 30 FPS = 60 seconds
environment:
base_stage_asset_path: "Isaac/Environments/Simple_Warehouse/full_warehouse.usd" # now required
Environment (was scene)#
The scene section has been renamed to environment and expanded.
# OLD (0.x)
# scene.asset_path was defined in the config, OR fell back to settings
# NEW (1.x)
environment:
base_stage_asset_path: "Isaac/Environments/Simple_Warehouse/full_warehouse.usd"
prop_asset_paths: [] # optional: additional USD assets loaded as sublayers
Key differences:
base_stage_asset_pathis required (no more fallback to extension settings).Supports relative paths that resolve against the Isaac Sim asset root, full URLs, and absolute filesystem paths.
New
prop_asset_pathsfield for layering additional assets into the stage.
Character Section#
The character section now uses a named groups system with inline behavior definitions (routines), replacing the old flat structure with external command files.
# OLD (0.x)
character:
asset_path: "" # single path for all characters
command_file: default_command.txt # external text file for commands
num: 8
filters: []
spawn_area: []
navigation_area: []
# NEW (1.x)
character:
root_prim_path: "/World/Characters" # optional, defaults to /World/Characters
motion_library_path: "" # optional; 1.4.0+ moved this to character root (was per-group)
groups:
warehouse_workers: # named group
num: 10
asset_path: "Isaac/People/Characters/"
spawn_areas: [] # renamed from spawn_area
semantic_labels: [["class", "character"]]
routines: # replaces command_file
- wander:
weight: 1.0
repeat: 1
walk:
speed_range: [0.8, 1.5]
distance_range: [5.0, 10.0]
navigation_areas: [] # renamed from navigation_area
idle:
- animation: idle
weight: 1.0
time_range: [2.0, 5.0]
triggers: [] # new: event-driven behavior interrupts
colliders: null # new: optional collision shapes
Key differences:
Named groups: Characters are now organized into named groups under
character.groups, each with independent settings.No more command files: The
command_filefield and external.txtcommand files are gone. Behaviors are defined inline usingroutines.Routines replace commands: Each routine entry is a behavior type (
wander,patrol,stop,custom_behavior) with inline parameters.filtersfield is removed.spawn_arearenamed tospawn_areas.navigation_areais now per-behavior underwalk.navigation_areas.New
semantic_labels,triggers, andcollidersfields on character groups.motion_library_pathis also new but lives at thecharacter:root (not inside a group) as of IRA 1.4.0; placing it inside a group now fails validation.
Robot Section#
Similar to characters, robots now use named groups with inline routines.
# OLD (0.x)
robot:
command_file: default_robot_command.txt
nova_carter_num: 0
iw_hub_num: 0
write_data: false
spawn_area: []
navigation_area: []
# NEW (1.x)
robot:
root_prim_path: "/World/Robots"
groups:
carters:
num: 2
config_file_path: "nova_carter.yaml" # IAR robot config file
spawn_areas: []
agent_radius: null # optional NavMesh agent radius
write_data: false
camera_prim_paths: [] # optional: specific cameras for data
semantic_labels: [["class", "robot"]]
routines:
- wander:
move:
distance_range: [10.0, 15.0]
navigation_areas: []
idle:
time_range: [2.0, 5.0]
triggers: []
Key differences:
nova_carter_num/iw_hub_numare gone. Use named groups withnumandconfig_file_pathpointing to the appropriate IAR config.command_filereplaced by inlineroutines(same as characters).New
config_file_pathfield references the robot’s Isaac Anim Robot (IAR) configuration.New
camera_prim_pathsfor specifying which onboard cameras to use for data generation.spawn_arearenamed tospawn_areas.
Sensor Section#
The sensor section has been redesigned to support named groups and pluggable placement strategies.
# OLD (0.x)
sensor:
camera_num: 4
# OR
camera_list: ["/World/Camera1", "/World/Camera2"]
# NEW (1.x)
sensor:
root_prim_path: "/World/Cameras"
groups:
ceiling_cameras:
num: 6
aim_at_targets: # placement strategy
height_range: [7.0, 10.0]
look_down_angle_range: [30.0, 45.0]
focal_length_range: [10.0, 15.0]
distance_range: [5.0, 10.0]
coverage_cameras:
num: -1 # auto-calculate for maximum coverage
maximum_coverage:
target_coverage_ratio: 0.8
height_range: [2.0, 5.0]
Key differences:
camera_num/camera_listreplaced by named groups undersensor.groups.Each group specifies a placement strategy:
aim_at_targetsormaximum_coverage.Camera randomization parameters (height, angle, focal length, distance) that were in extension settings are now in the config YAML per sensor group.
num: -1withmaximum_coveragetriggers automatic camera count calculation.
Replicator Section#
The replicator section now supports multiple concurrent writers with per-writer timing control.
# OLD (0.x)
replicator:
writer: IRABasicWriter # single writer, selected by name
parameters: # flat parameter dict
object_info_bounding_box_2d_tight: false
object_info_bounding_box_2d_loose: false
semantic_filter_predicate: "class:character|robot;id:*"
rgb: true
camera_params: true
# NEW (1.x)
replicator:
hide_debug_visualization: true # new: hides NavMesh/skeleton debug viz
writers:
IRABasicWriter: # writer name is the dict key
rgb: true
camera_params: true
object_info_bounding_box_2d_tight: true
object_info_bounding_box_2d_loose: true
semantic_filter_predicate: "class:character|robot;id:*"
start_frame: 30 # new: per-writer frame control
# OR use time-based:
# start_time: 1.0
# end_time: 50.0
# sensor_prim_list: [] # new: optional per-writer sensor selection
Key differences:
writer+parametersreplaced bywritersdict. The key is the writer name, and the value contains the parameters directly (no nesting underparameters).Multiple writers: You can define multiple writers in a single config (for example,
IRABasicWriter+CosmosIRAWriter).Per-writer
start_frameandend_frameorstart_timeandend_timefor timing control.Per-writer
sensor_prim_listfor selecting specific cameras.Default
start_frameis30(skips initial settling frames).New writers:
CosmosIRAWriter,SceneGraphWriter,CustomWriter. The stock ReplicatorBasicWritercan be used viaCustomWriterwithwriter_name: "BasicWriter".IRABasicWriterdefaults changed:object_info_bounding_box_2d_tight,object_info_bounding_box_2d_loose, andobject_info_bounding_box_3dnow default totrue.
Behavior System Architecture Changes#
The actor behavior system has been fundamentally redesigned.
Old System (0.x): Command Files + omni.anim.people#
In 0.x, actor behavior was controlled by external command files (.txt):
Characters were driven by
omni.anim.peoplewhich read a text-based command file line-by-line.Robots were driven by
isaacsim.anim.robotwith a similar command file.A Generate Random Commands button in the UI created these command files based on randomization settings stored in the extension settings.
Command transition maps (
.json) controlled probabilistic transitions between commands.
New System (1.x): Routine-Trigger Loop + omni.anim.behavior#
In 1.x, actor behavior uses a routine-trigger loop backed by
omni.anim.behavior.core:
Routines: A list of weighted behaviors defined in the YAML config. Actors repeatedly pick a behavior from their routine pool based on probability weights, using the actor’s individual seed.
Triggers: Event-driven or time-driven interrupts. When activated, the actor pauses its routine and executes the trigger’s behavior sequence. Higher-priority triggers can preempt running triggers.
USD Schema: After loading, each actor’s configuration is embedded in USD API schemas (
IRACharacterAPIon SkelRoot for characters,AnimRobotAPIon robot root prims). Behaviors and triggers become individual USD prims referenced by the actor.
Aspect |
0.x |
1.x |
|---|---|---|
Behavior source |
External |
Inline YAML |
Randomization |
UI button + extension settings |
Per-behavior |
Transition logic |
Transition map JSON file |
Weighted random selection from routine pool |
Interrupts |
|
|
Animation backend |
|
|
Determinism seed |
Global seed |
Per-actor seed (name + group + global seed hashed) |
Stage representation |
Runtime only |
Persisted in USD prims and schemas |
Available Behavior Types#
Character behaviors:
wander– random walk and idle cycles with configurable speed, distance, idle animationspatrol– follow a path defined by 3D points or target primsstop– remain stationary for a configurable time
Robot behaviors:
wander– random movement and idle with configurable distance and wait timepatrol– follow a path defined by 3D points or target primshalt– stop for a configurable duration
Trigger types (shared by characters and robots):
event_trigger– fires on a named eventtime_trigger– fires after a specified time (in seconds)collision_trigger– fires when a named collider on the actor begins or ends overlapping with another named collider
Behavior Tree Groups (alternative to routines/triggers)#
Starting in IRA 1.3.0 (characters) and 1.5.0 (robots), a group may opt out of the routine-trigger system by declaring a behavior_tree JSON asset and an optional overrides block at the group level. All behavior logic is then authored inside the referenced tree; routines, triggers, and colliders are not applied. Review the Configuration File Guide sections “Behavior Tree Character Group (Experimental)” and “Behavior Tree Robot Group (Experimental)” for the full schema and examples.
Step-by-Step Migration Checklist#
Config File Migration#
Change
versionto1.x.x(for example,1.5.0).Move
global.seedto root-levelseed.Convert
global.simulation_length(frames) tosimulation_duration(seconds) at root level.Formula:
simulation_duration = simulation_length / 30.0
Rename
scene.asset_pathtoenvironment.base_stage_asset_path(this field is now required).Restructure
characterintocharacter.groups.<group_name>withnum,asset_path, and inlineroutines.Convert external command files (
.txt) to inlineroutinesentries. Map old commands to new behavior types:GoTo commands ->
wanderbehavior withdistance_rangeIdle commands ->
wanderbehavior withidlelistPatrol-like sequences ->
patrolbehavior withpath_pointsortarget_primsReview the Configuration File Guide for full behavior type documentation.
Restructure
robotintorobot.groups.<group_name>withnum,config_file_path, and inlineroutines.Replace
nova_carter_num: Nwith a group entry usingconfig_file_path: "nova_carter.yaml".Replace
iw_hub_num: Nsimilarly with the appropriate IAR config.
Replace
sensor.camera_numandcamera_listwithsensor.groups.<group_name>using a placement strategy (aim_at_targetsormaximum_coverage).Move camera randomization settings (height, angle, focal length, distance ranges) from extension settings into the sensor group config.
Replace
replicator.writer+replicator.parameterswithreplicator.writers.<WriterName>: { ... }.Remove
response,event, andincidentsections. Replace withtriggerson individual character/robot groups.
Quick Config Conversion Example#
Old (0.x):
isaacsim.replicator.agent:
version: 0.7.0
global:
seed: 123456789
simulation_length: 1800
sensor:
camera_num: 4
character:
asset_path: ""
command_file: default_command.txt
num: 8
robot:
command_file: default_robot_command.txt
nova_carter_num: 2
iw_hub_num: 0
write_data: false
replicator:
writer: IRABasicWriter
parameters:
semantic_filter_predicate: "class:character|robot;id:*"
rgb: true
camera_params: true
New (1.x):
isaacsim.replicator.agent:
version: 1.6.0
seed: 123456789
simulation_duration: 60.0
environment:
base_stage_asset_path: "Isaac/Environments/Simple_Warehouse/full_warehouse.usd"
sensor:
groups:
default_cameras:
num: 4
aim_at_targets:
height_range: [2.0, 3.0]
look_down_angle_range: [0.0, 60.0]
focal_length_range: [13.0, 23.0]
distance_range: [6.5, 14.0]
character:
groups:
default_characters:
num: 8
asset_path: "Isaac/People/Characters/"
routines:
- wander:
walk:
speed_range: [1.0, 1.0]
distance_range: [5.0, 15.0]
idle:
- animation: idle
time_range: [2.0, 5.0]
robot:
groups:
nova_carters:
num: 2
config_file_path: "nova_carter.yaml"
routines:
- wander:
move:
distance_range: [10.0, 15.0]
idle:
time_range: [2.0, 5.0]
replicator:
writers:
IRABasicWriter:
semantic_filter_predicate: "class:character|robot;id:*"
rgb: true
camera_params: true
start_frame: 30