DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Plugin Blender — DeepSeek Harness 插件(DSH Plugin)
← Plugins
P

dsh-plugin-blender

Plugin Blender

Blender for DeepSeek Harness:用于 3D 模型的无头渲染/转换工具,以及工作台侧边栏中的 three.js 查看器面板

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:s1lverex/dsh-plugin-blender#6d69d9a32bcf50e3768279e355b0e0203c44db3f
README兼容性版本

兼容性与来源证明

Plugin Blender 以 dsh-plugin-blender 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/25

版本

0.1.0stable
2026/9/25

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/25
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Ssh@linxin666/dsh-sshdsh Web GUI 的远程 SSH 操作:主机配置存储(~/.dsh/dsh-ssh.json,可从 ~/.ssh/config 导入)、支持跳板主机的持久化 ssh2 连接池、exec / PTY Web 终端 / SFTP 传输 / 本地端口转发隧道 / 集群执行Doctor@linxin666/dsh-doctorDSH 配置档案的事务性救援模式,配备受监督的启动器、隔离的恢复容器、确定性修复、健康监控以及本地 Web 恢复控制台DSCODE@toddzheng024/dscode-bundle完整的 DeepSeek 编码代理,支持持久化 shell、Ultra 协作和自动权限审查。Automation@michengai/dsh-automationDSH Automation — 在隔离的 DSH Session 中按计划执行和管理编码任务

README

dsh-plugin-blender

Blender for DeepSeek Harness: the agent renders 3D models headlessly through Blender, and the workbench gets a 3D Viewer panel in the right sidebar that loads the exported models with three.js and shows the rendered images.

Host half: three model tools plus two HTTP routes. Client half: one sidebar tab. No runtime dependencies — the host uses node builtins, and the panel is one prebuilt bundle.


What it adds

Three model tools.

ToolPurpose
blender_statusThe executable in use, its version, the work directory, and how many models/renders the panel lists.
blender_renderRender a 3D file to a PNG and return the image to the model. .blend files keep their own camera and lights; imported files are framed automatically.
blender_export_glbConvert any supported file to .glb and publish it to the viewer panel.

One sidebar tab. blender-viewer-tab in the right sidebar: a three.js canvas with orbit/zoom controls, a model picker, and a strip of Blender's renders (click one to view it full-panel).

Two HTTP routes. GET /blender/models lists what the panel may show; GET /blender/file/<id> serves an already-scanned file. A request can only name an id, never a path, so the routes cannot read outside the scanned directories. They are registered on the web server directly, so they carry no session token: with the default loopback bind only this machine can reach them, but a server bound to 0.0.0.0 exposes the listed files to that network — set enableViewer: false in that deployment.

One Cordis service. ctx.blender exposes detect(), version(), listModels(), render(request, signal) and convertToGlb(request, signal).


Architecture

┌─ Host (Node) ──────────────────────────────────────────────┐
│  lib/index.js     Cordis plugin: name/inject/apply, routes │
│  lib/tools.js     the three defineTool definitions         │
│  lib/blender.js   detection, subprocess runner, registry   │
│  lib/scripts/render.py       bpy: import, frame, render    │
│  lib/scripts/convert_glb.py  bpy: import, export GLB       │
└──────────────────────────┬─────────────────────────────────┘
                           │  /blender/models, /blender/file/<id>
┌──────────────────────────┴─────────────────────────────────┐
│  src/client.jsx   tab type + slot registrations            │
│  lib/client.js    built bundle (three.js inside)           │
└─ Browser (web shell) ──────────────────────────────────────┘

Blender is driven as blender -b --factory-startup -noaudio --python <step> -- <json>; each step prints one DSH_BLENDER_RESULT {json} line, which the host parses. Rendering defaults to Cycles on CPU, the reliable headless engine; EEVEE and Workbench are available but need a GPU.

Cycles renders on CPU, so an unattended blender_render works on a headless host. A 960x720x32-sample render of a simple model takes well under a second.

The panel loads .glb, .gltf, .obj, .stl and .ply directly. Everything else (.blend, .fbx, .dae, .usd, .abc) must go through blender_export_glb first, and the panel marks those entries.


Requirements

  • DeepSeek Harness 0.1.5 or a compatible 0.1.x with the web profile
  • Node.js 20 or newer
  • Blender 3.6+ (4.x recommended) — headless works, no display needed

Blender is optional at load time: without it, the tools still register and fail with an actionable message, and the panel still lists any .glb files that are already in the models directory.

Installation

The host resolves @deepseek-ai/dsh-tools from the profile dependency closure, so the package must live there as a real directory; a symlink would move its realpath out of the closure and break that import.

From GitHub (one command, any machine)

package.json declares dsh.bundle with cordis.patch.yml, so the repository installs as a profile bundle and the plugin row is composed automatically. lib/client.js is committed prebuilt, so nothing is compiled on install.

