Services Core

The core of the Omniverse microservices stack is omni.services.core. It holds all base components to get started with microservices in Omniverse.

omni.services.core uses the Kit runtime to execute the code. This allows it to take advantage of an extremely powerful extension system that provides it the abstractions necessary to compose and build extremely small and efficient apps that empower larger Omniverse apps, such as USD Composer, USD Presenter, Machinima, Code, to no longer be constrained to a single executable or machine.

It uses two libraries at the core that help with making sure that the services follow standards as defined by OpenAPI.

  • FastAPI: This library is used to provide omni.services.core with a Router object that endpoints are registered with, it helps with the auto-generation of the OpenAPI specification and allows the dependency injection of Facilities: https://fastapi.tiangolo.com/

  • Pydantic: Pydantic helps creating well-documented and clearly-defined service payloads: https://pydantic-docs.helpmanual.io/

Those libraries are enhanced and extended with additional extensions that allow it to support additional transports and dependencies and providing users of Omniverse with an easy to use framework to write services quickly and efficiently.

Any other extension within Omniverse can, via microservices, be exposed and triggered from other extensions, external applications and machines:

  • They can be running alongside the main application, within the same process or an external process.

  • They can be distributed across servers, long running, always on and deployed on infrastructure such as Kubernetes to support failover and auto scaling.

  • They can, without any further change, be used as a “Function as a service” with Omniverse Farm. This might be useful if, for example, the service needs to load stateful objects such as a USD stage and the desire is to have a clean state after each invocation of the service.