Kit quick start guide?

Hi,

I’ve started looking into Kit, including documentation and deep dive videos. Is there any published quick start material, for example building a simple “hello world” app?

Hello adharder,
Thank you for posting, I will send your inquiry to the proper channels for review.
Thank you for your patience.

Hi

There is quite a lot of information on how to get started to build Apps or Extensions in the dev Manual
https://docs.omniverse.nvidia.com/py/kit/index.html

this sections in the extensions ( Extensions — Omniverse Kit 100.2 documentation ) is showing the API

there is a example extensions too in the SDK that you can use are reference

omni.example.hello
that you can find in the extensions Manager

If you have not yet seen it this video show some of the core concepts

That should be a good start but please don’t hesite to reach out here for more info

Thanks

dfagnou, Thank you for the pointers. I’ll dig into that material.

As a follow up, is this tetris game an example of an extension? Developing a Tetris game with PixarUSD and Python Scripting in Omniverse Kit - YouTube

Can you talk about your plans for supporting interactivity? For example can I deploy an interactive application from Omniverse?

I felt very frustrated after reading these pages. These really can’t be called tutorials. I still don’t know how to start. Copy the omni.example.hello folder and edit it in Notepad and then run it in the terminal? ?

1 Like

Sorry to hear the docs is not clear enough.

so you read this:
https://docs.omniverse.nvidia.com/py/kit/docs/guide/extensions.html#what-is-an-extension

and it was not clear ?

It define how to launch an extensions and how to set it up, we will review and see if we can augment that

let me define here

kit.exe --empty --enable epw.my_cool_ext << would run empty and launch your extensions

but depanding what type of extension you plan to build there are other workflow

can you descripbe what are you planning for your extension I will give a good examples on how to set that up here

Thanks

I hope the OP doesnt mind me chiming in here, but this part of OV is really thin, in terms of guidance.

I’d like to see an Hello World sample, where it has a text editor on the screen with the text ‘Hello World’. This would give some context to getting started creating our own OV apps.

From there, I’d like a sample that shows how to create UI in an extension. So, with my Hello World app from above, I’d create a UI extension that adds a button to my Hello World app, when the UI extension is loaded.

So, I think, even with these basic samples, the OV community itself could start creating more extension content.

(If the USD Stage is a native part of OV, and has to be in an OV app, that’s fine - I was just trying to keep the App extension sample as simple as possible)

omni.tetris.zip (944.4 KB)

Hi adharder,

Here is the tetris extension. Just drop it into the /exts directory in create, and then you should be able to load it from the extension manager window. All the source code is there, for your perusal.

Excellent, thanks!

Does this help understanding how a basic extension could be created for Omniverse?

I take a simple collision simulation problem as my study example. I want to build an application that can import two meshes (stem vs. femoral canal) and simulate how they match each other under the gravity. The final state of the simulation is very meaningful for surgical guidance.

It is very easy to create simulation in Create and the effect is amazing, but I still need to develop some additional functions such as model editing, coordinate system, data export, etc., by using either python or C++.

The most confusing point for me is this command line startup method. If I want to package it to other people, I have to copy the extension folder. I think this method is a bit strange, and it is not user-friendly to non-developer users. Maybe this is just an early feature. You confirmed this for me, thank you for your explanation.

This is really great, glad to see you exploring the power of extensions. Your feedback is appreciated.

Extensions are a lot more than a single file , as you build up your amazing work you will have many files, icons, data file , docs etc you need a place to keep all those togeher and organize , that is where extensions are really useful.

the next version we have a Button to export extensions as a zip file and for your collegue or tested to simply import that verison of your extensions into their system

you can benefit from versioning and also you can have extensions dependency and break your work into modular componenents

doing a single file with command line argulment might look convinent for something very simple but it doesn’t scale well
also with extensions you can “hot reload” your changes so you never need to relaunch the application , your code reload constantly as you save making it super fast to iterate .

Let us know when you have tried it and if you have issue but I am convince that you will really enjoy that new way !

great idea of a project lookign forward more video !

First I want to say that I’m pretty happy with Omniverse, and I realize it’s still in beta.I

I think the issue (for me at least) is that omniverse uses python, but doesn’t at all follow the conventional ways for:

  • setting up your development environment (it’s still not clear to me how to do this properly)

  • distributing your application and it’s dependencies for others.

From reading the documentation about “what is an extension” I get the impression we’re supposed to copy binaries around to make sure all the dependencies are localized into each extension? That each extension is a microservice with no external dependencies?

What if I wanted to query a remote server for information and wanted to use the requests library for doing so? What is the preferred way to include this dependency with my extension?

Thank you in advance for your time. It’s really appreciated.

Hi Matt, glad you like it!

