generate-incident-config
GitHub生成并验证 Isaac Sim IRI 事件配置 YAML,涵盖 topple、fire、spill 等 incident 定义。用于编写或调试场景事件结构配置,确保格式与版本兼容。
Trigger Scenarios
Install
npx skills add isaac-sim/IsaacSim --skill generate-incident-config -g -y
SKILL.md
Frontmatter
{
"name": "generate-incident-config",
"license": "Apache-2.0",
"metadata": {
"owner": "Isaac Sim",
"author": "NVIDIA Isaac Sim <isaac-sim@nvidia.com>",
"service": "isaacsim.replicator.incident",
"version": "1.0.0",
"reviewed": "2026-07-27"
},
"description": "Author and validate the IRI event config YAML defining topple, fire, and spill incidents. Use when writing or debugging an incident config; to drive events use run-incident-events."
}
Generate an IRI Incident Config
Purpose
Produce the YAML that defines which incidents happen in a scene and when — the
file the Event Config File panel loads and that
IncidentManager.setup_incidents_from_config_file() consumes. Covers the three
event types in isaacsim.replicator.incident.core (topple, fire, spill), their
item groups, and the three trigger types.
Prerequisites
- An installed Isaac Sim carrying
isaacsim.replicator.incident.core($ISAAC_SIM_DIR) — needed only to read the extension version, not to run. - Python 3 with PyYAML for the generator script. No GPU, no Kit session.
- Shell env contract from
isaac-sim-orchestrator:$ISAAC_SIM_DIR,$WORKSPACE_DIR.
Limitations
- This repo does not build the extension.
isaacsim.replicator.incident.coreis authored in themetrosimrepo and consumed here fromextscache. This skill describes and generates its config format; schema changes belong upstream. - The config alone does nothing. Items must carry incident tags in the USD stage
first, and the config must then be applied to a live stage — both belong to
run-incident-events. - Validation here is structural and offline. It cannot tell you whether
/World/Box01exists or is tagged; only a live stage can. - Schema-backed validation needs a build whose
isaacsim.replicator.incident.coreshipsdata/config_schema/iri_config.schema.json. Against builds without it the script falls back to its own equivalent checks, which must be kept in step with the extension by hand. FireEventaccepts no radius.PyroEventPropertydefinesflammable_item.itemand nothing else, andgenerate_pyro_event_from_propertyhardcodes the nearby radius to1.0with the config read commented out. The extension's own shippeddefault_config.yamlstill carries aflammable_nearby_radiuskey that has no effect.
Troubleshooting
| Error / symptom | Cause | Solution |
|---|---|---|
does not contain header:isaacsim.replicator.incident |
Top-level header missing or misspelled — note it is not .core |
Nest everything under isaacsim.replicator.incident: |
version info is missing |
No version key inside the header block |
Add version:; generate with --from-ext to get it right |
Invalid config file version |
Major component differs from the installed extension | Only the major is compared — any 0.x config version passes against a 0.x build |
| A key you set has no effect | EventPropertyBase.set_value copies only keys it already knows; unknown keys are dropped with no error |
Run --validate; it reports every dropped key |
--validate reports mode=builtin unexpectedly |
The build ships no schema file, no --from-ext given, or jsonschema>=4.0 is not importable |
The note: line names the cause; pass --from-ext "$ISAAC_SIM_DIR", or --require-schema to make it fatal |
[seed] value must be a non-negative number |
global.seed is negative |
Use a non-negative integer |
| Events load but never fire | Event has no trigger block |
Every event needs a trigger; --validate flags this as an error |
| Only the first event happens | Several events target the same random sentinel and tagged items ran out | Tag more items, or pin item: to specific prim paths |
When to use this skill
| You want | Skill |
|---|---|
| Write / fix / validate an incident config YAML | this skill |
| Tag prims, apply a config to a live stage, record a report | run-incident-events |
| Caption a scene or build scene graphs for VLM training | vlm-scene-captioning |
| Static-scene Replicator SDG with the standard writers | data-collection-sim |
Config anatomy
isaacsim.replicator.incident: # header — the extension family, not ".core"
version: EXT_VERSION # from the installed extension; only the MAJOR component is compared
global:
report_dir: /path/to/output # where incidents_report.json lands
seed: 123456 # non-negative int; seeds random item selection
event:
event_list:
- ToppleEvent: # one single-key mapping per event
name: shelf collapse # also the incident report's top-level key
topple_item:
item: $random_loose_item$
topple_nearby_radius: 1.5
trigger:
type: time
time: 3
| Event key | Item group | Item keys |
|---|---|---|
ToppleEvent |
topple_item |
item, topple_nearby_radius |
FireEvent |
flammable_item |
item |
SpillEvent |
leakable_item |
item, target_size, leak_duration |
item takes a tagged prim path or one of $random_loose_item$,
$random_flammable_item$, $random_leakable_item$. Full key semantics,
trigger schemas, and the loader's parsing rules are in
references/config-schema.md; the failure modes
that produce a silently wrong config are in
references/authoring-notes.md. An index of both is in references/README.md.
Available Scripts
| Script | Purpose | Arguments |
|---|---|---|
scripts/starter_iri_config.py |
Generate an IRI config from event specs, or validate an existing one against the extension schema when available | CLI flags via argparse (see script --help) |
Running scripts
The script is offline. From agent runtimes that expose skill execution helpers:
run_script("scripts/starter_iri_config.py", args=["--help"])
Directly:
python3 skills/generate-incident-config/scripts/starter_iri_config.py \
--from-ext "$ISAAC_SIM_DIR" \
--event "topple:time=3,radius=1.5" \
--event "fire:time=6,item=/World/Pallet" \
--event "spill:time=9,target_size=1.5,leak_duration=5" \
--report-dir "$WORKSPACE_DIR/EventsResult" \
--output "$WORKSPACE_DIR/iri_config.yaml"
Workflow
-
Generate. Pass
--from-ext "$ISAAC_SIM_DIR"so theversionis read from the installed build rather than guessed. With no--eventflags you get one of each type on a staggered time trigger. -
Aim the events. Leave
itemat its random sentinel to let the extension pick among tagged prims, or setitem=/World/Box01to pin a specific one. A pinned path must be tagged on the stage — this skill cannot check that. -
Validate. Run before every handoff. It reports version-major mismatches, missing triggers, bad seeds, and — most usefully — keys the loader would drop in silence.
python3 scripts/starter_iri_config.py --validate "$WORKSPACE_DIR/iri_config.yaml" \ --from-ext "$ISAAC_SIM_DIR"Expect
IRI_CONFIG_OK: <path> mode=... errors=0 warnings=0. Exit code is1when errors are present, so it drops straight into CI.mode=reports which rule set was used — see Validation modes. Add--strictto treat unknown keys as errors rather than warnings. -
Hand off. Give the path to
run-incident-eventsaction=setup, or load it from the Event Config File panel. The config is not stored in the USD stage — it saves and loads separately from the scene.
Validation modes
Newer isaacsim.replicator.incident.core builds ship a JSON Schema at
data/config_schema/iri_config.schema.json. When it is present the script
validates against it; otherwise it uses its own equivalent checks. Selection is
automatic, and the result line reports which ran:
mode= |
Rules used | When |
|---|---|---|
schema |
The extension's shipped iri_config.schema.json — the same document the extension validates with at load time |
A build that ships the schema, reachable via --from-ext, and jsonschema>=4.0 importable |
builtin |
Equivalent checks written into this script | Build without the schema, no --from-ext, or no Draft 2020-12 jsonschema available |
Prefer mode=schema when you can: it cannot drift from the extension. builtin
exists so the script works everywhere, including against builds that predate the
schema — the two agree on every fixture the extension ships.
| Flag | Effect |
|---|---|
--from-ext <path> |
Finds the schema automatically (also derives the version) |
--schema <path> |
Points at a schema explicitly |
--require-schema |
Fails instead of falling back to builtin. Use in CI once the pinned build ships the schema |
--strict |
Unknown keys become errors instead of warnings, matching the extension's strict_config_validation default |
Editing an existing config by hand
Editing directly is fine; the risk is that mistakes are silent. set_value()
walks the keys it already knows and ignores the rest, so a typo leaves the
default in place and the run proceeds with the wrong value. Re-run --validate
after any hand edit.
Two starting points ship with the extension:
<ext>/config/default_config.yaml— one of each event type. Note it declares a staleversion(which still passes, since only the major is compared) and carries the inertflammable_nearby_radiuskey.- The Event Config File panel's save button, which always writes the running build's version.
Related skills
run-incident-events— tags prims, applies this config to a live stage, records the report.isaac-sim-remote— the transportrun-incident-eventsrides on.data-collection-sim— Replicator writers that capture the incident semantic labels.isaac-sim-orchestrator— env-var contract and skill routing.
Version History
- 2469084 Current 2026-09-22 15:44


