Run GR00T Fine-Tuning

SkillProductivity

Lets your agent run full robot-policy fine-tuning workflows, from collecting successful episodes to training and evaluating a GR00T model.

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 Run GR00T Fine-Tuning skill

About this capability

Run and extend embodiment-aware GR00T N1.7 post-training workflows from successful robot-policy collection through semantic recording, LeRobot conversion, statistics, fine-tuning, open-loop validation, task-level closed-loop evaluation, and success-only recordings. Use for GR00T or VLA fine-tuning,

What this skill tells your AI

The instructions your AI receives, as published by nvidia-isaac/video_to_data in .codex/skills/groot-finetune/SKILL.md and read by ahel’s review.

Own the requested workflow through validated artifacts. Execute stages when the user asks for a run; do not stop after printing commands. Keep source-data success, pipeline validity, and fine-tuned task success as three separate results.

Resolve an embodiment contract

Resolve the contract from task registration, environment configuration, HDF5 data, converter, modality config, and the registered closed-loop adapter. Never infer it from a robot name alone.

Record these fields before launching expensive work:

contract ID
record task and inference task
motion/scene source
record observation terms
state layout, units, transforms, and dimension
absolute action layout, order, semantics, and dimension
camera term -> video modality mapping
modality config path and closed-loop adapter
source-success definition
task-success evaluator and thresholds
episode horizon and FPS
reset, warmup, curriculum, and randomization behavior
safe camera-free and rendered parallelism

Read the matching reference:

If no contract matches, stop before collection and follow the new-embodiment procedure. Never silently fall back to a floating-hand or Vega layout.

Keep runtimes explicit

StageRuntime
Checkpoint resolutionhost or IsaacLab container
Source rollout, record, and rerenderrobotic_grounding IsaacLab container
HDF5 to LeRobot conversionrobotic_grounding container
Statistics, training, open-loop evaluationexternal Isaac-GR00T Python 3.10 environment
GR00T serverexternal Isaac-GR00T environment
Closed-loop clientIsaacLab container over host-network ZMQ

Before using a container, inspect its mounts and prove it contains the current worktree. Do not reuse a similarly named container mounted from another checkout. Keep long-running server and simulator processes monitored and clean them up on success or failure.

Follow the gated workflow

1. Preflight and plan

Record the branch, commit, worktree status, checkpoint source and SHA-256, motion source, seeds, GPU, disk, container/image, external GR00T checkout, and resolved contract. Use one unique output root and preserve commands and metrics in a run report.

Install or verify pyzmq and msgpack-numpy in the IsaacLab interpreter. Verify statistics and training dependencies in the external GR00T environment.

Use the generic planner rather than estimating collection size or optimizer steps manually:

python -m groot_finetune.tools.plan_groot_run \
  --target-successes 100 \
  --measured-success-rate 0.45 \
  --collection-safety-factor 1.125 \
  --episodes 100 \
  --frames-per-episode 699 \
  --action-horizon 16 \
  --epochs 5 \
  --global-batch-size 32

Supply camera capacity only when it has been measured for the active renderer. Treat camera-free collection and rendered evaluation as different capacity classes.

2. Collect and select timeout-eligible source episodes

Choose the source route declared by the contract:

  • Native source rollout: run the registered policy in its dynamics environment.
  • Native semantic rerender: use rerender_demo_visuals.py.
  • External rollout: validate its manifest and use replay_record.py.

Run the planned number of camera-free environments in one parallel wave when the simulator supports it. Do not replace a requested large wave with repeated small batches without reporting the reason. If a measured eligibility rate is unavailable, run a small pilot, report its denominator, then plan the full wave.

Source eligibility is distinct from closed-loop task success. For the joint-rollout route, an episode is eligible only when it reaches its timeout. Select deterministically with:

python -m groot_finetune.tools.select_successful_episodes \
  --input <EXPORT_DIR_1> \
  --input <EXPORT_DIR_2> \
  --output <OUTPUT_ROOT>/selected \
  --target 100 \
  --expected-frames <CONTRACT_HORIZON>

Fail if successful inputs are insufficient, any selected episode has inconsistent time-series lengths, or the success marker is false. Preserve source paths and counts in the selection manifest.

3. Record or rerender semantic demonstrations

Write the semantic HDF5 contract:

data/demo_i/obs/<semantic_term>
data/demo_i/actions

Do not substitute an unrelated flat-policy recording format. Replay only selected successful episodes. Enable the contract's training visual randomization unless the user explicitly requests a diagnostic no-randomization run.

Require:

  • exact requested demo count;
  • exact contract horizon for actions, state terms, and every camera;
  • finite numeric arrays and expected action dimension;
  • RGB (T,H,W,3) uint8;
  • source/replay state and action agreement within the route's tolerance;
  • nonblank, correctly mounted sample frames from every camera.

