Omniverse Kit 108 Migration Guide#
This guide details the steps and considerations necessary for migrating extensions and applications to Omniverse Kit 108. It incorporates essential updates, dependency changes and known issues, ensuring a clear and structured approach to facilitate a upgrading from previous releases.
The Omniverse Kit 108 release includes the following note-worthy dependencies, amongst others:
Component |
Reference |
|---|---|
OpenUSD 25.02 |
|
Python 3.12 |
Table of Contents#
Preparing for Migration#
Before starting any update process, please ensure you have the following prerequisites in order to minimize disruptions during migration:
Ensure you have access to the latest Omniverse Kit SDK.
You are familiar with your application’s architecture, and existing dependencies.
You have a backup of your current project, to prevent any potential data loss during migration.
A process in place to confirm all functionalities of your application and extensions behave as expected after upgrading.
This process can vary depending on your organization, but typically includes elements such as automated builds, unit or integration tests, documentation about your feature’s behavior, reviewing log information, etc.
Carbonite#
Required Code Updates#
carb::extras::Path#
We removed implicit conversion from Path to std::string. Beginning with Kit 108, converting a Path object to a std::string requires explicitly calling the getString() member function:
Before (Stops working in Kit 108) |
After (Compatible with Kit 107 & Kit 108) |
|---|---|
|
|
Also, as part of the effort to remove null-terminated strings, the following functions now accept carb::cpp::string_view only: getPathParent, getPathExtension, getPathStem and getPathRelative (all from carb::extra namespace).
If you are using those functions, you will have to replace them using the following table (consider the variable p to be a char* representing a null-terminated string).
Before (Stops working in Kit 108) |
After (Compatible with Kit 107 & Kit 108) |
|---|---|
|
|
|
|
|
|
|
|
If your char* is obtained by calling the method .c_str() from a std::string or an omni::string, the solution is just to remove .c_str():
Before (Stops working in Kit 108) |
After (Compatible with Kit 107 & Kit 108) |
|---|---|
|
|
Library.h#
Library.h doesn’t provide the functions getDefaultLibraryPrefix and getDefaultLibraryExtension anymore. They should be replaced with the defines CARB_LIBRARY_PREFIX and CARB_LIBRARY_EXTENSION respectively.
Other Breaking Changes#
omni::string#
The class omni::string no longer treats construction from nullptr as an error. Instead, it will create a valid empty string. This does not require changes to the code.
carb.crashreporter-breakpad.plugin#
Changed the default setting of /crashreporter/compressDumpFiles to true since most products have always enabled that.
omni.structuredlog.plugin#
Changed the default for the /telemetry/enableAnonymousData setting to true. By default, all emitted and transmitted structured log messages will now be sent using an anonymous user ID and the open endpoint (unless configured otherwise). The setting can still be disabled on the command line or in a config file if needed. It can also be overridden with the OMNI_TELEMETRY_DISABLE_ANONYMOUS_DATA environment variable.
Assert macros moved to Assert.h#
include/carb/Defines.h no longer provides CARB_ASSERT and other assert macros. These are now in a new header file: include/carb/Assert.h.
OpenUSD Update#
We updated from OpenUSD 24.05 and Python 3.11 to OpenUSD 25.02 and Python 3.12. This requires any C++ extension to be rebuilt.
Breaking Changes and Migration Requirements#
GfMatrix Lossy Overloads
OpenUSD deprecated precision-losing GfMatrix4d methods. Update your code to use explicit precision methods.
Documentation Field Changes
The way documentation metadata is handled has changed. You now need to consult prim definitions for tooltip information instead of relying on previous methods.
Boost Python Fork
OpenUSD now uses a fork of Boost Python. This may affect extensions that directly interact with Python bindings.
Ensure your C++ extensions are compatible with the new Boost Python fork implementation.
NDR Deprecation
The Node Definition Registry (NDR) is being removed from OpenUSD. If your extensions rely on NDR functionality, you will need to migrate to alternative approaches.
Scalar Translate and Scale xformOps
OpenUSD now supports scalar transform operations. Tooling that interacts with xformOps directly should consider scalar translate and scale operations (e.g.,
xformOp:translateX) in addition to vector operations (e.g.,xformOp:translateXYZ).Update your transform handling code to account for both scalar and vector xformOps.
Live Streaming#
When upgrading from Kit 107 to Kit 108, several important changes were made to the livestream extensions as part of the “Livestream 2.0” restructuring. This section outlines the required changes for existing applications.
Extension Dependencies#
New Required Extensions:
In Kit 108, livestream functionality has been split into multiple focused extensions. You now need to explicitly enable the appropriate extensions based on your use case:
[dependencies]
# For application framebuffer streaming
"omni.kit.livestream.app" = {}
# For specific AOV streaming (if needed)
"omni.kit.livestream.aov" = {}
# Core streaming infrastructure (automatically included as dependency)
"omni.kit.livestream.core" = {}
# Session management (if using REST endpoints)
"omni.services.livestream.session" = {}
What Changed:
omni.kit.livestream.coreno longer provides direct streaming functionalityApplication streaming moved to
omni.kit.livestream.appAOV streaming moved to
omni.kit.livestream.aovSession management requires
omni.services.livestream.sessioninstead of the legacyomni.services.livestream.nvcf
Settings Migration#
Primary Stream Settings Migration#
Legacy Settings (Kit 107 and earlier):
[settings]
# DEPRECATED - These settings are now legacy
app.livestream.port = 49100
app.livestream.fixedHostPort = 1024
app.livestream.publicEndpointPort = 47998
app.livestream.publicEndpointAddress = "192.168.1.100"
app.livestream.allowDynamicResize = false
app.livestream.webrtcEtli = true
New Settings (Kit 108+):
[settings]
# Primary application stream settings
exts."omni.kit.livestream.app".primaryStream.signalPort = 49100
exts."omni.kit.livestream.app".primaryStream.streamPort = 47998
exts."omni.kit.livestream.app".primaryStream.publicIp = "192.168.1.100"
exts."omni.kit.livestream.app".primaryStream.allowDynamicResize = false
exts."omni.kit.livestream.app".primaryStream.enableEventTracing = true
exts."omni.kit.livestream.app".primaryStream.streamType = "webrtc"
Primary Stream Setting Mapping:
Legacy Setting |
New Setting |
Notes |
|---|---|---|
|
|
TCP port for connection negotiation |
|
|
UDP port for media transport (please note that the default value has been changed from 1024 to 47998) |
|
|
UDP port for media transport (legacy if |
|
|
Public IP for NAT traversal |
|
|
Dynamic resize capability |
|
|
Event trace logging |
Automatic Legacy Stream Setting Migration:
The system provides automatic migration for most legacy app stream settings:
Legacy settings related to app streaming under
/app/livestreamare automatically detectedValues are migrated to corresponding primary stream settings
Warning messages are logged encouraging migration to new settings
Legacy settings take precedence over new settings if both are present
Session Management Settings Migration#
Legacy NVCF Settings (Kit 107 and earlier):
[settings]
# DEPRECATED - These settings are now legacy
app.livestream.nvcf.quitOnSessionEnded = true
app.livestream.nvcf.sessionResumeTimeoutSeconds = 0
app.livestream.nvcf.waitForCustomReadyEvent = false
New Session Settings (Kit 108+):
[settings]
# Session management settings
exts."omni.services.livestream.session".quitOnSessionEnded = true
exts."omni.services.livestream.session".resumeTimeoutSeconds = 30
exts."omni.services.livestream.session".waitForSessionReadyEvent = false
Session Management Setting Mapping:
Legacy Setting |
New Setting |
Notes |
|---|---|---|
|
|
Whether to quit when session ends |
|
|
Session resumption timeout - setting name changed, default changed from 0 to 30 |
|
|
Wait for explicit session ready event - setting name changed |
Logging Settings Migration#
Legacy Logging Settings (Kit 107 and earlier):
[settings]
# DEPRECATED - This setting has been removed
app.livestream.logLevel = "info"
New Logging Settings (Kit 108+):
[settings]
# Carb log channel based logging (consistent with other Kit extensions)
log.channels."omni.kit.livestream.streamsdk" = "error" # StreamSDK specific logging
log.channels."omni.kit.livestream.webrtc" = "info" # WebRTC extension logging
log.channels."omni.kit.livestream.app" = "info" # App extension logging
log.channels."omni.kit.livestream.aov" = "info" # AOV extension logging
Logging Migration Notes:
The legacy
/app/livestream/logLevelsetting has been completely removedLogging is now handled through carb’s log channel system for consistency with other Kit extensions
Each livestream extension has a dedicated log channel that can be configured independently
Available log levels: “disabled”, “fatal”, “error”, “warn”, “info”, “verbose”
StreamSDK has a dedicated log channel
omni.kit.livestream.streamsdkthat defaults to “error” to reduce noiseNo automatic migration is provided for the legacy
logLevelsetting as it was set to “silence” by default
Command Line Migration#
Primary Stream Command Line Migration#
Kit 107 Command Line:
./kit/kit your_app.kit \
--/app/livestream/port=49100 \
--/app/livestream/fixedHostPort=47998
Kit 108 Command Line:
./kit/kit your_app.kit \
--/exts/omni.kit.livestream.app/primaryStream/signalPort=49100 \
--/exts/omni.kit.livestream.app/primaryStream/streamPort=47998
Session Management Command Line Migration#
Kit 107 NVCF Command Line:
./kit/kit your_app.kit \
--/app/livestream/nvcf/quitOnSessionEnded=true \
--/app/livestream/nvcf/sessionResumeTimeoutSeconds=0 \
--/app/livestream/nvcf/waitForCustomReadyEvent=false \
--/exts/omni.services.transport.server.http/port=8010
Kit 108 Session Command Line:
./kit/kit your_app.kit \
--/exts/omni.services.livestream.session/quitOnSessionEnded=true \
--/exts/omni.services.livestream.session/resumeTimeoutSeconds=30 \
--/exts/omni.services.livestream.session/waitForSessionReadyEvent=false \
--/exts/omni.services.transport.server.http/port=8011
Logging Command Line Migration#
Kit 107 Logging Command Line:
./kit/kit your_app.kit \
--/app/livestream/logLevel=info
Kit 108 Logging Command Line:
./kit/kit your_app.kit \
--/log/channels/omni.kit.livestream.streamsdk=error \
--/log/channels/omni.kit.livestream.webrtc.plugin=info \
--/log/channels/omni.kit.livestream.app.plugin=info
Breaking Changes#
Extension Structure: The monolithic
omni.kit.livestream.corehas been split into focused extensionsSetting Paths: All primary stream settings moved from
/app/livestreamto/exts/omni.kit.livestream.app/primaryStreamSession Management Extension:
omni.services.livestream.nvcfhas been renamed toomni.services.livestream.sessionwith updated settings pathsExplicit Dependencies: Applications must now explicitly depend on
omni.kit.livestream.appfor application streamingAOV Streaming: Moved to separate
omni.kit.livestream.aovextension with its own configuration structureLogging Settings: The
/app/livestream/logLevelsetting has been removed and replaced with carb log channel systemHTTP Port Default: Session service HTTP port default changed from 8010 to 8011
Recommended Migration Steps#
Update Dependencies: Add explicit dependencies on required livestream extensions
Update Stream Settings: Replace legacy
/app/livestreamsettings with new/exts/omni.kit.livestream.app/primaryStreamsettingsUpdate Session Settings: Replace
omni.services.livestream.nvcfsettings withomni.services.livestream.sessionequivalentsUpdate Logging Settings: Replace deprecated
/app/livestream/logLevelwith appropriate carb log channel settingsUpdate HTTP Port: Change HTTP server port from 8010 to 8011 if using default values
Test Configuration: Verify streaming functionality and session management works with new settings
Remove Legacy Settings: Once confirmed working, remove deprecated settings
Update Documentation: Update any internal documentation or deployment scripts
Validation#
To verify successful migration:
Check application starts without deprecation warnings in logs.
Confirm streaming functionality works as expected.
Verify all required extensions are properly loaded.
Test both primary and spectator streams if applicable.
Verify session management REST endpoints are accessible (if using session service).
For applications using AOV streaming, additional migration may be required for the omni.kit.livestream.aov extension configuration.