Isaac Sim Validator

SkillDev tools

Pre-delivery QA gate for Isaac Sim scripts (imports, lights, paths, frames). Level 3 executes untrusted Python unsandboxed and needs --confirm-execute. Use before handing off simulation work.

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 Validator skill

What this skill tells your AI

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

WARNING: Level 3 executes the target script with your full user privileges. There is no container or sandbox isolation. Only use --confirm-execute on scripts you fully trust.

Purpose

Reject common delivery defects: black frames, deprecated imports, hardcoded user paths, missing lights, wrong render modes, and undersized SimulationApp configurations.

Levels 1–2 are static checks only. Level 3 runs the target Python script under timeout with the calling user's privileges. Level 3 requires an explicit --confirm-execute (or CONFIRM_EXECUTE=1) opt-in; it is not a sandbox.

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

  • Levels 1–2 cannot prove runtime correctness for every workload.
  • Level 3 executes untrusted script content only after --confirm-execute; there is no container/firejail isolation.
  • Thresholds target common demo/SDG failures, not all product features.

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

Final gate before delivery. Reject outputs that fail the checks below; do not soften results.

Available Scripts

ScriptPurposeArguments
scripts/validate_sim.shValidate simpositional args per script header (see script)

Running scripts

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

run_script("scripts/validate_sim.sh", args=[])

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.

Universal checklist (apply to every output)

CheckPassOn fail
Script pathexists, readablereject: Script path invalid: <path>
File size> 1 KBreject: Script empty or corrupted
isaacsim importuses isaacsim.*, not omni.isaac.corereject: Use isaacsim.* namespace; omni.isaac.core is deprecated
SimulationApp configexplicit width and heightreject: SimulationApp without window args causes swapchain-capture size mismatch
Lights presentDomeLight (intensity >= 100) and DistantLight (>= 500)reject: No lighting; render will be black
Render modeRayTracedLighting for iteration; PathTracing only for hero shotsreject: PathTracing too slow for iteration; use RayTracedLighting
ACES tonemapcarb rtx.post.tonemap.op = 4; filmIso 200 default / 600 deep-aisle / 400 aerialsuggest: Enable ACES (op=4) for contrast
Final render>= 150 KB and mean_RGB > 30reject: Render is black or low-energy; check lighting
User pathsno /home/<user>/, hardcoded C:\path\to\..., or per-agent home paths; prefer %USERPROFILE%, env vars, or argparsereject: Hardcoded user path; use $ISAAC_SIM_DIR, $ISAAC_LAB_DIR, $WORKSPACE_DIR, or argparse
Network endpointsno bare IPs (192.168.x.x, 10.x.x.x) or non-localhost hostsreject: Hardcoded endpoint; parameterize via env var or config
Output dirconfigurable (env var, CLI, or function param)reject: Output dir hardcoded; accept as parameter or read $OUTPUT_DIR
VRAM headroomnvidia-smi headroom > 20% after settlewarn at >90% utilization; likely leak or scale issue
pkill -f "kit/kit" usedflag for kill+relaunch bugwarn: Verify zero kit processes before next launch
Sim duration>= 3 s of physicsreject: Sim ran < 3 s; physics has not settled

File structure validation (USD scenes)

ItemValidInvalidAction
$ISAAC_LAB_DIR/scripts/read-only referencewriting outputs thereredirect to $OUTPUT_DIR or $WORKSPACE_DIR/outputs/
get_assets_root_path() -> s3://...runtime OKbaked into delivered outputcache locally; reference via configurable path
Melting / Splat MDL-only shadersOK in raw formMDL-only at exportfilter out; MDL-only causes black render
MakeInstanceable for RLrequired (make_instanceable: true)absentreject
usdPreviewSurface on surfacesrequiredabsentreject; suggest adding UsdPreviewSurface
convex_decompose_meshfalse (with clean_sdf_dc)truerecommend false for stability
mpu=0.01OK for warehouse shell (13 m tiles)on a robotreject

Render validation (frame analysis)

MetricGoodBadAction
File size1–4 MB~82 KB82 KB = black, reject
Mean RGB80–160< 20reject: Too dark; add lights
Max RGB200–2500reject: No light in scene
Pixel variance> 15< 5flat = missing shadows; add accents
Color histogrammulti-modalsingle peakoverexposed or flat lighting; adjust intensity
Object visibility>= 3 robots or 50+ assets< 10 visiblesuggest: Scene too sparse; add set dressing
Shadow consistencyconsistent shadowsrandom black blobsreject: Shadow artifacts; check light cone bounds

