Hanzo Studio - Visual AI Workflow Engine
Hanzo Studio is a visual node-based AI workflow engine for building, testing, and deploying AI pipelines. Drag-and-drop graph editor, Python custom nodes, and a REST API for running any workflow headlessly. Live at studio.hanzo.ai.
Overview
Hanzo Studio is a visual node-based AI workflow engine for building, testing, and deploying AI pipelines. You wire models, samplers, and tools together as a graph in the browser, run it, and inspect every intermediate output. The same graph runs headlessly through the REST API, so a workflow you prototyped visually ships as an endpoint without a rewrite. Live at studio.hanzo.ai.
Why Hanzo Studio?
- Visual workflows: Drag-and-drop AI pipeline builder
- Custom nodes: Extend with Python — any model, any tool
- API mode: Run workflows programmatically via REST API
- Self-hostable: Docker, K8s, or bare metal
- White-label: Full branding customization
Implementation
Python backend, browser-based graph editor. Repo: hanzoai/studio. Custom node packs are
dropped into custom_nodes/ and picked up on restart.
When to use
- Building visual AI workflows (image gen, text processing, pipelines)
- Creating custom AI node integrations
- Running node-graph workflows against Hanzo-hosted models
- Deploying visual AI tools for non-technical users
- White-labeling a visual AI platform
Hard requirements
- Python 3.10+ with pip
- Docker for containerized deployment
- Port 8188 available
Quick reference
| Item | Value |
|---|---|
| UI | https://studio.hanzo.ai |
| Port | 8188 |
| Image | ghcr.io/hanzoai/studio:latest |
| Repo | github.com/hanzoai/studio |
| Branch | main |
One-file quickstart
Docker
docker run -d --name hanzo-studio \
-p 8188:8188 \
--cpus=1 --memory=2g \
ghcr.io/hanzoai/studio:latest \
--cpu --listen 0.0.0.0API mode (run workflow)
curl -X POST http://localhost:8188/prompt \
-H "Content-Type: application/json" \
-d '{
"prompt": {
"1": {
"class_type": "KSampler",
"inputs": {
"seed": 42,
"steps": 20,
"cfg": 7.0,
"sampler_name": "euler",
"scheduler": "normal"
}
}
}
}'Core Concepts
Custom Node Development
# custom_nodes/hanzo_inference.py
class HanzoInference:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"prompt": ("STRING", {"multiline": True}),
"model": (["zen-70b", "zen-32b", "zen-14b"],),
"temperature": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 2.0}),
}
}
RETURN_TYPES = ("STRING",)
FUNCTION = "inference"
CATEGORY = "Hanzo AI"
def inference(self, prompt, model, temperature):
import requests
resp = requests.post("https://api.hanzo.ai/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['HANZO_API_KEY']}"},
json={"model": model, "messages": [{"role": "user", "content": prompt}],
"temperature": temperature})
return (resp.json()["choices"][0]["message"]["content"],)
NODE_CLASS_MAPPINGS = {"HanzoInference": HanzoInference}
NODE_DISPLAY_NAME_MAPPINGS = {"HanzoInference": "Hanzo AI Inference"}Kubernetes Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: hanzo-studio
spec:
replicas: 1
selector:
matchLabels:
app: hanzo-studio
template:
spec:
containers:
- name: studio
image: ghcr.io/hanzoai/studio:latest
args: ["--cpu", "--listen", "0.0.0.0"]
ports:
- containerPort: 8188
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: "1"
memory: 2GiWhite-Label
- Fork
hanzoai/studio - Edit
branding/patch_frontend.pywith your logo/colors - Run
python branding/patch_frontend.pyduring Docker build - Deploy with your domain
Troubleshooting
| Issue | Cause | Solution |
|---|---|---|
| Broken class names in UI | Used sed on minified JS | Use patch_frontend.py only |
| OOM on large workflows | Insufficient memory | Increase K8s memory limit |
| Custom nodes not loading | Wrong directory | Place in custom_nodes/ |
Related Skills
hanzo/hanzo-engine.md- Rust inference engine for backendshanzo/hanzo-flow.md- Alternative workflow builderhanzo/hanzo-chat.md- LLM API for custom nodes
How is this guide?