Omniverse Kit is an application with embedded regular cpython. So overall we don’t limit or dictate what you can do using python. All the same libraries, modules can be loaded and used. But it is true indeed that it is not conventional and I don’t think we cover it enough in documentation yet.

For installing other modules we have an extension that helps a bit with calling python’s pip: omni.kit.pipapi . It basically just calls pip. So to get requests module you can just:

import omni.kit.pipapi
omni.kit.pipapi.install("requests")
import requests
print(requests)

We have some of scripting documentation included, it has a long “extensions” page. Everything is an Extension. Extension can contain python modules, c++ libraries, bindings, resources. We try to localize it into one folder for packaging and to keep things clean, but it doesn’t force you to.

I think best way is to open whole Create folder in VSCode and look in our code for things you interested in. Most of it is in python and available as an example.

1 Like

Greetings -

I guess I’d like to drop my hat into the confused pile.

I am following the tutorial Build Amazing Apps Quickly Using Omniverse Kit | NVIDIA On-Demand. I’m at 8:40
When I try to launch from my cygwin command line, I get the following results:

$ kit --exec gtc_demo.py
[Info] [carb] Logging to file: C:/Users/croda/.nvidia-omniverse/logs/Kit/privacy/100.1/kit_20210702_194316.log
[Info] [carb] Initializing plugin: carb.events.plugin (interfaces: [carb::events::IEvents v0.2]) (impl: carb.events.plugin)
[0.211s] Loading user config located at: ‘D:/Omniverse/Kit/privacy/100.1/user.config.json’
2021-07-02 18:43:16 [231ms] [Error] [carb.scripting-python.plugin] ModuleNotFoundError: No module named ‘omni.ui’

At:
c:/users/croda/appdata/local/ov/pkg/kit 100.1.0/_exts/gtc_demo/gtc_demo.py(3):

ModuleNotFoundError: No module named ‘omni.ui’

At:
c:/users/croda/appdata/local/ov/pkg/kit 100.1.0/_exts/gtc_demo/gtc_demo.py(3):
2021-07-02 18:43:16 [232ms] [Error] [omni.kit.app.plugin] [py stderr]: ModuleNotFoundError: No module named ‘omni.ui’

At:
c:/users/croda/appdata/local/ov/pkg/kit 100.1.0/_exts/gtc_demo/gtc_demo.py(3):

[0.390s] app started

I tried moving my extension folder to the installation _exts folder but I still can’t find the omni.ui library.
What other configuration needs to be done to get this to launch properly?

Cheers!

Upon further exploration, I have discovered a little.

I discovered that in order for the extension to be loaded and executed, the extension file needs to be labeled with a “.kit” suffix. The extension can then be launched directly from the command line:
$ kit.exe omni.fubar3.kit

The result is a blank window with some kind of GUID number printed on the top window frame:
ex: “Omniverse Kit 100.1.45348-0d72f253d-release”

The launching generates no error. However when I terminate the extension, an error is generated:

[Info] [carb] Logging to file: C:/Users/croda/.nvidia-omniverse/logs/Kit/omni.fubar3/100.1/kit_20210703_025456.log
[Info] [carb] Initializing plugin: carb.events.plugin (interfaces: [carb::events::IEvents v0.2]) (impl: carb.events.plugin)
[0.120s] Loading user config located at: ‘D:/Omniverse/Kit/omni.fubar3/100.1/user.config.json’
[0.299s] [ext: omni.kit.async_engine-0.0.0] startup
[0.303s] [ext: omni.kit.loop-default-0.1.0] startup
[0.304s] [ext: omni.kit.test-0.0.0] startup
[0.317s] [ext: omni.kit.pipapi-0.0.0] startup
[0.329s] [ext: omni.kit.commands-0.0.0] startup
[0.339s] [ext: omni.assets-0.0.0] startup
[0.342s] [ext: omni.timeline-0.0.0] startup
[0.347s] [ext: carb.audio-0.1.0] startup
[0.353s] [ext: omni.stats-0.0.0] startup
[0.360s] [ext: omni.usd-0.1.8] startup
[0.637s] [ext: omni.appwindow-0.1.0-rc1] startup
[0.813s] [ext: omni.client-0.1.0] startup
[0.829s] [ext: omni.kit.renderer.core-0.0.0] startup

