Skip to content

How to handle Omniverse registries?

Published: at 12:00 PM

Nvidia Omniverse

NVIDIA Omniverse is a platform that enables the creation of shared virtual spaces where 3D worlds can be connected and collaborated on in real-time. It’s like a digital universe where designers, engineers, and artists can work together on complex projects, simulating real-world physics and rendering incredibly realistic visuals. Think of it as a powerful tool for industries like film, architecture, automotive, and robotics to design, test, and visualize their creations in a virtual environment.

One of Omniverse’s standout features is its flexible extension system. Instead of a rigid, closed-off platform, Omniverse empowers users to shape its functionality. From NVIDIA-developed tools to community-driven innovations, even your own custom creations, extensions are the building blocks of this platform. The best part? You can effortlessly integrate your code into Omniverse by simply specifying a registry URL, a local path, or even pulling directly from a GitHub repository.

Structure

In order to have a disoverable and usable extension registry the only single requirment is to have it in a specific folder structure.

Please be aware of the fact that most of the findings presented here are discovered through experience and can be misinformation.

In the root folder/URI there must be a file called index.zip that contains the metadata of all the extensions stored in the registry in a .json file. The file itself is probably compressed with C++ or Python with LZMA coding. Tried to decompress it from Node.js and Bun with no luck. Worth to note that I only had success opening it with 7zip and Python. If you want to give it a try, you can download one of the index database of Omniverse that contains most of the core Nvidia extensions here.

Under the folder 3/ (don’t ask me why) there should be an archives/ folder and optionally a bak/ and a resources/ folder. The archives folder is meant to store your extensions as zip files, the bak is for automatic backups and the resources is for storing images, like the icon of your extension or the preview_image in the description.

An example of the structure will be down below.

registry/
    3/
        archives/
            foo.bar.extension-0.0.1.zip
            another.one.python-1.0.0.zip
            /foo.bar.extension
                foo.bar.extension-0.0.1.json
            /another.one.python
                another.one.python-1.0.0.json

        bak/
        resources/
            /.thumbs
                /138x108
                /256x256

As long as the file structure matches and the metadata’s are point to the right path, you are good to go.

Authentication

Without auth

Implement it yourself

Building your own extension registry offers unparalleled customization and control. Select your preferred programming language and database, and construct a solution that aligns with your specific needs. By adhering to the outlined routing structure, you can create a functional registry. This approach empowers you to optimize performance, leverage cloud infrastructure, implement robust logging, and establish automated backup strategies—such as weekly uploads to a repository like JFrog Artifactory.

Using a local or a network folder

The Omniverese tooling called repo_man does have some handy scripts to support your project related actions, like building, testing your project or publish your desired extensions.

Once you configured your project, you can execute repo.{bat|sh} publish_exts that will compress your extensions into zip files and copy/upload them to the desired place.

With auth

The currently available solution to have a registry protected by some kind of authentication is using Nvidia’s solution, called Nucleus. Omniverse Nucleus is the database and collaboration engine of Omniverse. With Nucleus, teams can have multiple users connected together live across several applications all at once. This fosters users to use the application(s) they are the most comfortable and quickest with and allows for rapid iteration.

Nucleus offers a set of fundamental services that allow a variety of client applications, renderers, and microservices all to share and modify representations of virtual worlds together.[1]

Nucleus offers robust authentication, safeguarding your extensions from unauthorized access. However, this security comes at the cost of transparency. The platform lacks publicly accessible APIs, limiting interaction to dedicated applications. Under the hood, Nucleus employs a combination of HTTP and WebSocket protocols for communication, which is challenging to reverse engineer due to its undocumented nature. This black-box approach, while effective for security, can hinder customization and integration efforts.