4. Convert and audit LeRobot data

Run the converter from robotic_grounding/:

python -m groot_finetune.convert_to_gr00t \
  --input <RECORDING>/data.h5 \
  --output <OUTPUT_ROOT>/gr00t_dataset \
  --contract <EMBODIMENT_CONTRACT> \
  --task-profile <TASK_PROFILE>

The converter exports exactly the cameras declared by the embodiment contract. Verify that state/action slice order, camera keys, transforms, and dimensions match the config and closed-loop adapter.

Audit the complete artifact chain:

python -m groot_finetune.tools.audit_groot_run \
  --root <OUTPUT_ROOT> \
  --episodes <N> \
  --frames <CONTRACT_HORIZON> \
  --contract <EMBODIMENT_CONTRACT> \
  --task-profile <TASK_PROFILE> \
  --selected-export selected \
  --hdf5 recording/data.h5 \
  --dataset gr00t_dataset

The audit must confirm exact HDF5, Parquet, and per-video frame equality. Do not accept merely nonzero or approximately matching lengths.

5. Generate statistics and fine-tune

Use the same modality config for statistics, training, and open-loop evaluation. Compute --max-steps from usable samples, action horizon, epochs, and global batch size with the planner. Do not equate raw video frames with usable action-window samples.

Confirm meta/stats.json before training and the requested checkpoint afterward. Record consumed samples, optimizer steps, losses, runtime, model shards, processor, statistics, and trainer state.

6. Gate on open-loop evaluation

Evaluate every action modality key in the order declared by meta/modality.json. Require finite MSE/MAE and save the plot. Treat this as a data/model plumbing gate, not task-success evidence. Diagnose a failed open-loop gate before spending time on closed-loop evaluation.

7. Evaluate task success in closed loop

Use the inference task, reset behavior, visual mode, and embodiment contract together with the task profile's evaluator. A free-running policy must not inherit source trajectory-deviation terminations.

Require a one-episode smoke before a large evaluation:

  • first post-warmup camera observations are nonblack;
  • reset frame, finger state, curriculum, and randomization match the contract;
  • only intended safety/timeout terminations are active;
  • the episode reaches its expected horizon;
  • structured JSON reports task metrics independently of termination.

Use the lifecycle wrapper for full evaluation:

bash robotic_grounding/groot_finetune/closed_loop/run_eval.sh \
  --gr00t-dir <ISAAC_GR00T_DIR> \
  --model <CHECKPOINT> \
  --container <ISAAC_CONTAINER> \
  --client-workdir <ROBOTIC_GROUNDING_PATH_IN_CONTAINER> \
  --task <INFERENCE_TASK> \
  --contract <EMBODIMENT_CONTRACT_IN_CONTAINER> \
  --task-profile <TASK_PROFILE_IN_CONTAINER> \
  --motion-file <MOTION_DIR_IN_CONTAINER> \
  --output-json <EVAL_JSON_IN_CONTAINER> \
  --episodes 100 \
  --num-envs <RENDERER_SAFE_ENVS> \
  --episode-horizon <CONTRACT_HORIZON>

Pass additional client arguments through --client-extra-arg. Timeout survival is source eligibility, never closed-loop manipulation success.

8. Retain successful recordings

Record complete episodes, decide success using the same task evaluator, discard failed frames, and retain only requested cameras and successful rollouts. For supported lift-and-hold tasks use --success-video-dir, --success-video-camera, and --max-success-videos with the lifecycle wrapper.

Probe every retained MP4 for codec, resolution, FPS, duration, and exact contract frame count. Visually inspect the beginning, interaction, success moment, and end.

9. Report and clean up

Report:

  • source input/success/failure/selected counts and criterion;
  • exact frame counts through every data representation;
  • dataset keys, dimensions, views, and statistics;
  • checkpoint path and training metrics;
  • open-loop MSE/MAE;
  • closed-loop denominator, task successes, rate, partial-progress distribution, and termination counts;
  • successful recording paths;
  • any requested parallelism that was reduced and the measured capacity error.

Stop servers and isolated containers. Preserve intentional run artifacts and do not delete unrelated user files.

Validation

Run repository contract tests for every affected embodiment, then:

python "${CODEX_HOME:-$HOME/.codex}/skills/.system/skill-creator/scripts/quick_validate.py" \
  .codex/skills/groot-finetune
bash -n robotic_grounding/groot_finetune/closed_loop/run_eval.sh
PYTHONPYCACHEPREFIX=/tmp/groot-finetune-pycache \
  python -m py_compile robotic_grounding/groot_finetune/tools/*.py
git diff --check

Completion requires audited data, statistics, checkpoint, open-loop result, task-level closed-loop result, viewable successful recordings when requested, and clean process shutdown.

Signals

GitHub stars
649
Forks
62
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
groot-finetune
Source
github.com/nvidia-isaac/video_to_data