Video validation

For any delivered MP4/GIF, extract and inspect at least start/middle/end frames. Reject or recut the presentation copy if the first frames show render warm-up, the subject is occluded, or the camera loses the task. Keep the complete source render and metrics when a shorter presentation cut is made.

RL training validation

IssueAction
AppLauncher not firstreject: AppLauncher must precede any isaaclab imports
Task __init__.py non-emptyreject: Task __init__.py must be empty; do not import configs
omni.isaac.lab importreject: Use isaaclab.*; omni.isaac.lab is deprecated
PhysX backend (when Newton applies)reject: Use Newton; it is the default on Kit 110
Missing PYTHONUNBUFFERED=1warn: Set PYTHONUNBUFFERED=1 to see logs in real time
No GPU memory loggingsuggest: Log torch.cuda.memory_allocated()/1e6 to W&B
Batch size exceeds VRAMsuggest: Reduce num_envs (try 2048)
Wrong checkpoint namereject: Must be model_XXXX.zip, not policy.pt
Single seedsuggest: Run seeds 42, 123, 456 for valid comparison

Asset & shell validation

InputCheckAction
docker run command-v mount for /workspace/outputreject: Output folder not mounted
Sub-agent spawnworkdir=$WORKSPACE_DIRreject: Sub-agent workdir hardcoded; use $WORKSPACE_DIR
Blender USD exportcorrect mpu, dual-shader (UsdPreviewSurface + MDL), correct export typereject if any missing
Scene complexityrenders within 10 settle stepsreject: Scene too complex; simplify assets
Ghost artifactscleanup of /dev/shm/carb-*reject: Use workspace_cleanup.py to clear /dev/shm/carb-*

Decision tree

graph TD
    A[Received Output] --> B{Has script?}
    B -->|No| C[Reject: "No script provided"]
    B -->|Yes| D{File size >1KB?}
    D -->|No| E[Reject: "Script empty or corrupted"]
    D -->|Yes| F{Python?}
    F -->|Yes| G{isaacsim.* imports?}
    G -->|No| H[Reject: "Use isaacsim.* not omni.isaac.core"]
    G -->|Yes| I{SimulationApp or --exec?}
    I -->|Neither| J[Reject: "Must use SimulationApp with window args OR isaac-sim.sh --exec"]
    I -->|SimulationApp| K{width and height set?}
    K -->|No| L[Reject: "SimulationApp requires explicit width and height"]
    K -->|Yes| M{Dome + Distant lights?}
    M -->|No| N[Reject: "Add DomeLight and DistantLight (min intensity 100 and 500)"]
    M -->|Yes| O{RayTracedLighting?}
    O -->|No| P[Reject: "Use RayTracedLighting for iteration"]
    O -->|Yes| Q{Render output exists?}
    Q -->|No| R[Reject: "No render output"]
    Q -->|Yes| S{>= 150 KB and mean_RGB > 30?}
    S -->|No| T[Reject: "Render is black, too dark, or corrupted"]
    S -->|Yes| U{Hardcoded user paths or bare IPs?}
    U -->|Yes| V[Reject: "Replace hardcoded user paths/IPs with env vars or args"]
    U -->|No| Y[VALID - deliver]

Training output

ItemAction
policy_only_XXXX.ptaccept
model_XXXX.zipaccept
log.csv or wandb URLaccept
results.json with episode dataaccept
No reward curve / metricsreject: Log episode/reward_mean and train/value_loss

Reply format

  • Pass: Valid: <one-line summary>
  • Fail: Invalid: <list of failed checks>
  • Suggest (only when otherwise valid): Could be improved: <tip>

Do not hedge ("I think", "maybe"). Do not deliver a black frame.

Input sources

  • isaac-sim-orchestrator, isaac-sim-rendering, other producer skills, and sub-agent outputs.
  • Invoked on Isaac Sim deliverables: "validate this Isaac Sim script", "check this Isaac Sim render", "review this sim output".

Automated validation

Run the checks above from the CLI with scripts/validate_sim.sh:

# Levels 1–2: static only
bash scripts/validate_sim.sh --level <1|2> <script.py> [--output-dir <dir>] [--timeout <seconds>]

# Level 3: EXECUTES the script — requires explicit opt-in
bash scripts/validate_sim.sh --level 3 --confirm-execute <script.py> [--output-dir <dir>] [--timeout <seconds>]
# or: CONFIRM_EXECUTE=1 bash scripts/validate_sim.sh --level 3 <script.py> ...

Feedback loop

Signals

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