Setup#
This guide installs everything you need to run the AIF Pipeline tools:
Kit Installation - NVIDIA Omniverse Kit application (USD Composer)
AIF Pipeline CLI - command-line tool for converting, optimizing, and validating USD assets
Asset Processor - browser-based front-end for building Scene Optimizer presets
After completing this page, continue to Quickstart to configure Kit paths and run your first pipeline.
Prerequisites#
Windows 10/11 or Linux (Ubuntu 20.04+)
16 GB+ RAM recommended
NVIDIA RTX GPU
Git - Required to clone the repository (git-scm.com)
Python 3.10 - 3.12 -
uvcan download this automatically during setup, so manual installation is optionalPowerShell execution policy (Windows only) - The setup script requires permission to run
.ps1scripts. If you see anUnauthorizedAccesserror, open PowerShell and run:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
Kit Installation#
Choose one of the following methods to install USD Composer.
Option 1: Kit App Template (Quickstart)#
Recommended for most users - Uses the official NVIDIA kit-app-template with automated setup.
Follow the Kit App Template Quickstart.
Note
If you encounter permission errors, run your terminal with elevated privileges (Administrator on Windows, sudo on Linux).
Warning
Some corporate/enterprise environments have network restrictions that can prevent this method from working. If you encounter issues, use Option 2 below.
Tip
If you used Option 1, skip ahead to AIF Pipeline CLI Installation. The remaining steps in this section apply only to Option 2.
Option 2: Manual Setup Through NGC (Air-Gapped/Offline)#
Use this method for air-gapped or offline environments.
Step 1: Download Kit Components
Navigate to the NGC Kit SDK Air Gap page for your platform:
Windows: Kit SDK Air Gap - Windows (PB 25h2)
Download Kit SDK Air Gap: Click File Browser > Actions (triple dot) > Download File
Download Kit Extensions Registry: Navigate to Kit Extensions Registry (PB 25h2), then File Browser > Actions > Download File
Note
This is a large download (several GB) and will take time.
Step 2: Extract Components
tar -xf D:/downloads/kit-sdk-airgap.zip -C D:/build/ngc/109.0.3
tar -xf D:/downloads/kit-extensions-registry.zip -C D:/build/ngc/109.0.3_extsregistry
Tip
tar is built into Windows 10+ and is significantly faster than Expand-Archive for large archives. If tar is not available, you can use Expand-Archive instead:
Expand-Archive D:/downloads/kit-sdk-airgap.zip -DestinationPath D:/build/ngc/109.0.3
unzip kit-sdk-airgap.zip -d ~/build/ngc/109.0.3
unzip kit-extensions-registry.zip -d ~/build/ngc/109.0.3_extsregistry
Step 3: Create USD Composer Project
Navigate to the extracted Kit SDK and run the new project script:
cd D:/build/ngc/109.0.3
.\new_project.bat
cd ~/build/ngc/109.0.3
./new_project.sh
Follow the prompts:
Accept governing terms
Path to new repository: Enter path for USD Composer application (example:
D:/build/ngc/USD_Composer_109.0.3)
Step 4: Configure USD Composer Template
Navigate to the new USD Composer repository and create the application template:
cd D:/build/ngc/USD_Composer_109.0.3
.\repo.bat template new
cd ~/build/ngc/USD_Composer_109.0.3
./repo.sh template new
Follow the prompts:
Accept governing terms
Choose Application
Choose USD Composer
Press Enter six times (accept all defaults)
Add application layers? > Choose No
Note
Keeping defaults simplifies usage with the AIF Pipeline Samples code.
Step 5: Configure Extensions Registry
Before building, add the local extensions registry to the project configuration. Open repo.toml in your USD Composer project directory, find the [repo_precache_exts] section, and add the registries array (adjust paths to match where you extracted the registry):
[repo_precache_exts]
registries = [
{ name = "ngc_registry", url = "D:/build/ngc/109.0.3_extsregistry" },
]
# Apps to run and precache
apps = ["${root}/source/apps/my_company.my_usd_composer.kit"]
# Generate a simple Kit file to pull some build-time extensions
generated_app_path = "${root}/_build/exts.deps.generated.kit"
[repo_precache_exts]
registries = [
{ name = "ngc_registry", url = "/home/<your-username>/build/ngc/109.0.3_extsregistry" },
]
# Apps to run and precache
apps = ["${root}/source/apps/my_company.my_usd_composer.kit"]
# Generate a simple Kit file to pull some build-time extensions
generated_app_path = "${root}/_build/exts.deps.generated.kit"
Note
Replace /home/<your-username>/ with your actual home directory path.
Save and close the file.
Step 6: Build USD Composer
.\repo.bat build
./repo.sh build
Wait for the build to complete (can take several minutes on the first build).
Step 7: Launch USD Composer
.\repo.bat launch
./repo.sh launch
On first launch:
Accept firewall notification (if prompted)
RTX Loading can take longer on the first run
USD Composer interface should appear
AIF Pipeline CLI Installation#
Naming note
AIF Pipeline Samples (aif-pipeline-samples) is the repository containing scripts, presets, and the CLI source code. AIF Pipeline CLI (aif-pipeline) is the command-line tool installed from the cli/ directory inside that repo. The CLI wraps Omniverse Kit extensions (Scene Optimizer, Asset Validator, CAD Converter) into a single aif-pipeline command.
Windows users
All commands below are for PowerShell (not Command Prompt / CMD). If you are using CMD, switch to PowerShell first: type powershell and press Enter.
Shell differences (Windows compared to Linux)
Running commands: use
uv run <command>on both platforms (no manual activation needed)Manual activation: PowerShell uses
.\.venv\Scripts\Activate.ps1. Linux usessource .venv/bin/activate.Environment variables: PowerShell uses
$env:VAR. Linux uses$VAR.
Python Version Requirements#
Supported versions - Python 3.10, 3.11, and 3.12.
uv handles Python version selection automatically - uv sync reads the version constraint from pyproject.toml and downloads a compatible Python if needed. You do not need to install Python manually, and adding Python to your system PATH is not required. uv discovers and manages Python installations independently.
Note
Python 3.13+ is not yet supported by all dependencies (notably usd-core). If your system default is 3.13+, this is not a problem - uv sync automatically selects a compatible version within the >=3.10,<3.13 range.
Step 1: Get the Repository#
Clone the repository into a directory of your choice. This can be any location on your system - it is recommended to keep it outside of your Kit/Composer installation directory to avoid confusion.
cd D:\projects
Clone through SSH:
git clone git@github.com:NVIDIA-Omniverse/aif-pipeline-samples.git
Or through HTTPS:
git clone https://github.com/NVIDIA-Omniverse/aif-pipeline-samples.git
Enter the repo root:
cd aif-pipeline-samples
cd ~/projects
Clone through SSH:
git clone git@github.com:NVIDIA-Omniverse/aif-pipeline-samples.git
Or through HTTPS:
git clone https://github.com/NVIDIA-Omniverse/aif-pipeline-samples.git
Enter the repo root:
cd aif-pipeline-samples
Important
You are now in the repo root (aif-pipeline-samples/). All remaining commands on this page and in the Quickstart assume you are in this directory. Do not run these commands from a Kit app template directory.
After cloning, the repository layout is:
aif-pipeline-samples/ <-- repo root ($AIF_PIPELINE_SAMPLES_ROOT)
├── pyproject.toml <-- workspace definition (uv sync reads this)
├── cli/ <-- CLI source (installed as editable workspace member)
├── asset_processor/ <-- Asset Processor web app
│ └── server.py
├── oav/ <-- Asset validators (workspace member)
├── so/ <-- Scene Optimizer presets
├── docs/
├── setup.ps1 <-- Automated setup (Windows)
├── setup.sh <-- Automated setup (Linux)
└── .venv/ <-- created by setup script or uv sync
Step 2: Install Everything#
Choose one of the two options below. Option A is recommended for most users.
Option A: Automated Setup (Recommended)#
Run the setup script from the repo root. The script handles everything:
Installs
uv(fast Python package manager) if not already presentDownloads a compatible Python (3.10-3.12) if none is found on your system
Sets the
AIF_PIPELINE_SAMPLES_ROOTenvironment variableRuns
uv syncto create the virtual environment and install all dependencies
.\setup.ps1
./setup.sh
If you see Permission denied, run bash setup.sh instead (or chmod +x setup.sh then ./setup.sh).
You should see three steps complete:
=== AIF Pipeline Samples Setup ===
[1/3] Checking uv...
uv 0.6.x
[2/3] Setting AIF_PIPELINE_SAMPLES_ROOT...
D:\projects\aif-pipeline-samples
[3/3] Running uv sync (venv + all dependencies)...
...
Installed N packages in Xs
Verifying CLI...
aif-pipeline, version X.Y.Z
=== Setup Complete ===
If the script completes successfully, skip ahead to Verify.
Tip
If you encounter UnauthorizedAccess on Windows, you need to allow PowerShell scripts first - see the Prerequisites section at the top of this page.
Option B: Manual Steps#
Use this if the automated script does not work in your environment (for example, restricted network access that blocks the uv installer).
Step 2a: Install uv
uv is a fast Python package manager that handles virtual environment creation and dependency installation.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
curl -LsSf https://astral.sh/uv/install.sh | sh
Verify:
uv --version
Note
These commands pipe the uv installer script directly into the shell. If you prefer to inspect the script before running it, download it first:
Windows:
irm https://astral.sh/uv/install.ps1 -OutFile uv-install.ps1, review it, then run.\uv-install.ps1Linux:
curl -LsSf https://astral.sh/uv/install.sh -o uv-install.sh, review it, then runsh uv-install.sh
uv is open source: github.com/astral-sh/uv
Step 2b: Set Environment Variable
The AIF_PIPELINE_SAMPLES_ROOT environment variable points to the repository root. It enables:
Dynamic preset discovery - Scene Optimizer Python processors can find and run presets without hardcoded paths.
External Python modules - Scene Optimizer Python processors can load shared code from a library folder (for example,
so/generic/lib/).
[System.Environment]::SetEnvironmentVariable('AIF_PIPELINE_SAMPLES_ROOT', $PWD.Path, 'User')
Set it for the current session as well:
$env:AIF_PIPELINE_SAMPLES_ROOT = $PWD.Path
Verify:
echo $env:AIF_PIPELINE_SAMPLES_ROOT
The output should show your repo root (for example, D:\projects\aif-pipeline-samples). If it is blank, close and reopen your terminal.
Add to ~/.bashrc or ~/.zshrc:
export AIF_PIPELINE_SAMPLES_ROOT="$(pwd)"
Reload:
source ~/.bashrc
Verify:
echo $AIF_PIPELINE_SAMPLES_ROOT
The output should show your repo root (for example, /home/user/projects/aif-pipeline-samples).
Tip
The repository can live anywhere on your system. As long as AIF_PIPELINE_SAMPLES_ROOT points to the correct root, commands will work regardless of the install location.
Step 2c: Install Dependencies
Run uv sync from the repo root. This single command:
Creates a
.venv/virtual environment with a compatible Python versionInstalls the CLI in editable mode (from
cli/)Installs Asset Processor dependencies (Flask and others)
Installs the asset validators (from
oav/)Generates a
uv.locklockfile for reproducible builds
uv sync
You should see uv creating the virtual environment and installing packages. When it finishes, the last line reads something like Installed N packages in Xs. A .venv/ directory now exists in the repo root.
Verify the Installation#
Whether you used Option A or Option B, verify that the CLI works:
Activate the virtual environment (not needed if you use uv run instead):
.\.venv\Scripts\Activate.ps1
Activate the virtual environment (not needed if you use uv run instead):
source .venv/bin/activate
aif-pipeline --version
aif-pipeline --help
You should see the CLI version number and a list of available commands.
Note
Activate the virtual environment each time you open a new terminal. Alternatively, you can prefix any command with uv run to skip activation entirely - for example, uv run aif-pipeline --help or uv run python asset_processor/server.py. uv run automatically discovers and uses the workspace .venv/ so you do not need to activate it first.
External Script Library Pattern
Place reusable Python scripts in a library folder (such as so/generic/lib/). In your Scene Optimizer Python Script processor, use this pattern to load and execute them:
import os
lib_path = os.path.join(os.environ["AIF_PIPELINE_SAMPLES_ROOT"], "so", "generic", "lib")
script_file = os.path.join(lib_path, "my_script.py")
exec(compile(open(script_file).read(), script_file, 'exec'))
process(stage)
Why use exec(compile(...)) instead of import?
Python’s import system caches modules in sys.modules. During development, if you edit your script and re-run the processor, the cached version runs instead of your updated code. The exec(compile(...)) pattern:
Reads the file fresh from disk every time
Avoids all import caching issues
Provides proper error tracebacks (using
compile()with filename)Works reliably in Scene Optimizer’s embedded Python environment
After your scripts are stable, you can switch to standard imports if preferred, but you need to restart Kit/USD Composer to pick up changes.
Updating dependencies
uv sync installs the versions pinned in uv.lock for reproducibility. To update a specific dependency to its latest release (for example, the Omni Asset Validator):
uv lock --upgrade-package omniverse-asset-validator
uv sync
To update all dependencies at once:
uv lock --upgrade
uv sync
What You Have Now#
After completing this page you have:
USD Composer (Kit) installed and built
The
aif-pipeline-samplesrepository clonedAIF_PIPELINE_SAMPLES_ROOTenvironment variable setA
.venv/virtual environment with the CLI, Asset Processor dependencies, and validators installedaif-pipeline --versionprints a version number
The CLI does not yet know where your Kit installation lives. The Quickstart walks you through launching the Asset Processor, adding your Kit configuration, and running your first optimization.
Next Steps#
Quickstart - Start here. Launch the Asset Processor, configure Kit paths, build a preset, and optimize an asset.
CLI Reference - Full CLI reference
Scene Optimizer Presets - Optimization presets
Metadata - Metadata tools