Skip to content

Conversation

@clayton-littlejohn
Copy link

@clayton-littlejohn clayton-littlejohn commented Jan 28, 2026

Enhanced Offline Training Support for Isaac Lab

See GitHub Issue: #4478 | README.md

Description

This PR implements an enhanced comprehensive offline training system that enables training Isaac Lab environments, tutorials, and demos without internet connectivity. The system automatically redirects asset paths from Nucleus/S3 servers to local storage while maintaining the same directory structure, requiring zero configuration changes to existing environments.

Problem

Current Problem:
Training Isaac Lab environments requires constant internet connectivity to load assets from Nucleus/S3 servers. This creates several critical issues:

  1. Airgapped Environments: Impossible to train in secure/classified facilities that prohibit internet access
  2. Network Reliability: Training fails or becomes extremely slow on unstable networks
  3. Reproducibility: Repeated downloads slow iteration and depend on external server availability
  4. Development Workflow: Researchers waste time waiting for assets during rapid prototyping
  5. Users can already pre-download the exact assets they intend to use: True, but they are fixed in that predetermined environment, and need to manually configure those assets and paths (creates a messy development environment)
  6. DGX Spark is Rooted: I should be able to take my Spark anywhere regardless of internet connectivity and live out Isaac Lab and Isaac Sim to it's fullest and adapt on the go

Solution

One-time asset download with automatic path resolution for seamless offline training. Simply add --offline flag to any training command.

Key Features:

  • ✅ Zero code or config changes
  • ✅ Works with all robots and environments automatically
  • ✅ Single flag: --offline for various training environments, tutorials, and demos
  • ✅ Fallback flag: --offline-permissive fallback to Nucleus for asset not found in offline_assets
  • ✅ Easy offline_asset plug and play mirroring Nucleus structure
  • ✅ Code and configuration reduction and offline simplification
  • ✅ Quickly identify required missing assets for offline demos

Type of change

  • New feature (non-breaking change which adds functionality)
  • Documentation update (See README.md in scripts/offline_setup)

Changes Made

New Files

Core System:

  • source/isaaclab/isaaclab/utils/asset_resolver.py - Path resolution engine with singleton pattern, monkey patching, and regex-based URL matching

Asset Management:

  • scripts/offline_setup/download_assets.py - Asset downloader with size calculation and progress tracking
  • scripts/offline_setup/README.md - Complete setup and usage guide

Modified Files

Training Scripts (All RL Libraries):

  • app_launcher.py AppLauncher. (Propagates globally across RL training scripts and other tutorials/demos)

Core Integration:

  • source/isaaclab/isaaclab/utils/__init__.py - Added wildcard import for offline resolver

How It Works

Two-Layer Resolution Strategy

Layer 1 - Monkey Patching (90% coverage):
Patches Isaac Lab spawn configs (UsdFileCfg, GroundPlaneCfg, PreviewSurfaceCfg) to automatically resolve paths when instantiated.

Layer 2 - Config Patching (10% coverage):
Explicitly patches already-loaded configs (robot, terrain, visualizers) to catch pre-loaded paths.

Path Resolution Pipeline

Input:  "https://nucleus.../Assets/Isaac/5.1/Isaac/IsaacLab/Robots/Go2/go2.usd"
↓ Regex pattern matching
Extract: "Robots/Go2/go2.usd"
↓ Build local path
Result: "/path/to/offline_assets/Robots/Go2/go2.usd"
↓ Check existence
Return: Local path if exists, else Nucleus URL (fallback)

Handles versioned URLs (/Assets/Isaac/5.1/...), non-versioned URLs, and environment variables.

Usage

See README.md for additional documentation

Quick Start

1. Download essential assets (one-time, all ~60 GB)

Assets download to the ~/IsaacLab/offline_assets directory: cd ~/IsaacLab

./isaaclab.sh -p scripts/offline_setup/download_assets.py \
    --categories all

Alternative Note: Category fields can be specified separately

./isaaclab.sh -p scripts/offline_setup/download_assets.py \
    --categories Robots --subset Unitree

Successful Downloads

======================================================================
📊 Downloaded Assets Summary
======================================================================
Location: ~/IsaacLab/offline_assets

