Skip to main content

Object Loader

The ObjectLoader provides methods to acquire 3D objects (USD, MJCF) from the Lightwheel registry.

Quick Start

from lightwheel_sdk.loader import object_loader, login_manager

# Login first
login_manager.login(username="your_username", password="your_password")

# Load an object
file_path, object_name, metadata = object_loader.acquire_by_registry(
registry_type="objects",
registry_name=["chair"],
file_type="USD"
)

print(f"Object downloaded to: {file_path}")
print(f"Object name: {object_name}")
print(f"Metadata: {metadata}")

Function Reference

acquire_by_registry

ParameterTypeRequiredDefaultDescription
registry_typestrYes-Registry collection to search (objects, fixtures, textures, etc.).
registry_nameList[str]No[]Primary registry names to match exactly.
exclude_registry_nameList[str]No[]Registry names to omit from the result pool.
file_typestrNo"USD"Desired asset format. Accepted values align with FileType enum (for example USD, MJCF).
file_namestrNo""Specific file base-name to request.
sourceList[str]No[]Filter by asset source/vendor.
quality_levelsList[int]No[]Filter by authoring quality (1=BASIC, 2=GOOD, as defined in QualityLevel).
projectsList[str]No[]Restrict to assets tagged with these project names.
equalsDict[str, Any]NoNoneExact metadata/property matches (key=value). Treated as empty dict {} when None.
containsDict[str, Any]NoNoneSubstring/contains match within array or string metadata/property fields. Treated as empty dict {} when None.

Output: tuple (file_path, object_name, metadata)

  • file_path: Local cache path where the USD/MJCF payload is downloaded.
  • object_name: Asset display name resolved from the registry metadata.
  • metadata: Dictionary containing the following fields:
FieldTypeDescription
fileIdstrUnique identifier (36-character UUID) for the asset file.
fileUrlstrSigned URL for downloading the asset file from storage.
fileNamestrBase filename of the asset (e.g., chair.usd).
assetNamestrHuman-readable name of the asset.
filePathstrOriginal file path in the source system.
fileVersionIdstrUnique identifier (36-character UUID) for this specific version of the file.
sourcestrSource/vendor identifier for the asset (e.g., ikea, vendor_name).
fileTypestrFile format type (e.g., USD, MJCF).
propertyDict[str, Any]Registry-level properties as key-value pairs. These are searchable attributes defined at the registry level.
metadataDict[str, Any]Registry-level metadata as key-value pairs. Additional descriptive information about the registry entry.
fileMetadataDict[str, Any]File-specific metadata as key-value pairs. Information specific to this file version.
removedboolWhether this file version has been soft-deleted.
qualityLevelintQuality level of the asset (1 = BASIC, 2 = GOOD).
projectNamesList[str]List of project names this asset is associated with.
freeboolWhether the asset is freely accessible without restrictions.
internalNamestrInternal identifier name used by the system.
registryUuidstrUnique identifier (36-character UUID) of the parent registry entry.
registryNamestrName of the registry entry this file belongs to.
registryTypestrType of registry (objects, fixtures, textures, etc.).

acquire_by_file_version

ParameterTypeRequiredDefaultDescription
file_version_idstrYes-Exact 36-character UUID for the asset file version to download.

Output: tuple (file_path, object_name, metadata) identical in shape to acquire_by_registry. The loader resolves the request to a single asset payload and hydrates the local cache before returning.

The metadata dictionary contains the same fields as described in acquire_by_registry above.

list_registry

ParameterTypeRequiredDefaultDescription
No parameters---This function takes no parameters and returns all registry entries.

Output: list of dictionaries, each mirroring a RegistryData record:

  • id, name, internal_names, registry_type, file_types, sources, property, metadata, removed.

RegistryQuery.query_file

RegistryQuery instances encapsulate defaults (registry_type, registry_name, filters) and forward parameters to the backend registry service. Calling query_file returns the raw response dictionary with metadata fields, which is useful when you need structured information without downloading the payload through ObjectLoader.

Registry Types

The SDK supports three registry types:

  • objects - 3D objects (furniture, props, etc.)
  • fixtures - Fixed objects (walls, doors, windows)
  • textures - Material textures

