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
| Step | Tools involved |
|---|---|
| 1. Spawn ZBrush bridge (Python MCP) | mcp_register_external (auto on first call) |
| 2. Push base mesh to ZBrush | zbrush_push_mesh, asset_export_obj |
| 3. Sculpt operations | zbrush_apply_brush, zbrush_dynamesh, zbrush_zremesh |
| 4. Bake high → low normal/AO maps | zbrush_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 Unity | zbrush_export_obj, zbrush_export_maps |
| 7. Ingest as Unity asset | mesh_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
| Symptom | Fix |
|---|---|
| "ZBrush 2026+ required" | You're on an older ZBrush. Upgrade or use the Daz3D bridge for retopologized assets. |
| MCP server won't spawn | Python env mismatch. Use a clean virtualenv with Python 3.11+. |
| Renders are blank | Plugin's render socket isn't bound. Restart ZBrush after the plugin install. |
| Bake produces dark UV seams | Texture 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.
Read next
- Daz3D bridge — for photoreal base meshes you might sculpt on top of.
- AI 3D generation — for AI-generated base meshes (Hunyuan3D, Meshy, Tripo, Rodin).