✓ Environments           34,437 files       17.0 GB
✓ IsaacLab                4,197 files        9.3 GB
✓ Materials               1,918 files      537.0 MB
✓ People                  3,085 files        9.4 GB
✓ Props                   2,507 files        4.2 GB
✓ Robots                  4,687 files        5.3 GB
✓ Samples                 6,601 files       10.4 GB
✓ Sensors                   772 files      256.7 MB
======================================================================
TOTAL                  58,204 files       56.3 GB
======================================================================

✅ Complete! Use --offline flag with Isaac Lab commands.

Offline mirror: ~/IsaacLab/offline_assets

2. Train completely offline with any robot via the --offline flag (also works with /play)

Supported for: rl_games, rsl_rl, sb3, skrl, and sim2transfer

./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py \
    --task Isaac-Velocity-Rough-Unitree-Go2-v0 \
    --num_envs 64 \
    --max_iterations 10 \
    --offline

./isaaclab.sh -p scripts/reinforcement_learning/skrl/train.py \
    --task Isaac-Velocity-Flat-H1-v0 \
    --num_envs 64 \
    --max_iterations 10 \
    --offline

./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/play.py \
    --task Isaac-Velocity-Flat-Unitree-Go2-v0 \
    --num_envs 128 \
    --checkpoint logs/rsl_rl/<robot>_flat/<timestamp>/model_<num>.pt \
    --video \
    --video_length 1000 \
    --offline

Run various demos and tutorials with --offline flag

./isaaclab.sh -p scripts/demos/quadrupeds.py --offline

./isaaclab.sh -p scripts/demos/arms.py --offline

./isaaclab.sh -p scripts/tutorials/01_assets/run_articulation.py --offline

Strict mode (default) - fails immediately if asset not found locally

./isaaclab.sh -p train.py --task Go2 --offline

Permissive mode - warns and falls back to Nucleus if asset not found

./isaaclab.sh -p train.py --task Go2 --offline-permissive

Environment variables work too

OFFLINE=1 ./isaaclab.sh -p train.py --task Go2
OFFLINE_PERMISSIVE=1 ./isaaclab.sh -p train.py --task Go2

Missing Assets Awareness

======================================================================
[OfflineAssetResolver] ✗ ASSET NOT FOUND (offline mode)
======================================================================
Missing:  IsaacLab/Robots/Unitree/Go2/go2.usd
Expected: ~/IsaacLab/offline_assets/IsaacLab/Robots/Unitree/Go2/go2.usd

To download this asset, run:
  ./isaaclab.sh -p scripts/offline_setup/download_assets.py --categories IsaacLab/Robots

Note: For offline training, assets that cannot be found in offline_assets will attempted to be fetched from the Nucleus Server when using the --offline-permissive flag.

Before vs After

Before (Hardcoded approach):