Loading Objects

By Registry Name

# Load a specific object by name
file_path, object_name, metadata = object_loader.acquire_by_registry(
registry_type="objects",
registry_name=["chair"],
file_type="USD"
)

By Multiple Criteria

# Load with multiple filters
file_path, object_name, metadata = object_loader.acquire_by_registry(
registry_type="objects",
registry_name=["modern_chair"],
source=["vendor_name"],
file_type="USD",
quality_levels=[2], # GOOD quality
projects=["project_name"]
)

By File Version ID

# Load a specific version
file_path, object_name, metadata = object_loader.acquire_by_file_version(
file_version_id="version-uuid-here"
)

Registry Query

Basic Query

from lightwheel_sdk.loader.object import RegistryQuery

# Create query
query = RegistryQuery(
registry_type="objects",
registry_name=["chair", "table"]
)

# Query for USD files
query_dict = query.query_file(
file_type="USD",
source=["ikea"],
quality_levels=[2]
)

Advanced Query with Filters

# Query with equals filter
query = RegistryQuery(
registry_type="objects",
registry_name=["chair"],
equals={"color": "red", "style": "modern"}
)

# Query with contains filter
query = RegistryQuery(
registry_type="objects",
contains={"tags": "outdoor", "description": "wooden"}
)

# Query with exclusions
query = RegistryQuery(
registry_type="objects",
exclude_registry_name=["old_chair", "broken_table"]
)

Query File Types

# Query USD files
query_dict = query.query_file(file_type="USD")

# Query MJCF files
query_dict = query.query_file(file_type="MJCF")

Quality Levels

Objects are available in different quality levels:

  • 1 - BASIC: Lower polygon count, smaller file size
  • 2 - GOOD: Higher polygon count, better detail
# Request high-quality version
file_path, object_name, metadata = object_loader.acquire_by_registry(
registry_type="objects",
registry_name=["chair"],
file_type="USD",
quality_levels=[2] # GOOD quality
)

List Available Objects

# Get list of all available objects in registry
registry_list = object_loader.list_registry()

for item in registry_list:
print(f"Name: {item['name']}")
print(f"Type: {item['type']}")
print(f"Source: {item['source']}")

File Types

USD Files

file_path, object_name, metadata = object_loader.acquire_by_registry(
registry_type="objects",
registry_name=["chair"],
file_type="USD"
)
# Returns: ~/.cache/lightwheel_sdk/object/chair/chair.usd

Complete Example

from lightwheel_sdk.loader import object_loader, login_manager
from lightwheel_sdk.loader.object import RegistryQuery

# Login
login_manager.login(username="your_username", password="your_password")

# List available objects
registry = object_loader.list_registry()
print(f"Available objects: {len(registry)}")

# Create a query for modern chairs
query = RegistryQuery(
registry_type="objects",
registry_name=["modern_chair"],
equals={"style": "modern"}
)

# Acquire high-quality USD file
file_path, object_name, metadata = object_loader.acquire_by_registry(
registry_type="objects",
registry_name=["modern_chair"],
file_type="USD",
quality_levels=[2],
source=["premium_vendor"]
)

print(f"Downloaded: {object_name}")
print(f"Path: {file_path}")
print(f"Version: {metadata.get('fileVersionId')}")
print(f"Quality: {metadata.get('qualityLevel')}")

# Use the USD file in your application
# import pxr
# stage = pxr.Usd.Stage.Open(file_path)

Error Handling

from lightwheel_sdk.loader import object_loader
from lightwheel_sdk.loader.exception import ApiException

try:
file_path, object_name, metadata = object_loader.acquire_by_registry(
registry_type="objects",
registry_name=["nonexistent_object"],
file_type="USD"
)
except ApiException as e:
print(f"Failed to acquire object: {e}")
except ValueError as e:
print(f"Invalid parameters: {e}")

Deprecated Methods

acquire_object (Deprecated)

# DEPRECATED - Use acquire_by_registry instead
file_path = object_loader.acquire_object(
rel_path="source/registry/filename",
file_type="USD"
)

This method is deprecated and may be removed in future versions. Use acquire_by_registry instead.