dsh plugin --profile web add github:<owner>/dsh-plugin-blender

Then restart dsh web (a bundle install changes the tree, which the live patch watcher does not cover). Blender must be installed on that machine; everything else is in the package.

From a local checkout

SRC=/path/to/dsh-plugin-blender
cd "$SRC" && npm install && npm run build     # produces lib/client.js
npm run deploy                                 # copies lib/ into $DSH_HOME/profiles/node_modules/dsh-plugin-blender

Then add one row to $DSH_HOME/profiles/web/cordis.patch.yml:

- insert:
    - id: blender
      name: 'dsh-plugin-blender'

The shipped web profile uses patchReload: live, so the row is picked up without a restart. Editing a plugin's lib/ afterwards is not watched — re-run npm run deploy and restart dsh web after changing host code.

The tab opens itself once a session exists. It can also be opened by hand from the right sidebar's + page ("3D Viewer").

Publishing (maintainers)

GITHUB_TOKEN=... npm run publish:github    # creates the repo, sets the dsh-plugin topic, pushes
GITHUB_TOKEN=... npm run publish:market    # forks the registry and opens the entry PR

The token is a classic PAT with repo (or public_repo) and read:user. The market lists one YAML entry per plugin (data/plugins/<owner>__<repo>.yml) and requires the repo to declare dsh.bundle and to be at least one day old, so run the market step the day after the first push.

Blender detection

In order: the blenderPath config, $BLENDER_PATH, blender on PATH, then common installs (/usr/bin, /snap/bin, /opt, ~/.local/share/blender*, ~/.local/bin, macOS Blender.app, Windows Program Files). blender_status reports which one won.


Configuration reference

KeyTypeDefaultMeaning
blenderPathstring''Explicit Blender executable. Empty means auto-detect.
workDirstring$DSH_HOME/blenderHolds models/ and renders/. Created on load.
modelDirsstring[][]Extra directories to list and serve in the panel (scanned 4 levels deep, 400 files max).
timeoutMsnumber300000Per-render budget; the Blender process is killed when it expires.
defaultWidthnumber960Default render width.
defaultHeightnumber720Default render height.
defaultSamplesnumber32Default Cycles samples.
defaultEnginestringcyclescycles, eevee or workbench.
enableViewerbooleantrueRegister the viewer routes.

Every key is optional; a row needs only id and name.


Tools

blender_render

ArgumentMeaning
fileModel or .blend to render.
outputOutput path or file name; defaults to a timestamped PNG in workDir/renders.
width, height, samples, engineOverride the defaults for this render.
frameAnimation frame for an animated .blend.
cameraCamera name inside the .blend to render from.
transparentRender with an alpha background.

A .blend renders through its own camera when it has one; otherwise (and for every imported format) the camera is placed to frame the geometry, and a key + fill light pair is added only when the scene has no lights. The PNG is saved, published as an attachment so a multimodal model actually receives it, and listed in the panel.

blender_export_glb

file plus an optional name; writes workDir/models/<name>.glb, strips cameras and lights, exports Y-up, and returns the geometry statistics.


Verification

npm run build     # lib/client.js
npm run verify    # structural checks on both halves
npm run client    # loads the bundle like the shell does, activates it, renders the panel
npm run smoke     # real headless Blender: convert, render, .blend render, HTTP routes
npm run viewer    # Chromium screenshot of the panel showing a Blender-exported model

npm run smoke writes a cube .obj and a .blend to a temp directory, converts and renders both, asserts the GLB magic and PNG signature, then serves the captured routes on a real socket and checks the listing, the content types, an unknown id (404) and a path-traversal attempt (404). npm run client evaluates lib/client.js through a stub module table, runs apply() against a stub shell context and server-renders the registered tab. npm run viewer bundles the real panel component for a standalone page, loads it in Chromium and screenshots the three.js canvas (written to test/viewer-shot.png). The Blender-dependent scripts exit 0 with a skip notice when Blender or Playwright is missing.


Troubleshooting

"Blender was not found" — install Blender, put it on PATH, or set blenderPath in the row config; blender_status echoes the path that was tried.

The panel shows "no models yet" — nothing has been exported. Ask the agent to run blender_export_glb, or drop a .glb into $DSH_HOME/blender/models.

The tab does not appear — confirm lib/client.js exists and was built, that the row's name matches the package name exactly, and that the deployed copy in the closure is the one you edited (npm run deploy). Host lib/ changes need a dsh web restart.

A model renders black or empty — a Cycles render of a file with no geometry fails with "the scene contains no mesh geometry to render". For imported files the auto-camera is computed from mesh bounds, so a file with only cameras, lights or empties cannot be framed.

Renders are slow — lower samples (8–16 is enough to judge a shape), lower the resolution, or use engine: workbench when a GPU is present.

License

MIT