# Separate config file per robot
UNITREE_GO2_CFG = ArticulationCfg(
    spawn=sim_utils.UsdFileCfg(
        usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/Unitree/Go2/go2.usd",  # Go2 only

# Separate gym registration
gym.register("Isaac-Go2-Local-v0", ...)

# Other hardcoded paths or boilerplate overwrites per robots and assets...

After (Generic system):

# Same config works for all robots
# Just add --offline flag
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py \
    --task Isaac-Velocity-Flat-Unitree-Go2-v0 \
    --num_envs 64 \
    --offline

Testing

Manual Testing Completed

Asset Download

  • Downloaded all categories (~56.3 GB, 58,204+ files)
  • Verified size calculations and progress tracking
  • Tested partial downloads and resume capability

Offline Training - All RL Libraries

  • RSL-RL: Train + Play tested
  • Stable-Baselines3: Train + Play tested
  • SKRL: Train + Play tested
  • RL Games: Train + Play tested

Various Demos and Tutorials:

# -----------------------------------------------------------------------------
# Demos
# -----------------------------------------------------------------------------

# H1 Locomotion Demo
./isaaclab.sh -p scripts/demos/h1_locomotion.py --offline

# Arms Demo (if available)
./isaaclab.sh -p scripts/demos/arms.py --offline

# Quadruped Demo
./isaaclab.sh -p scripts/demos/quadrupeds.py --offline

# -----------------------------------------------------------------------------
# Tutorials - Simulation Basics
# -----------------------------------------------------------------------------

# Spawn primitives
./isaaclab.sh -p scripts/tutorials/00_sim/spawn_prims.py --offline

# -----------------------------------------------------------------------------
# Tutorials - Scene/Assets
# -----------------------------------------------------------------------------

# Articulations tutorial
./isaaclab.sh -p scripts/tutorials/01_assets/run_articulation.py --offline

# Rigid object tutorial
./isaaclab.sh -p scripts/tutorials/01_assets/run_rigid_object.py --offline

# Deformable object tutorial
./isaaclab.sh -p scripts/tutorials/01_assets/run_deformable_object.py --offline

# -----------------------------------------------------------------------------
# Tutorials - Environments
# -----------------------------------------------------------------------------

# Create cartpole environment
./isaaclab.sh -p scripts/tutorials/03_envs/create_cartpole_base_env.py \
    --num_envs 16 \
    --offline

# Create quadruped environment
    --num_envs 16 \
    --offline

# -----------------------------------------------------------------------------
# Manipulation Tasks
# -----------------------------------------------------------------------------

# Franka Reach
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py \
    --task Isaac-Reach-Franka-v0 \
    --num_envs 64 \
    --max_iterations 10 \
    --offline

# Franka Lift
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py \
    --task Isaac-Lift-Cube-Franka-v0 \
    --num_envs 64 \
    --max_iterations 10 \
    --offline

Multi-Robot Testing

  • Unitree Go2: ✓ Works offline & online
  • Unitree H1: ✓ Works offline & online
  • ANYmal-D: ✓ Works offline & online

Complete Offline Verification

  • Disconnected from internet (airplane mode)
  • Training runs successfully at 1900+ steps/s
  • All assets load from local storage (offline_assets)
  • Zero Nucleus connection attempts (unless --offline-permissive specified)

Test Output

[OfflineAssetResolver] Offline mode ENABLED
[OfflineAssetResolver] ✓ Using offline: Robots/Unitree/Go2/go2.usd
[OfflineAssetResolver] ✓ Using offline: Environments/Grid/default_environment.usd
[OfflineAssetResolver] ✓ Using offline: Props/UIElements/arrow_x.usd

Screenshots

Asset Download Progress

|---------------------------------------------------------------------------------------------|
| Driver Version: 580.95.05     | Graphics API: Vulkan
|=============================================================================================|
| GPU | Name                             | Active | LDA | GPU Memory | Vendor-ID | LUID       |
|     |                                  |        |     |            | Device-ID | UUID       |
|     |                                  |        |     |            | Bus-ID    |            |
|---------------------------------------------------------------------------------------------|
| 0   | NVIDIA Tegra NVIDIA GB10         | Yes: 0 |     | 91927   MB | 10de      | 0          |
|     |                                  |        |     |            | 2e12      | 89b118a2.. |
|     |                                  |        |     |            | 1         |            |
|=============================================================================================|
| OS: 24.04.3 LTS (Noble Numbat) ubuntu, Version: 24.04.3, Kernel: 6.14.0-1013-nvidia
| XServer Vendor: The X.Org Foundation, XServer Version: 12101011 (1.21.1.11)
| Processor: Cortex-A725
| Cores: 20 | Logical Cores: 20
|---------------------------------------------------------------------------------------------|
| Total Memory (MB): 122570 | Free Memory: 104831
| Total Page/Swap (MB): 16383 | Free Page/Swap: 15660
|---------------------------------------------------------------------------------------------|

======================================================================
🚀 Isaac Lab Offline Asset Downloader
======================================================================
Nucleus: https://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/Isaac/5.1/Isaac
Local:   /home/clayton_littlejohn/IsaacLab/offline_assets
======================================================================

📊 Calculating size...
   IsaacLab/Robots: 364 files (557.8 MB)

📦 Total: 364 files (557.8 MB)

Proceed? [y/N]: y

🔽 Downloading...

======================================================================
📦 IsaacLab/Robots: Isaac Lab assets (Robots, ActuatorNets, Controllers, Policies, etc.)
======================================================================
Source: https://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/Isaac/5.1/Isaac/IsaacLab/Robots
Target: /home/clayton_littlejohn/IsaacLab/offline_assets/IsaacLab/Robots
📊 Analyzing...
   Files: 364 | Size: 557.8 MB
Downloading ur10_instanceable.usd: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████| 364/364 [00:00<00:00, 8211.25file/s]
✓ Completed IsaacLab/Robots

======================================================================
📊 Downloaded Assets Summary
======================================================================
Location: /home/clayton_littlejohn/IsaacLab/offline_assets

✓ Environments           34,437 files       17.0 GB
✓ IsaacLab                4,197 files        9.3 GB
✓ Materials               1,918 files      537.0 MB
✓ People                  3,085 files        9.4 GB
✓ Props                   2,507 files        4.2 GB
✓ Robots                  4,687 files        5.3 GB
✓ Samples                 6,601 files       10.4 GB
✓ Sensors                   772 files      256.7 MB
======================================================================
TOTAL                  58,204 files       56.3 GB
======================================================================

✅ Complete! Use --offline flag with Isaac Lab commands.

Training Output

[8.202s] Simulation App Starting
2026-01-28T04:21:40Z [8,528ms] [Warning] [omni.fabric.plugin] Warning: attribute viewportHandle not found for bucket id 9

[8.685s] app ready
[10.858s] Simulation App Startup Complete
[INFO]: Parsing configuration from: isaaclab_tasks.manager_based.locomotion.velocity.config.go2.flat_env_cfg:UnitreeGo2FlatEnvCfg
[INFO]: Parsing configuration from: isaaclab_tasks.manager_based.locomotion.velocity.config.go2.agents.rsl_rl_ppo_cfg:UnitreeGo2FlatPPORunnerCfg
[OfflineAssetResolver] Offline mode ENABLED
  All assets will be loaded from: /home/clayton_littlejohn/IsaacLab/offline_assets
[OfflineAssetResolver] Installed UsdFileCfg path hook
[OfflineAssetResolver] Installed GroundPlaneCfg path hook
[OfflineAssetResolver] Installed PreviewSurfaceCfg path hook
[OfflineAssetResolver] Offline mode fully configured
[OfflineAssetResolver] Patching configuration...
[OfflineAssetResolver] ✓ Using offline: Robots/Unitree/Go2/go2.usd
[OfflineAssetResolver]   ✓ Patched robot USD path
[OfflineAssetResolver] ✓ Using offline: Materials/Textures/Skies/PolyHaven/kloofendal_43d_clear_puresky_4k.hdr
[OfflineAssetResolver]   ✓ Patched sky light texture
[OfflineAssetResolver] ✓ Using offline: Props/UIElements/arrow_x.usd
[OfflineAssetResolver]   ✓ Patched arrow in current_vel_visualizer_cfg
[OfflineAssetResolver] ✓ Using offline: Props/UIElements/arrow_x.usd
[OfflineAssetResolver]   ✓ Patched arrow in goal_vel_visualizer_cfg
[OfflineAssetResolver] Patched 4 asset paths
[INFO] Logging experiment in directory: /home/clayton_littlejohn/IsaacLab/logs/rsl_rl/unitree_go2_flat
Exact experiment name requested from command line: 2026-01-27_23-21-44
/home/clayton_littlejohn/IsaacLab/_isaac_sim/kit/python/lib/python3.11/site-packages/torch/cuda/__init__.py:283: UserWarning: 
    Found GPU0 NVIDIA GB10 which is of cuda capability 12.1.
    Minimum and Maximum cuda capability supported by this version of PyTorch is
    (8.0) - (12.0)

======================================================================================
[INFO][IsaacLab]: Logging to file: /tmp/isaaclab/logs/isaaclab_2026-01-27_23-21-44.log
======================================================================================

[12.493s] [ext: omni.physx.fabric-107.3.26] startup
23:21:44 [simulation_context.py] WARNING: The `enable_external_forces_every_iteration` parameter in the PhysxCfg is set to False. If you are experiencing noisy velocities, consider enabling this flag. You may need to slightly increase the number of velocity iterations (setting it to 1 or 2 rather than 0), together with this flag, to improve the accuracy of velocity updates.
[INFO]: Base environment:
    Environment device    : cuda:0
    Environment seed      : 42
    Physics step-size     : 0.005
    Rendering step-size   : 0.02
    Environment step-size : 0.02
23:21:44 [terrain_importer.py] WARNING: Visual material specified for ground plane but no diffuse color found. Using default color: (0.0, 0.0, 0.0)
[OfflineAssetResolver] ✓ Using offline: Environments/Grid/default_environment.usd
[OfflineAssetResolver] ✓ Resolved ground plane: default_environment.usd
...

Breaking Changes

None. This is a purely additive feature:

  • ✅ Existing training commands work unchanged
  • ✅ No modifications to environment configs required
  • ✅ Backward compatible with all existing setups
  • ✅ Offline mode is opt-in via --offline flag

Dependencies

Required:

  • tqdm - For download progress bars (add to requirements: pip install tqdm)

No new dependencies for core functionality - Uses existing Isaac Lab infrastructure.

Documentation

  • ✅ Complete README in scripts/offline_setup/README.md
  • ✅ Usage examples for RL libraries
  • ✅ Inline code documentation with docstrings

Checklist

  • I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings outside of local info
  • I have added tests that prove my fix is effective or that my feature works (manual testing completed)
  • I have updated the changelog and the corresponding version in the extension's config/extension.toml file
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

Additional Notes

Performance Impact

  • Initialization overhead: faster offline training runs
  • Per-asset resolution: ~0.6ms per asset
  • Memory overhead: ~11 KB
  • Overall: Negligible impact on training performance

Future Enhancements

  • Automatic asset downloading and caching (download on first use or when dependent, ready for later)
  • Asset integrity verification (checksums)
  • Differential downloads (only changed files)

Tested On

  • Isaac Sim: 5.1.0
  • Isaac Lab: Current main branch (sha f3061a464c2cded093db021233fadea63663631c)
  • OS: Ubuntu 24.04.03
  • Python: 3.11
  • CUDA: 12.1

Ready for review! This implementation enables airgapped training, improves reliability, and reduces code duplication and localized complexity while maintaining full backward compatibility.

@github-actions github-actions bot added documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team labels Jan 28, 2026
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 28, 2026

Greptile Overview

Greptile Summary

This PR implements comprehensive offline training support by adding an asset resolution system that transparently redirects Nucleus/S3 URLs to local storage. The implementation uses a two-layer strategy: monkey patching Isaac Lab spawn configs (UsdFileCfg, GroundPlaneCfg, PreviewSurfaceCfg) for automatic resolution, and explicit config patching for pre-loaded paths.

Key Changes:

  • Added asset_resolver.py with singleton pattern and regex-based URL path extraction supporting versioned Nucleus URLs
  • Created download_assets.py script for recursive asset downloading from Nucleus with progress tracking
  • Integrated --offline flag across all RL training scripts (rsl_rl, sb3, skrl, rl_games) and sim2sim transfer
  • Added comprehensive documentation in scripts/offline_setup/README.md
  • Updated .gitignore to exclude offline_assets/ directory

Implementation Quality:
The feature is well-designed with automatic fallback to Nucleus when local assets are missing. The integration is minimal (3 lines per training script) and maintains backward compatibility. The asset downloader handles large directories efficiently with tqdm progress bars.

Issues Found:

  • Python 3.10+ union type syntax (str | None) used instead of Optional[str] may cause compatibility issues if Python 3.9 is supported
  • Import pattern uses direct module path (from isaaclab.utils.asset_resolver import) rather than public API (from isaaclab.utils import)
  • Excessive stdout printing on every asset resolution could clutter output with many assets
  • Typo in README: "Plocies" should be "Policies"

Testing:
Author reports manual testing across multiple robots (Go2, H1, ANYmal-D) and all RL frameworks with successful offline training at 1900+ steps/s.

Confidence Score: 4/5

  • This PR is safe to merge after addressing the Python version compatibility issues in type annotations
  • The implementation is well-structured with good separation of concerns, comprehensive testing reported by the author, and maintains backward compatibility. The singleton pattern and monkey patching are appropriate for this use case. However, the Python 3.10+ type syntax could break on older Python versions, and the verbose logging may need refinement. The fallback mechanism ensures graceful degradation if local assets are missing.
  • source/isaaclab/isaaclab/utils/asset_resolver.py needs type annotation fixes for Python version compatibility

Important Files Changed

Filename Overview
source/isaaclab/isaaclab/utils/asset_resolver.py Implements offline asset resolution using monkey patching and singleton pattern; found type annotation compatibility issue
scripts/offline_setup/download_assets.py Asset download script with recursive directory traversal; good error handling and progress tracking
scripts/reinforcement_learning/rsl_rl/train.py Added offline mode setup before config loading; import uses direct module path instead of public API
scripts/offline_setup/README.md Documentation for offline training setup; contains a typo in directory structure diagram

Sequence Diagram

sequenceDiagram
    participant User
    participant TrainScript as Training Script
    participant Resolver as OfflineAssetResolver
    participant ConfigHooks as Monkey Patched Configs
    participant FileSystem as Local Filesystem
    participant Nucleus as Nucleus Server

    Note over User,Nucleus: One-time Setup Phase
    User->>TrainScript: Run download_assets.py
    TrainScript->>Nucleus: Request asset list
    Nucleus-->>TrainScript: Return file structure
    TrainScript->>Nucleus: Download assets
    Nucleus-->>FileSystem: Write to offline_assets/
    
    Note over User,Nucleus: Offline Training Phase
    User->>TrainScript: Run train.py --offline
    TrainScript->>Resolver: setup_offline_mode()
    Resolver->>Resolver: enable_offline_mode()
    Resolver->>ConfigHooks: install_path_hooks()
    Note over ConfigHooks: Monkey patch UsdFileCfg,<br/>GroundPlaneCfg, PreviewSurfaceCfg
    
    TrainScript->>Resolver: patch_config_for_offline_mode(env_cfg)
    Resolver->>Resolver: Patch robot, terrain, sky_light, visualizers
    
    Note over TrainScript,FileSystem: Asset Loading
    TrainScript->>ConfigHooks: Instantiate UsdFileCfg(usd_path="nucleus://...")
    ConfigHooks->>Resolver: resolve_asset_path(nucleus_url)
    Resolver->>Resolver: _extract_relative_path()
    Note over Resolver: Extract "Robots/Go2/go2.usd"<br/>from versioned Nucleus URL
    
    Resolver->>FileSystem: Check if offline_assets/Robots/Go2/go2.usd exists
    
    alt Asset exists locally
        FileSystem-->>Resolver: File found
        Resolver-->>ConfigHooks: Return local path
        ConfigHooks-->>TrainScript: Use local asset
    else Asset not found
        FileSystem-->>Resolver: File not found
        Resolver-->>ConfigHooks: Return original Nucleus URL
        ConfigHooks->>Nucleus: Fallback to Nucleus server
        Nucleus-->>TrainScript: Stream asset
    end
    
    TrainScript->>TrainScript: Train environment
Loading

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 files reviewed, 5 comments

Edit Code Review Agent Settings | Greptile

Comment on lines 125 to 129
print(f"[OfflineAssetResolver] ✓ Using offline: {path_to_convert}")
return offline_path
else:
print(f"[OfflineAssetResolver] ⚠️ Not found locally: {path_to_convert}")
print("[OfflineAssetResolver] Falling back to Nucleus")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Printing to stdout on every asset resolution could create excessive output when processing environments with many assets. Consider using a logging level or adding a verbose flag.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@clayton-littlejohn
Copy link
Author

4 files reviewed, 5 comments

Edit Code Review Agent Settings | Greptile

UPDATE: Addressed the following issues found:

  • Python 3.10+ union type syntax (str | None) used instead of Optional[str] may cause compatibility issues if Python 3.9 is supported
  • Import pattern uses direct module path (from isaaclab.utils.asset_resolver import) rather than public API (from isaaclab.utils import)
  • Typo in README: "Plocies" should be "Policies" (embarrassing)

@clayton-littlejohn clayton-littlejohn changed the title Offline mode Enhanced Offline mode Jan 28, 2026
@clayton-littlejohn clayton-littlejohn changed the title Enhanced Offline mode Enhanced Offline Mode Jan 28, 2026
Copy link
Contributor

@Mayankm96 Mayankm96 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the PR!

Still have to review in detail but at a high-level, I feel the concept of offline assets should be a global thing that lives through the AppLauncher. Right now, it only gets propogated inside the RL training scripts and not other tutorials/demos, which might be hindering.

@Mayankm96 Mayankm96 force-pushed the main branch 2 times, most recently from 2ef7fc8 to f3061a4 Compare January 28, 2026 16:16
@clayton-littlejohn
Copy link
Author

clayton-littlejohn commented Jan 28, 2026

Thank you for the PR!

Still have to review in detail but at a high-level, I feel the concept of offline assets should be a global thing that lives through the AppLauncher. Right now, it only gets propogated inside the RL training scripts and not other tutorials/demos, which might be hindering.

You're so right! Changes have been made and drastically reduced repetitive code. Now works alongside various tutorials and demos. ✔️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants