🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

着色器工作台 Moolight/dsh-shader-workbench

DeepSeek Harness
Moolight24 天前有提交已提供中文文档扫描:含敏感能力

拖节点搭 GLSL 并实时预览导出材质

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/11 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Moolight/dsh-shader-workbench
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 24 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 89 处,展示前 41 条)
  • 写入本地文件
    host/index.js:83
    appendFileSync(
  • 读取本地文件
    host/index.js:593
    return { ...overview, exists: existsSync(overview.root) };
  • 写入本地文件
    host/workspace.js:154
    await mkdir(full, { recursive: true });
  • 写入本地文件
    host/workspace.js:184
    await mkdir(dirname(full), { recursive: true });
  • 写入本地文件
    host/workspace.js:185
    await writeFile(full, content);
  • 读取本地文件
    host/workspace.js:202
    return JSON.parse(await readFile(full, 'utf8'));
  • 读取本地文件
    host/workspace.js:222
    if (!existsSync(dir)) return [];
  • 读取本地文件
    host/workspace.js:234
    entries = await readdir(base, { withFileTypes: true });
  • 读取本地文件
    host/workspace.js:349
    if (!existsSync(dir)) return [];
  • 读取本地文件
    host/workspace.js:350
    const entries = await readdir(dir, { withFileTypes: true });
  • 读取本地文件
    host/workspace.js:395
    if (!existsSync(texDir)) return [];
  • 写入本地文件
    host/workspace.js:518
    if (existsSync(src)) await copyFile(src, join(target, file));
  • 写入本地文件
    host/workspace.js:560
    if (existsSync(src)) await copyFile(src, join(dir, file));
  • 写入本地文件
    host/workspace.js:579
    await rename(dir, target);
  • 读取本地文件
    host/routes.js:400
    data: await readFile(file.full),
  • 读取本地文件
    host/routes.js:595
    if (!existsSync(full) || !statSync(full).isFile()) {
  • 读取本地文件
    host/routes.js:595
    if (!existsSync(full) || !statSync(full).isFile()) {
  • 读取本地文件
    host/routes.js:610
    const info = statSync(full);
  • 读取本地文件
    host/routes.js:629
    createReadStream(full, { start, end }).pipe(res);
  • 读取本地文件
    host/routes.js:639
    createReadStream(full).pipe(res);
  • 读取本地文件
    host/settings.js:50
    parsed = JSON.parse(readFileSync(settingsPath(), 'utf8'));
  • 写入本地文件
    host/settings.js:95
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    host/settings.js:98
    writeFileSync(tmp, `${JSON.stringify(next, null, 2)}\n`, 'utf8');
  • 写入本地文件
    host/settings.js:99
    renameSync(tmp, file);
  • 读取本地文件
    host/node-library.js:47
    names = readdirSync(dir).filter((name) => name.toLowerCase().endsWith('.json')).sort();
  • 读取本地文件
    host/node-library.js:54
    const info = statSync(join(dir, name));
  • 读取本地文件
    host/node-library.js:84
    entries.push({ name, json: JSON.parse(readFileSync(join(dir, name), 'utf8')) });
  • 读取本地文件
    host/asset-loader.js:40
    if (!existsSync(dir)) throw new Error(`材质不存在:${project}/${material}`);
  • 读取本地文件
    host/asset-loader.js:93
    if (existsSync(texDir)) await scanDir(texDir, 'textures', out);
  • 读取本地文件
    host/asset-loader.js:106
    entries = await readdir(absDir, { withFileTypes: true });
  • 读取本地文件
    host/asset-loader.js:144
    if (!existsSync(dir)) throw new Error(`材质不存在:${project}/${material}`);
  • 读取本地文件
    host/asset-loader.js:147
    if (!existsSync(src)) throw new Error(`源文件不存在:${src}`);
  • 读取本地文件
    host/asset-loader.js:148
    if (!statSync(src).isFile()) throw new Error(`源路径不是文件:${src}`);
  • 写入本地文件
    host/asset-loader.js:174
    await copyFile(src, join(targetDir, fileName));
  • 读取本地文件
    host/examples.js:45
    if (!existsSync(root)) return [];
  • 读取本地文件
    host/examples.js:46
    const entries = await readdir(root, { withFileTypes: true });
  • 读取本地文件
    host/examples.js:53
    project = JSON.parse(await readFile(join(dir, 'project.json'), 'utf8'));
  • 读取本地文件
    host/examples.js:59
    const files = await readdir(join(dir, 'materials'), { withFileTypes: true });
  • 读取本地文件
    host/examples.js:88
    if (!existsSync(dir)) return out;
  • 读取本地文件
    host/examples.js:91
    const files = await readdir(join(dir, sub), { withFileTypes: true });
  • 写入本地文件
    host/examples.js:151
    await mkdir(to, { recursive: true });
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 拖节点搭建GLSL
  • 实时预览着色器
  • 导出材质资源

节点式 GLSL 工作台(DSH / DeepSeek Harness 插件):拖节点出图 → Shadertoy 兼容实时预览 → 热重载 → 本地材质资源管理。零第三方运行时依赖,7 个自带示例,104 个用例。

README

由 DeepSeek 最新模型翻译生成
dsh-shader-workbench 简体中文 · English DSH Shader 工作台:节点式搭 GLSL → Shadertoy 兼容实时预览 → 热重载 → 本地材质资源管理。 装在 DSH(DeepSeek Harness) 里是一个侧栏入口 + 一整块工作台面板,同时给智能体开放 9 个工具,让它能直接建项目、搭节点图、编译、导出、打快照。 - 零第三方运行时依赖:没有构建链,全是手写 ESM JavaScript,装上去就是一个目录。 - 节点图 = 程序:内置节点库只放 55 个通用件;效果专用逻辑一律拆成图上能展开编辑的普通节点,不做黑盒。 - 重复是语言结构:组的「重复次数」> 1 就是循环,循环体只写一遍(IFS 隧道 99 步、贝塞尔 24 段都靠它,图和着色器小两个数量级)。 - 可扩展、免重启:用户节点丢个 JSON 进 <工作区>/library/nodes/ 就能加;节点分类和项目名都支持多级。 - 面板和智能体共用一套工具与工作区:存储位置能在面板里改,两边看到的永远是同一份数据。 - 104 个用例:含真机 WebGL2 编译校验、GPU 像素回读、真鼠标拖拽交互、1080p 性能度量。
展开完整文档(README 剩余 1 节)
dsh-shader-workbench

简体中文 · English

DSH Shader 工作台:节点式搭 GLSL → Shadertoy 兼容实时预览 → 热重载 → 本地材质资源管理。
装在 DSH(DeepSeek Harness) 里是一个侧栏入口 + 一整块工作台面板,同时给智能体开放 9 个工具,让它能直接建项目、搭节点图、编译、导出、打快照。

- 零第三方运行时依赖:没有构建链,全是手写 ESM JavaScript,装上去就是一个目录。
- 节点图 = 程序:内置节点库只放 55 个通用件;效果专用逻辑一律拆成图上能展开编辑的普通节点,不做黑盒。
- 重复是语言结构:组的「重复次数」> 1 就是循环,循环体只写一遍(IFS 隧道 99 步、贝塞尔 24 段都靠它,图和着色器小两个数量级)。
- 可扩展、免重启:用户节点丢个 JSON 进 <工作区>/library/nodes/ 就能加;节点分类和项目名都支持多级。
- 面板和智能体共用一套工具与工作区:存储位置能在面板里改,两边看到的永远是同一份数据。
- 104 个用例:含真机 WebGL2 编译校验、GPU 像素回读、真鼠标拖拽交互、1080p 性能度量。

装上

cd ~/.dsh/profiles/desktop
package.json:dependencies 加 "dsh-shader-workbench": "file:<本仓库路径>" dsh.profile.bundles 加 "dsh-shader-workbench"
node <pnpm.cjs 路径> install

然后重启 DSH,侧栏会出现「Shader 工作台」。存储位置、配置项、加载排查见安装与配置。

七个自带示例

面板资源树里点 载入示例 即可。一个新节点都没加,全部用现有组件搭出来。

IFS 隧道(Phantom Star 移植)99 步累积 = 一个重复组,和原版逐像素一致 DFT 本轮画心形每个旋转向量一个节点,轨迹靠 BufferA 反馈

9 抽样高斯模糊双 Pass,半径可拖三次贝塞尔24 段采样是一个重复组,四个控制点可拖

另外三个(傅里叶级数 / 谐波频谱 / 景深)和每个示例的做法见 示例说明。

文档

| 文档 | 内容 |
| 安装与配置 | 装上、存储位置与优先级、安全边界、加载排查 |
| 使用手册 | 界面、画布操作与快捷键、节点库 55 个节点、9 个工具、工作区结构 |
| 扩展指南 | 加节点的三条路:用户节点 / 组与重复组 / 内置节点 |
| 开发与验证 | 开发命令、真机验证与实测性能、体积、本版没做的 |
| 接口契约 | HTTP 动作、节点定义与代码生成契约(改代码前先看这份) |
| 架构说明 | 分层、数据流、关键设计取舍与踩过的坑 |
| 验收报告 | 各里程碑的真机验收记录 |
| 示例说明 | 7 个示例分别演示了什么、怎么搭的 |

详细文档目前以中文为主;英文的 issue / PR 一样欢迎。

仓库

- 仓库:<https://github.com/Moolight/dsh-shader-workbench>
- 问题反馈:<https://github.com/Moolight/dsh-shader-workbench/issues>
- 许可:MIT

名字里的 "workbench" 是字面意思:它是个工作台,不是渲染引擎 ——引擎只有 WebGL2,剩下的是「让你能一边连节点一边看画面」的那些东西。
预览分享卡片长什么样 ↓Moolight/dsh-shader-workbench
分享 · DeepSeek Harness Hub
Moolight/dsh-shader-workbench

拖节点搭 GLSL 并实时预览导出材质

这是你的仓库?认领条目

回到顶部