Skip to main content

ZBrush bridge

The ZBrush bridge integrates Maxon ZBrush — industry-standard digital sculpting — into Buril via the ZBrush 2026+ Python API. The bridge is shipped as a standalone Python MCP server (buril-zbrush-mcp) that Buril spawns and talks to.

Bridge namespace: zbrush_* — 75 tools.

Why ZBrush 2026

Maxon shipped a first-class Python API in ZBrush 2026. Earlier versions used ZScript, which is a stricter and less expressive scripting environment. Buril's bridge depends on the Python API, so ZBrush 2026 or newer is required. ZBrush 2023/2024 are not supported.

What it does

StepTools involved
1. Spawn ZBrush bridge (Python MCP)mcp_register_external (auto on first call)
2. Push base mesh to ZBrushzbrush_push_mesh, asset_export_obj
3. Sculpt operationszbrush_apply_brush, zbrush_dynamesh, zbrush_zremesh
4. Bake high → low normal/AO mapszbrush_bake_normal_map, zbrush_bake_ao_map
5. Render preview (multimodal feedback)zbrush_render_preview (returns PNG → LLM can see it)
6. Export low-poly + maps back to Unityzbrush_export_obj, zbrush_export_maps
7. Ingest as Unity assetmesh_import, material_create_from_pbr_maps

Install buril-zbrush-mcp

The bridge is a Python package. Install in a Python 3.11+ environment:

pip install git+https://github.com/Buril-ai/buril-zbrush-mcp.git

Or via PyPI (when stabilized):

pip install buril-zbrush-mcp

In Buril Unity, register the server:

Tools → Buril → MCP Hub → Register External → Type: zbrush

The Hub launches buril-zbrush-mcp as a subprocess, hands its stdio to the MCP dispatcher, and the zbrush_* family becomes available.

ZBrush plugin install

buril-zbrush-mcp needs ZBrush to listen on its Python socket. The plugin lives at:

~/.local/share/buril-zbrush-mcp/zbrush-plugin/

Copy the plugin folder into ZBrush's ZStartup/ZPlugs64/ directory and restart ZBrush. The plugin opens a TCP socket on 127.0.0.1:9878 (configurable via BURIL_ZBRUSH_PORT).

Confirm wiring:

zbrush_handshake_ping → ok

Multimodal sculpting

The bridge is unusual in that the LLM can see intermediate sculpt previews:

You: Make the jaw stronger and the brow more prominent. Show me.
[zbrush-sculptor] zbrush_apply_brush(target=jaw, intensity=0.3)
[zbrush-sculptor] zbrush_apply_brush(target=brow, intensity=0.4)
[zbrush-sculptor] zbrush_render_preview() → returns PNG
[zbrush-sculptor] (sees the preview as image input)
[zbrush-sculptor] "The jaw is now more angular but the brow shadow is harsh.
Reducing brow intensity to 0.25."
[zbrush-sculptor] zbrush_apply_brush(target=brow, intensity=0.25)
[zbrush-sculptor] zbrush_render_preview()

This requires a multimodal model (Claude Opus 4.7, GPT-4o, Gemini 2.5 Pro). Models without vision can still call all zbrush_* tools — they just can't see the rendered output.

A round-trip in chat

Push Assets/Models/Hero_LowPoly.fbx to ZBrush, sculpt heroic-fantasy detail,
bake 4K normal+AO, ingest back as Assets/Heroes/Hero_Sculpted.prefab.

The zbrush-sculptor specialist runs ~15 tools. Total time: 2-5 minutes depending on brush ops and bake resolution.

Retopology

ZBrush's ZRemesher is wrapped by zbrush_zremesh:

{
"tool": "zbrush_zremesh",
"input": {
"target_polycount": 8000,
"preserve_seams": true,
"freeze_subdiv_levels": true
}
}

The output is a clean quad mesh suitable for Unity, with original sculpted detail preserved in the baked normal map.

Common issues

SymptomFix
"ZBrush 2026+ required"You're on an older ZBrush. Upgrade or use the Daz3D bridge for retopologized assets.
MCP server won't spawnPython env mismatch. Use a clean virtualenv with Python 3.11+.
Renders are blankPlugin's render socket isn't bound. Restart ZBrush after the plugin install.
Bake produces dark UV seamsTexture padding too low. Bump padding in zbrush_bake_normal_map to 8 or 16 pixels.

Headless / CI

ZBrush does not support fully headless rendering. CI use is limited to running pre-recorded agent_team_* replay traces against the GUI — typically on a build agent with a virtual display.

Licensing reminder

ZBrush is published by Maxon. Buril does not bundle ZBrush. Your Maxon One subscription or perpetual license governs use. The buril-zbrush-mcp Python package is MIT-licensed — see Third-party licenses.

  • Daz3D bridge — for photoreal base meshes you might sculpt on top of.
  • AI 3D generation — for AI-generated base meshes (Hunyuan3D, Meshy, Tripo, Rodin).