dsh-plugin-blender:在 DSH 里无头渲染 3D 模型并在工作台预览

前言

在 DeepSeek Harness(DSH)里让智能体处理 3D 资产时,常见做法是手动打开 Blender 导出图片,或把模型路径丢给模型却看不到几何体。对话侧缺少可复现的渲染结果,工作台也缺少统一的模型浏览入口。

下面介绍社区插件 dsh-plugin-blender(维护者 s1lverex):在 Host 侧通过 Blender 无头渲染与格式转换,向模型返回 PNG 附件;在 Web 工作台右侧边栏提供基于 three.js 的 3D Viewer 面板,用于加载已导出模型并查看渲染条带。插件分类为客户端(含 Web 侧栏注入),当前 GitHub 星标为 0,许可证 MIT,版本 0.1.0。

这是什么

dsh-plugin-blender 是面向 DSH Web Profile 的 Cordis 插件包:Host 半部提供三个模型工具与两条 HTTP 路由;Client 半部注册一个右侧边栏标签页。Host 仅依赖 Node 内置模块,面板为预构建 bundle(lib/client.js),安装时无需再编译客户端(从 GitHub 一键安装时)。

核心功能

三个模型工具

工具 作用
blender_status 报告当前使用的 Blender 可执行文件、版本、工作目录,以及面板中列出的模型/渲染数量。
blender_render 将 3D 文件渲染为 PNG 并作为附件返回给模型;.blend 保留自有相机与灯光,导入格式会自动取景。
blender_export_glb 将支持的文件转为 .glb 并发布到 Viewer 面板。

工作台 3D Viewer

右侧边栏标签 blender-viewer-tab(也可在边栏 + 页手动打开「3D Viewer」):three.js 画布支持 orbit/zoom,带模型选择器,以及 Blender 渲染图条带(点击可全屏查看)。

面板可直接加载 .glb、.gltf、.obj、.stl、.ply。.blend、.fbx、.dae、.usd、.abc 等需先经 blender_export_glb 转换,面板会标记这类条目。

HTTP 路由与 Cordis 服务

  • GET /blender/models:列出面板可展示的条目。
  • GET /blender/file/<id>:按已扫描注册 id 提供文件;请求只能指定 id,不能传路径,避免读到扫描目录之外。

路由直接注册在 Web 服务器上,不带 session token。默认仅绑定 loopback 时仅本机可访问;若服务绑定 0.0.0.0,网络上可达这些列表文件——此类部署应设置 enableViewer: false。

Cordis 暴露 ctx.blender:detect()、version()、listModels()、render(request, signal)、convertToGlb(request, signal)。

渲染与驱动方式

Blender 以无头方式调用:

blender -b --factory-startup -noaudio --python <step> -- <json>

各步骤 stdout 打印一行 DSH_BLENDER_RESULT {json},由 Host 解析。默认渲染引擎为 Cycles(CPU),适合无显示器环境;EEVEE、Workbench 可用但需 GPU。README 称简单模型 960×720、32 samples 的 Cycles 渲染通常在一秒内完成。

环境与依赖

  • DeepSeek Harness 0.1.5 或兼容的 0.1.x(需 Web Profile)
  • Node.js 20+
  • Blender 3.6+(推荐 4.x);无头即可,无需显示器

Blender 在插件加载时可缺省:未安装时工具仍会注册并以可操作的错误信息失败;若 models 目录中已有 .glb,面板仍可列出。

Blender 检测顺序:blenderPath 配置 → 环境变量 $BLENDER_PATH → PATH 上的 blender → 常见安装路径(Linux /usr/bin、/snap/bin 等;macOS Blender.app;Windows Program Files)。blender_status 会报告最终选用的路径。

安装与启用

Host 会从 Profile 依赖闭包解析 @deepseek-ai/dsh-tools,插件包必须作为真实目录存在于该闭包内;符号链接可能导致 realpath 落在闭包外而破坏导入。

从 GitHub 安装(推荐)

仓库在 package.json 中声明 dsh.bundle 与 cordis.patch.yml,安装后自动合成插件行;lib/client.js 已提交,无需本地 build。

dsh plugin --profile web add github:s1lverex/dsh-plugin-blender

安装 bundle 会改变目录树,需重启 dsh web(实时 patch 监视器不覆盖 bundle 安装)。目标机器需已安装 Blender,其余由包内提供。

本地 checkout(开发者)

SRC=/path/to/dsh-plugin-blender
cd "$SRC" && npm install && npm run build
npm run deploy

并在 $DSH_HOME/profiles/web/cordis.patch.yml 增加:

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

Web Profile 默认 patchReload: live,增行后通常无需重启;若之后改 Host 侧 lib/,需重新 npm run deploy 并重启 dsh web。

会话存在后标签页会自动打开一次。

配置项

Cordis 插件行至少需 id 与 name;下列键均可选:

键 类型 默认 含义
blenderPath string '' 显式 Blender 可执行路径;空则自动检测。
workDir string $DSH_HOME/blender 存放 models/ 与 renders/,加载时创建。
modelDirs string[] [] 额外扫描目录(最深 4 层,最多 400 个文件)。
timeoutMs number 300000 单次渲染超时,到期终止 Blender 进程。
defaultWidth number 960 默认渲染宽度。
defaultHeight number 720 默认渲染高度。
defaultSamples number 32 默认 Cycles samples。
defaultEngine string cycles cycles、eevee 或 workbench。
enableViewer boolean true 是否注册 Viewer HTTP 路由。

典型用法

查看环境与清单

智能体可调用 blender_status,确认 Blender 版本、工作目录与面板列表规模,再决定渲染或转换。

渲染 PNG

blender_render 主要参数:

参数 含义
file 待渲染的模型或 .blend。
output 输出路径或文件名;默认写入 workDir/renders 下带时间戳的 PNG。
width、height、samples、engine 覆盖本次渲染的默认分辨率、采样与引擎。
frame 动画 .blend 的帧号。
camera .blend 内相机名称。
transparent 是否透明背景(Alpha)。

PNG 保存后会作为附件发布,并出现在 Viewer 渲染条带中,便于多模态模型直接看到画面。

导出 GLB 供面板浏览

blender_export_glb 接受 file 与可选 name,写入 workDir/models/<name>.glb,导出 Y-up,并去掉相机与灯光,返回几何统计信息。非面板原生格式的资产应走此工具后再在边栏查看。

适用场景与注意

适合:需要在 DSH 对话中让 Agent 无头出图、统一转换 GLB,并在 Web 工作台侧边预览模型与渲染历史的 3D / 技术美术流程。

注意:

  1. 插件以当前 dsh 进程权限运行;安装前请阅读源码与 MIT 许可证,确认 Blender 子进程与 HTTP 路由符合你的安全策略。
  2. 非 loopback 暴露 Web 服务时,务必评估 enableViewer 与 modelDirs 扫描范围。
  3. SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;插件由社区维护,版本与行为以 GitHub README 为准。

结尾

dsh-plugin-blender 把 Blender 无头管线与 DSH 工具、Workbench 3D Viewer 接在一起:Agent 侧可渲染、可转 GLB、可回传图像;人可在同一会话边栏里 orbit 查看模型与渲染结果。安装自 GitHub 时使用官方命令 dsh plugin --profile web add github:s1lverex/dsh-plugin-blender,并重启 dsh web。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