DSH × Blender connects DeepSeek Harness to Blender so an agent can build, inspect, validate, and export 3D scenes in a real Blender session. The normal workflow is GUI-first: start Blender, connect the addon, and let the agent look, change, and verify. When no GUI is available, background headless jobs (blender_run(kind="headless")) still execute scripts and return rendered frames.
- GUI-first interactive modeling. The agent works against the Blender session you are looking at. It can inspect the scene, run Python in a persistent kernel, take a viewport or custom-angle frame, and iterate one step at a time.
- Headless jobs with visual feedback. If Blender has no GUI, the agent submits a background headless job (
blender_run(kind="headless")) and collects scripts, logs, and rendered frames from it. Live step-by-step interaction needs a GUI session; the job path exists so long or fresh-scene work still gets done. - Reference-image measurement. Measure silhouettes, holes, symmetry, readable features, and scale from a reference image before modeling. If no scale is known, the tools return pixel units instead of inventing millimeters.
- Parametric surfaces. Build reproducible surface meshes from sections (loft), a profile swept along a rail, or a four-sided patch; run continuity, curvature, self-intersection, and thickness checks; then export GLB. The same spec yields the same
spec_hashand vertices instead of hand-sculpted geometry. - Assembly audit and repair. Validate an assembly manifest, classify clashes, hidden overlaps, contacts, gaps, floating parts, and contained parts, apply safe repairs, gate the result, and export GLB, FBX, or OBJ with a manifest and merge ledger.
- Blockout and video-reference packs. Build low-poly blockouts from declarative parts, render orthographic and perspective reference views, and produce a turntable MP4 for video models such as Seedance.
- Visual acceptance and delivery gates. Compare renders against references from the same camera, report defects with crops and measurements, run defect-injection evaluation, and block delivery when the gate is not pass.
- Automation and long jobs.
blender_runsubmits render or headless work and returns a job id immediately; parameter searches and batch validation run inside the GUI session throughblender_op. Neither occupies the GUI for the whole run. - Native selection. Select objects or collections in Blender and send them into the current DSH draft.
- Works in dsh-TUI too. In dsh-TUI, a Blender selection is attached to your next message as a context chip; the footer shows the Blender channel state (connected / AI paused / rendering / jobs);
@mentions scene objects, materials, and collections; and/blender status|doctor|jobschecks the channel without going through the model. Each part needs the matching dsh-TUI seam and stays off when the seam is missing.
Before anything else: install the bundled addon first. Use the addon shipped in this repository: extension/dsh_blender_bridge.zip. It must be your only Blender-side agent bridge: do not install or run MCP for Blender, blender_mcp, or any other addon that serves Blender over its own socket. The 3.1 addon dials the Gateway and opens no inbound port, but a legacy MCP bridge still listens on 127.0.0.1:9876; two Blender-side agent bridges confuse the host. Unrelated addons (modeling, materials, rendering, asset libraries) are fine and are neither checked nor blocked. Install and enable this addon in Blender before the other steps. If the installation below does not work, first check that this exact addon is installed, enabled, and connected.
- DSH (DeepSeek Harness) installed and working.
- Node.js 24.9 or newer is needed only for source builds; installing from npm uses the runtime bundled with DSH. Node.js 24.9 is the minimum supported version; CI runs on Node 24.
- Blender 4.2 LTS is the tested version. Blender 4.x may work; Blender 5.x is not yet validated. GUI mode requires the bundled addon (install it first); headless mode only needs the Blender executable.
- Addon compatibility: the bundled addon is the only required addon and the only supported agent bridge. Other addons do not conflict; an old
MCP for Blender/blender_mcpis unsupported (it still listens on 127.0.0.1:9876) — disable it, no need to uninstall. - Optional: a DSH source checkout when rebuilding the host side; otherwise the build links against this repository's installed dependencies.
This is the supported installation path. It does not require git clone, npm ci, or npm run build.
-
Install the bundled addon first. Download
dsh_blender_bridge.zipfrom the latest GitHub Release, then in Blender openEdit > Preferences > Extensions > Install from Disk..., select the zip, enable DSH Blender Bridge, open theNpanel in the 3D view, and click Connect. -
Install the DSH plugin from npm. Choose the path for your DSH host:
-
DSH Web or DSH TUI: install into the profile you actually run:
dsh plugin --profile <profile> add [email protected]Then restart DSH in step 3.
-
DSH Desktop: open the Plugins page and install the bundle
[email protected]. DSH Desktop applies the bundle from the Plugins page and does not need a DSH restart.
-
-
Restart DSH (DSH Web and DSH TUI only). If you installed from the DSH Desktop Plugins page, skip this step.
-
Verify the installation. The only acceptance criterion for the GUI route is
doctorreturningkindequal took:curl -sS http://127.0.0.1:39877/doctorGUI route:
curl -sS http://127.0.0.1:39877/healthand/doctor;doctor.kindmust beok.Headless-only route (no addon):
blender_run(action="submit", kind="headless", script="print('ok')")followed bywait/collectmust return the job and its outputs.
The addon remains the only supported Blender-side agent bridge. Disable any other Blender-side agent bridge (a legacy MCP bridge still serves port 9876); ordinary modeling, material, rendering, and asset addons are unaffected.
Copy this prompt into an agent that can run commands:
First install and enable the bundled addon dsh_blender_bridge.zip
from the latest GitHub Release. If a bridge addon is already enabled
(MCP for Blender / blender_mcp, or anything else serving Blender on
), disable it; do not uninstall the user's other addons and
do not ask them to.
Then install the DSH × Blender plugin from npm for my DSH profile:
dsh plugin --profile <profile> add [email protected]
Read docs/AI-安装提示词.md first, follow it exactly,
and finish with the acceptance check: doctor must return kind=ok for the
GUI route, or a blender_run headless submit + wait must return outputs for the headless-only route.
Do not skip the check and do not claim success without it.
Fetch the full install prompt locally:
curl -fsSL https://raw.githubusercontent.com/sixtysevenlf/dsh-blender-plugin/main/docs/AI-安装提示词.md -o AI-安装提示词.md
Install the standalone modeling skill (only needed for hosts that do not load the plugin; DSH gets it bundled):
curl -fsSL https://raw.githubusercontent.com/sixtysevenlf/dsh-blender-plugin/main/skills/blender-modeling/install.sh | bash
-
Install the bundled addon first.
Download extension/dsh_blender_bridge.zip from the extension/ folder of this repository. In Blender, open Edit > Preferences > Extensions > Install from Disk..., select that zip, enable DSH Blender Bridge, open the N panel in the 3D view, and click Connect. The addon dials the DSH Gateway at 127.0.0.1:39877 after Connect; it does not listen on a port. Replacing or upgrading the addon requires a Blender restart: there is no hot reload, and a 3.0.x addon keeps its old 9876 listener until Blender exits. If you previously installed the single-file
dsh_blender_bridge.py, disable and remove it first: 3.1 installs only this Blender extension.Keep this addon as your only agent bridge. If
MCP for Blender/blender_mcp(or any other Blender-side agent bridge) is enabled, turn it off — uninstalling is not required. Your other addons can stay. If the rest of the installation does not work, check this step first. -
Developer path: clone the repository and build it.
lib/is a build artifact and is not committed, so a fresh clone must build once before use.npm run setup:devinstalls the npm and Python development dependencies (creating.venv); unless you are developing the plugin, use the npm install above.git clone https://github.com/sixtysevenlf/dsh-blender-plugin.git cd dsh-blender-plugin npm run setup:dev npm run build # Optional: DSH_CHECKOUT=/path/to/dsh-harness npm run build links DSH host packages -
Add the package to your DSH profile as a bundle. Link the checkout into the profile, then add the dependency and bundle entry to the profile package.json.
ln -s /absolute/path/to/dsh-blender-plugin <profile>/node_modules/dsh-blender-pluginProfile package.json:
{ "dependencies": { "dsh-blender-plugin": "link:/absolute/path/to/dsh-blender-plugin" }, "dsh": { "profile": { "bundles": ["dsh-blender-plugin"] } } }Validate the profile and restart DSH:
dsh --profile <profile> --dump-config -
Verify the installation.
GUI route:
curl -sS http://127.0.0.1:39877/health curl -sS http://127.0.0.1:39877/doctorThe only acceptance criterion for the GUI route is doctor returning kind equal to ok. If it does not, the plugin is not installed correctly.
Blender and the Gateway are started by the host: open Blender yourself, enable the addon, and click Connect. There is no model-facing launch tool in 3.1.
Headless-only route (no addon):
blender_run(action="submit", kind="headless", script="print('ok')") blender_run(action="wait", id="<jobId>")A returned job whose outputs include the script log means the headless path is working. The doctor bpy round-trip is expected to be unreachable in this mode.
The plugin exposes exactly 6 model-facing tools; all planning, audit, assembly, export, and evaluation operations live behind blender_op (34 families / 228 ops), so the surface stays small.
| Tool | What it gives you |
|---|---|
| blender_session | GUI session lifecycle and ownership: list/status/doctor, attach, claim/release, grant/revoke write scopes, pause state, presence, and action=txn snapshots/marks for rollback. Blender and the Gateway are host-managed. |
| blender_op | The capability catalog (op="catalog", 34 families / 228 ops) and the execution surface for modeling, audit, assembly, delivery, and evaluation; also `action=loop |
| blender_py | Runs Python in the attached GUI session with a persistent kernel; see=true returns a frame. GUI-only: there is no headless fallback. |
| blender_see | GUI capture only: `viewpoint=viewport |
| blender_run | The only job entry point: action=submit with `kind=render |
| blender_inspect | Lists the addon's executable read-only commands and runs one with command= + args=; removed write commands return a wrong_tool hint. |
Old 3.0 tool names are no longer registered; the migration table is in MIGRATIONS.md §0.3.
On Windows and Linux the Gateway can launch an isolated Blender GUI for the agent. It defaults to auto on Windows after the V0 acceptance and is opt-in preview on Linux. Missing prerequisites never start silently: blender_session start kind=virtual-gui returns stage=config with the exact command, and /blender doctor --fix (or the add-on preferences button) installs only the same plan. One-click is limited to xvfb on Ubuntu 22.04/24.04 and Debian 12 through pkexec; VirtualGL must come from its official repository, GPU drivers are detected but never installed, and unsupported platforms get the manual command. See configuration §5.7.
- Surface algorithm: skills/blender-modeling/references/曲面算法.md
- Step-by-step guide: docs/操作教程.md
- Configuration: docs/配置参考.md
- AI install prompt: docs/AI-安装提示词.md
- Deployment SOP: docs/部署SOP.md
- Third-party checklist: docs/给第三方的安装清单.md
- DSH upgrade compatibility: docs/DSH-更新适配.md
- Architecture: docs/architecture.md
- Modeling skill: skills/blender-modeling/
- Release notes: GitHub Releases and CHANGELOG.md
| Symptom | What to do |
|---|---|
| doctor does not return kind equal to ok | Check that Blender is running and the addon is connected. For the GUI route this is the only valid acceptance check. |
| No GUI is available | Live interaction needs a GUI session. Submit background work with blender_run(kind="headless") and collect it with action="wait"/collect; rendered frames come from the job outputs. |
| Another session is writing to the same scene | Claim a write scope with blender_session(action="grant", scopes=...), or attach a separate GUI session; parallel jobs are fine through blender_run. |
| An old MCP for Blender / blender_mcp addon is still enabled | Disable it (uninstalling is not required) and use the bundled DSH Blender Bridge addon; the 3.1 bridge dials the Gateway, but two Blender-side agent bridges still confuse the host; the legacy MCP bridge listens on 127.0.0.1:9876. |
| Images are generated but not attached | Update to the latest build; the Windows path fix is included. If it persists, open the returned path directly. |
| Followed the steps and it still does not work | Check the bundled addon first: only extension/dsh_blender_bridge.zip is supported, and it must be enabled and connected. |
- Node.js 24.9 is the minimum supported version; CI runs on Node 24.
- Development environment:
npm run setup:devafter cloning discovers Python 3.11+, creates or reuses.venv, installsrequirements-dev.txt,requirements-typecheck.txt, and npm dependencies (npm ci --legacy-peer-depsonly whennode_modulesis missing).npm run setup:dev -- --checkverifies without writing;npm run setup:dev -- --forcerecreates.venv..venvandnode_modulesare never committed. - Python tests need a virtualenv with
pytest(created bynpm run setup:dev). Tests auto-detect.venv; pointPYTHONat another interpreter when needed (PYTHONIOENCODING=utf-8andPYTHONUTF8=1on Windows); tests import the TypeScript sources directly. - The canonical command table — build, typecheck, test, lint, pack — is
AGENTS.md§1.lib/is rebuilt fromruntime/andsrc/; never hand-edit it. - Test layers, fixtures, and per-layer commands:
tests/README.md. - Contribution workflow:
CONTRIBUTING.md·docs/zh/CONTRIBUTING.md. - Bundled skill source:
skills/blender-modeling/.
If this project is useful to you, you can support its development on Afdian (爱发电): https://afdian.com/a/sixtysevenlf
The DSH host plugin is BSD-3-Clause (see LICENSE). The bundled Blender extension under
extension/ is GPL-3.0-or-later (see extension/LICENSE) and contains
MIT-licensed code derived from ahujasid/blender-mcp, whose
copyright and MIT notice are preserved in extension/NOTICE. The bundled modeling skill is MIT; see
skills/blender-modeling/LICENSE and NOTICE.md. Blender is a trademark of the Blender Foundation.