ZOPs
ZOPs (Zero Operators) run generative models inside TouchDesigner. Image and video ZOPs output a TOP. Text ZOPs output a DAT.

Above: a chat ZOP (openai/gpt-5.5) wired into an imageAi ZOP (nano-banana-2/text-to-image-fast). The chat ZOP wrote an image-prompt; its output (a DAT) feeds the image ZOP, which produced a 2048×2048 PNG. Connect any ZOP's output into another ZOP's input the same way you wire any TD operator.
Examples
Example patches in the Hub: twozero.ai/hub/repo_ffac94d9….
Top bar
Left to right:
family/model. Click to swap the model — opens the ZOPs panel scoped to this ZOP; picking a new model replaces this one's family/model in place.~$X.XX — estimated price for the next Run based on the current model.textDAT with it into the current network — useful for archiving prompts or feeding them into other ops.generatedImage TOP for image/video, generated textDAT for text) as a new operator at the cursor — wire it into the rest of your patch as a static, non-regenerating op.Chat ZOPs have a shorter toolbar: no Post / Like buttons (those apply only to image and video).
Body
Image and video ZOPs render the generated frame. Text ZOPs show the input prompt on top and the generated response below. Image ZOPs also reserve a narrow column on the left for input previews — wired-in TOPs are shown there as thumbnails. On error, a clickable overlay covers the body (e.g. "Add credits" → opens billing, "twozero.ai required" → opens the install page).
Bottom bar
After a successful run: actual charge in USD on the left, output resolution in the middle, output filename on the right. Image and video ZOPs show all three; text ZOPs show only the cost.
Parameters
Right-click the ZOP, or click the gear button in the top bar — opens the full parameter dialog. Common to every ZOP:
- Run / Stop / Reset — pulse parameters; same as clicking the status dot (Run/Stop) or RMB → Reset.
- Prompt — the input text. Most ZOPs also accept a
promptDAT wired into the input, which takes precedence over par.Prompt when connected. - Family / Model — set by the ZOPs panel when you pick a model. You can also override manually.
- Autorunnext — when on, after a successful Run pulses Run on every ZOP wired to this one's output. Daisy-chain ZOPs to build live pipelines (output of A triggers B, B triggers C, ...).
- Callbackdat — optional DAT with
onSuccess(comp, result)/onError(comp, error)handlers for custom post-run logic.
Chat ZOPs add:
- Runonprompt — when on, re-runs automatically every time the prompt input (
par.Promptor the wired prompt DAT) changes.
Image and video ZOPs add:
- Resolutionpreset — pick an output size from the model's allowed list. Aspect, Resolution1, Resolution2 override manually.
- Seed + Randseed — control determinism. With Randseed on, every Run uses a new random seed.
- Autoselectmodel — when the family changes, auto-picks the family's default model instead of leaving the previous Model value.
- Duration — for video ZOPs, output length in seconds.
Opening the panel
Open the ZOPs panel from the tool list, or via the hotkey assigned in Settings.
Selecting a model
Browse model families and individual variants. [ENTER] or LMB on a family creates a ZOP with the family-default model auto-selected. [ENTER] or LMB on a specific variant (listed indented under its family) pins that exact model. Families with one model are rendered flat.
Inspecting a model
RMB on any row opens model metadata and pricing.
Cost and balance
Generations are pay-per-use. Estimated price per model is shown in the ZOPs panel next to each row; the actual charge appears in the status bar after a run completes. Failed generations are not charged. Top up your balance at app.twozero.ai/billing.
Notes
Requires a TWOZERO account with balance. Models are sorted by usage history. ZOPs auto-update to the latest template version on next panel open. The model list is fetched live from twozero.ai on first panel open and cached for the session.