|---------------------------------------------------------------------------------------------|
| Driver Version: 462.31 | Graphics API: D3D12
|=============================================================================================|
| GPU | Name | Active | LDA | GPU Memory | Vendor-ID | LUID |
| | | | | | Device-ID | UUID |
|---------------------------------------------------------------------------------------------|
| 0 | NVIDIA GeForce RTX 2070 with M… | Yes | | 8031 MB | 10de | 139c8000… |
| | | | | | 1f10 | 0 |
|---------------------------------------------------------------------------------------------|
| 1 | Intel(R) UHD Graphics 630 | | | 128 MB | 8086 | 13588000… |
| | | | | | 3e9b | 0 |
|=============================================================================================|
| OS: Windows, Version: 10.0 (1909), Build: 18363
| Processor: Intel(R) Core™ i7-9750H CPU @ 2.60GHz | Cores: 6 | Logical: 12
|---------------------------------------------------------------------------------------------|
| Total Memory (MB): 32580 | Free Memory: 21850
| Total Page/Swap (MB): 37444 | Free Page/Swap: 23700
|---------------------------------------------------------------------------------------------|
[2.914s] [ext: omni.ui-2.0.1] startup
[2.942s] [ext: omni.kit.renderer.capture-0.0.0] startup
[2.956s] [ext: omni.renderer-rtx-0.0.0] startup
[2.958s] [ext: omni.kit.mainwindow-0.0.0] startup
[2.975s] [ext: omni.kit.editor-mini-0.0.0] startup
[2.996s] [ext: omni.fubar3-1.0.0] startup
[2.996s] app started
[195.262s] [ext: omni.fubar3-1.0.0] shutdown
[195.262s] [ext: omni.kit.editor-mini-0.0.0] shutdown
[195.263s] [ext: omni.kit.renderer.capture-0.0.0] shutdown
[195.265s] [ext: omni.kit.mainwindow-0.0.0] shutdown
[195.267s] [ext: omni.ui-2.0.1] shutdown
[195.269s] [ext: omni.kit.renderer.core-0.0.0] shutdown
2021-07-03 01:58:11 [195,565ms] [Error] [carb.graphics-direct3d.plugin] Leaking graphics objects. Live device refcount: 3. Release all the graphics objects prior
to destroying the device.
[195.648s] [ext: omni.renderer-rtx-0.0.0] shutdown
[195.648s] [ext: omni.client-0.1.0] shutdown
[195.652s] [ext: omni.usd-0.1.8] shutdown
[195.661s] [ext: carb.audio-0.1.0] shutdown
[195.661s] [ext: omni.appwindow-0.1.0-rc1] shutdown
[195.671s] [ext: omni.assets-0.0.0] shutdown
[195.671s] [ext: omni.kit.commands-0.0.0] shutdown
[195.673s] [ext: omni.kit.pipapi-0.0.0] shutdown
[195.674s] [ext: omni.kit.test-0.0.0] shutdown
[195.676s] [ext: omni.kit.async_engine-0.0.0] shutdown
[195.678s] [ext: omni.kit.loop-default-0.1.0] shutdown
[195.678s] [ext: omni.stats-0.0.0] shutdown
[195.680s] [ext: omni.timeline-0.0.0] shutdown

The strange thing is, Once I have launched the extension, it lingers in memory. I try to make changes and even program, intyentional syntax errors. None of the changes are reflected.

Please advise what I may be doing incorrectly in the launching or when trying to update a pre-launched extension.

Thank you!

so yes as you mentioned the code does kit.exe gtc_demo.kit , not some python code we are running a kit app with dependency that setup other extensions it need

the best way to start is to read
https://docs.omniverse.nvidia.com/py/kit/index.html

in particular the
Extensions — Omniverse Kit 100.2 documentation section

there is an extension in the sdk omni.example.hello that is a good place to look at and start modifiing

can you share the content of
omni.fubar3.kit ?
also what is in
omni.fubar3 ?

First, as others mentioned, let me reiterate that I’m very excited about Omniverse and I’m looking forward to it growing and gaining traction. I understand it’s in beta.

However, I’d like to offer some feedback and suggestions to make it easier for developers to start hacking on it. As it stands right now, I find a lot of documentation to be either cryptic to skimpy on crucial details, and some of the introductory videos only mention basic stuff and quickly devolve into marketing material instead of giving some more in-depth information.

What I personally would like to see is some kind of in-depth tutorial:

  • explain how to setup VSCode and Kit integration to iterate on extensions and apps, point to the right python, libraries, debug them, etc.
  • explain the folder structure, where can I put my extensions, how the dependencies are found, how to troubleshoot that, etc.
  • start with simple bare bones app and progressively add more extensions to build up something like Create app from scratch, without getting bogged down on details
  • explain how to add a simple connector, can be a dummy
  • explain how to build a headless app
  • explain how to interact with nucleus programmatically
  • explain how to deploy the finished app and its dependencies

I understand that most of this stuff can be found by just looking at existing code, and that’s what most of us is probably doing right now, but having a cleaner tutorial would go a long ways to help us understand the nitty gritty details without just hacking on existing code.

Great work so far!

4 Likes

Sorry for the late reply we are deep into Release Period with 21.3 just coming out last week and update coming throughout the summer :)

Those are really great tutorial suggestion as we will endevour to do them for our 21.3 release that will come with a new Kit SDK version 102.1