Metadata#
Tools for adding structured metadata to USD assets using layer composition with type-based namespacing.
Overview#
These tools add custom properties to USD assets non-destructively using separate property layers. All numeric values use SI units (meters, kilograms, Kelvin, watts) unless otherwise noted in the property description.
Properties are organized using a two-level namespace hierarchy:
aif:core:- Common properties shared across all equipment (manufacturer, dimensions, and version info)aif:spec:- Equipment-specific properties (cooling capacity, voltage ratings, and battery type)
Quick Start#
# Create a metadata template for specific equipment
aif-pipeline metadata create --type cdu --output cdu.json
# Edit cdu.json to customize values...
# Apply metadata to create USD property layer
aif-pipeline metadata apply cdu.json --output cdu_properties.usda --prim Root
# Update an existing property layer after template changes
aif-pipeline metadata update cdu_properties.usda
Equipment Types#
Type |
Description |
Properties |
|---|---|---|
|
Coolant Distribution Unit |
81 (20 common + 61 specific) |
|
Computer Room Air Handler |
51 (20 common + 31 specific) |
|
Uninterruptible Power Supply |
51 (20 common + 31 specific) |
|
NVIDIA DGX GB300 Rack |
27 (20 common + 7 specific, pre-filled) |
Workflow#
1. Create Templates#
aif-pipeline metadata create --type cdu --output cdu.json
aif-pipeline metadata create --type crah --output crah.json
2. Customize Templates#
Edit the generated JSON files to match your asset specifications:
{
"properties": {
"aif:core:manufacturer": {
"type": "string",
"value": "Your Company Name",
"description": "Equipment manufacturer"
},
"aif:spec:coolingCapacity": {
"type": "float",
"value": 75000.0,
"description": "Cooling capacity in Watts"
}
}
}
3. Generate USD Property Layers#
aif-pipeline metadata apply cdu.json --output GenericCDU_Properties.usda --prim Root
aif-pipeline metadata apply crah.json --output CW375_Properties.usda --prim Root
Note
Naming Convention Use <ModelName>_Properties.usda (for example, CW375_Properties.usda) to match the convention used for connection points files.
4. Compose Layers#
Add the property layers to your main USD asset as sublayers:
Open the main asset file in USD Composer and drag the property layer into the Layers panel as a sublayer. Use the Scene Optimizer add_layers processor to automate this step in presets.
from pxr import Sdf
layer = Sdf.Layer.FindOrOpen("asset.usda")
sublayers = layer.subLayerPaths
sublayers.append("cdu_props.usda")
layer.subLayerPaths = sublayers
layer.Save()
5. Update Metadata#
When templates change (new properties added, version bumped), update existing property layers independently:
# Auto-detect equipment type from aif:core:assetClass
aif-pipeline metadata update GenericCDU_Properties.usda
# Explicit type
aif-pipeline metadata update GenericCDU_Properties.usda --type cdu
# Preview changes without writing
aif-pipeline metadata update GenericCDU_Properties.usda --dry-run
The update command compares the existing .usda file against the current template, adds any missing properties, and updates aif:core:assetVersion if the template defines a different value. Existing properties are never removed.
USD Metadata Attributes Tool#
The metadata/simready_add_attributes/ directory contains a standalone tool for adding advanced metadata attributes to USD prims:
Non-visual sensors - Radar, lidar, ultrasonic, camera, IMU, GPS
Wikidata semantics - Semantic classification using Wikidata entity IDs
Dense captions - AI-generated or manual descriptions
HOOPS migration - Automatic migration of Omniverse HOOPS metadata to USD semantic schema
Physics collision meshes - Convex hull, bounding box, sphere, mesh approximations
Physics joints - Revolute, prismatic, fixed, spherical, distance, D6
# Add Wikidata semantic classification
python usd_add_metadata_attributes.py scene.usda \
--add-wikidata /World/Car Q1420 "Automobile"
# Bulk migrate all HOOPS metadata in a file
python usd_add_metadata_attributes.py scene.usda --migrate-hoops
# Apply batch metadata from JSON config
python usd_add_metadata_attributes.py scene.usda \
--config metadata_config_example.json
See also
CAD to USD - Where metadata fits in the pipeline
Connection Points - Add connection points alongside metadata
CLI Reference - Full CLI reference for metadata commands
Validators - Validate metadata compliance