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
In your python project root:
pip install nozyio
To start the nozyio UI:
nozyio
Pypi: https://pypi.org/project/nozyio/
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
👇Export workflow to code, preview any image input/output
👇Automatic nodes discovery
👇Double-click canvas to search any functions in your project and add nodes
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> |
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"}]
}
- Visualize your python code to graph flow
- AI image nodes packages
👇 Install community pacakges
👇 Switch workflows quickly
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
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
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!