Skip to content
/ nozyio Public

workflow orchestration UI and nodes editor for your own python codebase

Notifications You must be signed in to change notification settings

oozzy77/nozyio

Repository files navigation

NozyIO

Python AI / ML pipeline visualization tool. Automatically discover your functions as pipeline nodes. Fastest way to demo your python program for customers to tweak and expand. Perfect for AI/ML engineers and designers to collaborate, turning ML components into UI nodes for easy tweaking.

It can also be used as a visual scripting tool for python.

if you are interested in colaboration, email [email protected]

demo: https://youtu.be/L_6kY-fhIcU

  • Automatically discover python functions as nodes with parameters typing
  • Visually pick input files, tune parameters, and preview any image input/output from the GUI
  • Save pipeline graph as json and switch between pipelines quickly
  • Export the pipeline graph as Python code
378056651-d6c5f930-cedc-426a-aaa8-11cdb92c6cd4-min

Install

In your python project root:

pip install nozyio

To start the nozyio UI:

nozyio

Pypi: https://pypi.org/project/nozyio/

Usage

Super easy node define (just write a function with typing) For example:

from PIL.Image import Image

def resize_image(
    image: Image,
    width: int = 512,
    height: int = 768,
    method: Literal["stretch", "fit", "crop"],
    interpolation: str
) -> Image:
    # ...some code here...
    return image.resize((width, height), interp_method)

resize_image.NOZY_NODE_DEF = {
    "node_title": "Resize Image",
}

👇This function will be rendered as below. Args default values are populated as the input box defaults

Screenshot 2024-10-19 at 9 22 37 PM

👇Export workflow to code, preview any image input/output

001-workflow and code

👇Automatic nodes discovery

003 - automatic scan nodes

👇Double-click canvas to search any functions in your project and add nodes

Screenshot 2024-10-19 at 10 42 41 PM

Node input types

Nozyio will automatically scan your python functions and convert them to nodes. You can define the input, output types by adding type annotations to the function parameters and return type. Params with no type annotation will become "any" type.

Python Type UI Element HTML element
int number input box <input type="number">
str text input box <textfield type="text">
Literal["abc", "xyz"] dropdown input box <select>
PIL.Image.Image image preview <img>

Input widgets - file picker

You can also add custom UI widgets to the input parameters by adding a widget field to the input definition. In below example, we use server_file_picker widget to let user select an image file from the files on the server:

from PIL import Image.Image
def load_image(image_path: str) -> Image.Image:
    return Image.open(image_path)
load_image.NOZY_NODE_DEF = {
    "node_title": "Load Image",
    "description": "Load image from path",
    "inputs": {
        "image_path": {
            "type": "filepath",
            "widget": {
                'type': 'server_file_picker',
                'options': {
                    'extensions': ['.png', '.jpg', '.jpeg', '.bmp', '.tiff', '.webp']
                }
            },
            "hide_handle": True,
            "description": "Path to image"
        }
    },
    "outputs": [{"name": "image", "type": "Image", "description": "Loaded image"}]
}
Screenshot 2024-10-19 at 9 37 21 PM Screenshot 2024-10-29 at 2 05 35 AM

Future Plans

  • Visualize your python code to graph flow
  • AI image nodes packages

Screenshots

👇 Install community pacakges

007 install-community-packages

👇 Switch workflows quickly

005 workflow_switcher

Development

install pip package in editable mode

pip install -e .

start nozyio server

nozyio --allow-cors

Start web dev server with hot reload

cd nozyio/web && npm run dev

Go to the web server url

Build and publish to pypi

if you haven't installed twine: python -m pip install --upgrade twine if you haven't installed build: python -m pip install --upgrade build

To build and publish to pypi:

chmod +x build.sh

./build.sh

Credits

This project is inspired by ComfyUI. Lots of code are referenced from ComfyUI (https://github.com/comfyanonymous/ComfyUI) Sincerely thanks to the contributors of ComfyUI!

About

workflow orchestration UI and nodes editor for your own python codebase

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published