在对话中创作分镜,逐场编辑并导出讲解视频
30.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add AloneAtWar/dsh-explainroo该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · tool
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 128 处,展示前 43 条)
- 读取本地文件lib/tasks-DHSU2mS_.js:58
const folder = await realpath(path); - 读取本地文件lib/tasks-DHSU2mS_.js:59
if (!(await lstat(folder)).isDirectory()) throw new Error("请选择文件夹。"); - 读取本地文件lib/tasks-DHSU2mS_.js:60
const entries = await readdir(folder, { withFileTypes: true }); - 读取本地文件lib/tasks-DHSU2mS_.js:64
else if (entries.some((item) => item.isDirectory() && !item.name.startsWith(".") && existsSync(join(folder, item.name, "video.json")) && existsSync(jo - 读取本地文件lib/tasks-DHSU2mS_.js:74
if (existsSync(join(current, ".git"))) { - 读取本地文件lib/tasks-DHSU2mS_.js:83
installed: existsSync(path) && (await lstat(path)).isFile(), - 写入本地文件lib/tasks-DHSU2mS_.js:118
await mkdir(path); - 写入本地文件lib/tasks-DHSU2mS_.js:132
await writeFile(path, content, { flag: "wx" }); - 删除本地文件lib/tasks-DHSU2mS_.js:137
if ((await readFile(path)).equals(Buffer.from(content)) && !(await lstat(path)).isSymbolicLink()) await unlink(path); - 删除本地文件lib/tasks-DHSU2mS_.js:140
await rmdir(path); - 写入本地文件lib/tasks-DHSU2mS_.js:172
await mkdir(container); - 写入本地文件lib/tasks-DHSU2mS_.js:179
await mkdir(folder); - 删除本地文件lib/tasks-DHSU2mS_.js:192
await rmdir(folder); - 删除本地文件lib/tasks-DHSU2mS_.js:247
if (entry.before === null) await unlink(target); - 删除本地文件lib/tasks-DHSU2mS_.js:262
await unlink(join(folder, journalName)); - 删除本地文件lib/tasks-DHSU2mS_.js:298
await unlink(join(folder, journalName)); - 写入本地文件lib/tasks-DHSU2mS_.js:616
await mkdir(join(folder, ".explainroo"), { recursive: true }); - 执行外部命令固定命令lib/tasks-DHSU2mS_.js:901
const killer = spawn("taskkill", [ - 写入本地文件lib/tasks-DHSU2mS_.js:930
await mkdir(target, { recursive: true }); - 执行外部命令来自配置/变量lib/tasks-DHSU2mS_.js:967
const child = spawn(this.projects.config.nodePath, args, { - 读取本地文件lib/preview-DIMaN2lS.js:21
return await readFile(file, "utf8"); - 写入本地文件lib/preview-DIMaN2lS.js:28
await mkdir(dirname(file), { recursive: true }); - 写入本地文件lib/preview-DIMaN2lS.js:31
await writeFile(temporary, value, "utf8"); - 写入本地文件lib/preview-DIMaN2lS.js:32
await rename(temporary, file); - 删除本地文件lib/preview-DIMaN2lS.js:34
await rm(temporary, { force: true }); - 发起网络请求lib/preview-DIMaN2lS.js:124
res = await fetch(url, { - 读取本地文件lib/preview-DIMaN2lS.js:285
].every((file) => existsSync(join(root, file)))) ?? ""; - 读取本地文件lib/preview-DIMaN2lS.js:294
const value = JSON.parse(readFileSync(join(root, "package.json"), "utf8")).version; - 读取本地文件lib/preview-DIMaN2lS.js:353
const modules = (await readdir(folder)).filter((name) => /\.(m?js|json)$/.test(name)).sort(); - 读取本地文件lib/preview-DIMaN2lS.js:354
const sources = Object.fromEntries(await Promise.all(modules.map(async (name) => [name, await readFile(join(folder, name), "utf8")]))); - 读取本地文件lib/preview-DIMaN2lS.js:386
if (voice && voice.hash === sourceVoiceHash(engine, project, scene) && (!voice.duration || existsSync(join(folder, "build/voice", `${scene.id}.wav`))) - 写入本地文件lib/preview-DIMaN2lS.js:460
await mkdir(dirname(file), { recursive: true }); - 写入本地文件lib/preview-DIMaN2lS.js:461
await writeFile(file, bytes); - 删除本地文件lib/preview-DIMaN2lS.js:466
for (const name of await readdir(target)) if (name !== ".dsh-narration") await rm(join(target, name), { - 写入本地文件lib/preview-DIMaN2lS.js:483
await mkdir(destination, { recursive: true }); - 删除本地文件lib/preview-DIMaN2lS.js:486
for (const entry of await readdir(destination)) if (!entries.includes(entry) && entry !== ".dsh-narration") await rm(join(destination, entry), { - 删除本地文件lib/preview-DIMaN2lS.js:566
for (const extension of ["json", "wav"]) await rm(join(destination, "build/voice", ascii + "." + extension), { force: true }); - 删除本地文件lib/preview-DIMaN2lS.js:689
await rm(destination, { - 发起网络请求lib/preview-DIMaN2lS.js:740
const forward = http.request(upstreamUrl.origin + target, { - 删除本地文件lib/preview-DIMaN2lS.js:764
await rm(destination, { - 写入本地文件lib/export-worker.js:12
await mkdir(target, { recursive: true }); - 读取密钥环境变量lib/export-worker.js:58
if (!process.env.MIMO_TTS_API_KEY && process.env.MIMO_API_KEY) process.env.MIMO_TTS_API_KEY = process.env.MIMO_API_KEY; - 写入本地文件lib/export-worker.js:83
await mkdir(join(folder, "out"), { recursive: true });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-input-trigger@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-client-ui-workspace@deepseek-ai/dsh-jobs@deepseek-ai/dsh-tools@deepseek-ai/dsh-typert-protocol给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成DSH Explainroo
在 DSH Desktop 中制作讲解视频:用原生对话创作,在右侧工作台逐场预览、编辑,再导出视频或分镜图。
DSH Desktop 中的 Explainroo 工作台
旁白与触发点 · 原版默认配音 · 上架材料与验收记录
功能
- 原生对话协作:保留 DSH 的模型、工具与会话;在输入框用 @ 引用当前项目、场景和画面对象。
- 多项目工作台:选择工作台目录,在项目面板搜索、切换或创建项目;空目录可初始化,零场景显示起始画布。
- 旁白编辑:触发点嵌在连续正文中,可拖动、不可误删;支持中文输入、整段粘贴、展开编辑与本地撤销重做。
- 中文名称:场景和触发点直接使用中文。改名联动讲稿、画面代码、封面和手动时序,无额外显示名或翻译表。
- 画面调整:修改主题、背景色、纹理、字幕,以及对象的位置、尺寸、文字、颜色、入场和触发时间。
- 修改保护:保存需匹配最新 revision;保留锁定、手动覆盖和历史。右键可复制纯 JSON 定位内容。
- 导出:顶栏导出视频或分镜图,后台显示百分比,完成后选择保存位置。配音方式在设置中配置。
- 创作技能:附带 DSH 指引和自有中文示例;安装工作区技能时读取原版指南,引导分镜说明和无声验证。
- 界面:默认亮色,可单击切换暗色;支持调整原生对话与工作台的宽度。
展开完整文档(README 剩余 1 节)
DSH Explainroo 在 DSH Desktop 中制作讲解视频:用原生对话创作,在右侧工作台逐场预览、编辑,再导出视频或分镜图。 DSH Desktop 中的 Explainroo 工作台 旁白与触发点 · 原版默认配音 · 上架材料与验收记录 功能 - 原生对话协作:保留 DSH 的模型、工具与会话;在输入框用 @ 引用当前项目、场景和画面对象。 - 多项目工作台:选择工作台目录,在项目面板搜索、切换或创建项目;空目录可初始化,零场景显示起始画布。 - 旁白编辑:触发点嵌在连续正文中,可拖动、不可误删;支持中文输入、整段粘贴、展开编辑与本地撤销重做。 - 中文名称:场景和触发点直接使用中文。改名联动讲稿、画面代码、封面和手动时序,无额外显示名或翻译表。 - 画面调整:修改主题、背景色、纹理、字幕,以及对象的位置、尺寸、文字、颜色、入场和触发时间。 - 修改保护:保存需匹配最新 revision;保留锁定、手动覆盖和历史。右键可复制纯 JSON 定位内容。 - 导出:顶栏导出视频或分镜图,后台显示百分比,完成后选择保存位置。配音方式在设置中配置。 - 创作技能:附带 DSH 指引和自有中文示例;安装工作区技能时读取原版指南,引导分镜说明和无声验证。 - 界面:默认亮色,可单击切换暗色;支持调整原生对话与工作台的宽度。窄分栏将场景改为横排,预览、时间和属性改为单列显示。 环境与兼容性 - Node.js ^22.19.0 || >=24.0.0。 - Explainroo 0.4.1 通过官方仓库固定提交作为外部依赖安装;Git 仓库和插件 tgz 不包含引擎源码、字体或上游示例,首次安装需要访问该源码包地址。 - 图形工作台依赖 DSH Desktop 的 desktopWorkbenches 服务。 - 当前 0.8.2 已在 Windows x64 的 Desktop 0.12.0 / Harness 0.2.0-rc.2 安装并打开验证;开发依赖固定为 Harness 0.2.1-rc.2,peer 同时接受这两个预发布分支。历史 0.7.2 另有 Desktop 0.11.1 的验收记录。 - 导出视频需要 FFmpeg 和引擎支持的 Chrome / Edge。旁白预览不自动生成语音;中文字体首次使用可能下载。 上述为已验证的版本范围。独立 Harness Web 未提供 Desktop 工作台服务时,可使用 Host 工具,不能加载本图形面板。 安装到 DSH Desktop 已发布版本可直接从 GitHub Releases 下载 dsh-explainroo.tgz,无需本地构建;也可从源码构建: npm ci --ignore-scripts npm run check npm pack 通过 DSH Desktop 支持本地文件的插件安装入口选择下载或构建得到的 tgz(Release 为固定文件名 dsh-explainroo.tgz,本地构建为 dsh-explainroo-<版本>.tgz),再重启 Harness,在工作台主页打开「讲解视频工作台」。使用命令行时应使用当前 Desktop 自带的运行时与配置档;全局 Harness 命令行可能安装到其他位置。 首次进入设置工作台路径。默认使用固定版本的原版 Explainroo 依赖。中文 ID 和 MiMo 由插件适配;原始项目不会改成英文 ID,也不修改外部引擎。高级引擎目录仅用于自行验证过的兼容版本。 安装状态会显示界面、后台和引擎版本。更新后若提示版本不一致,请用 Desktop「应用 → 重启」,仅刷新页面不会更新 Host。默认引擎随插件自动安装,不需要单独克隆 Explainroo 或填写目录;安装中断时可展开「安装与修复引导」重新安装并重启,再点「重新检测」。失效的自定义路径可用「恢复默认引擎」清除;工作台目录与视频文件保持不变。 0.8.0 改变了引擎分发方式。已有项目可继续打开,锁定和历史仍保留;旧的自定义工作区技能不自动覆盖。旧脚本若直连旧引擎,优先使用 Host 工具,备份自定义指引后再安装新技能。 开始创作 1. 顶部选择或新建视频项目。新项目保存在工作台下的 projects/<目录名>/。 2. 在 DSH 原生对话中描述主题,使用 @ 引用项目或场景。 3. 预览画面,编辑本场旁白与分镜说明,保存修改。分镜说明记录构图、对象关系和动画顺序,不参与朗读。 4. 拖动正文中的触发点改变位置,右键改名或复制定位 JSON。改名前先保存当前草稿。 5. 在设置中选择配音服务与音色,点击顶栏导出并选择保存位置。 新建项目包含 video.json、script.md、scenes.js、忽略规则和 .dsh/skills/explainroo/。已有自定义技能不覆盖;运行时指引提供工作台工具说明。 本地开发 npm ci --ignore-scripts npm run demo:import npm run dev -- --library ./.local/projects 默认复制包内中文示例到忽略的本地目录;也可用 npm run demo:import -- <项目路径> 复制自己的项目。目标已存在时拒绝覆盖。 打开终端显示的 http://127.0.0.1:4480/。开发页面复用同一个 Host、真实引擎与保存逻辑,用于预览和编辑;AI 对话继续使用 DSH。可通过 --port、--library、--engine、--data-dir 调整开发入口。 npm run typecheck npm test npm run check npm pack --dry-run --ignore-scripts CI 在 Windows 和 Linux 的 Node 22 / 24 上执行完整检查与打包预检。TypeScript 同时检查未使用的声明。推送 v* 标签会重复完整检查后创建 GitHub Release,附上固定文件名的 dsh-explainroo.tgz(供 releases/latest/download/ 链接引用)并通过 8 MiB 体积守卫;配置 NPM_TOKEN secret 后,Release 发布时自动执行 npm publish --provenance。 插件自身的 lib/ 构建产物随源码提交,供源码安装和市场源码核验使用。修改源码后运行 npm run check,同时提交更新后的 lib/;CI 和 Release 会检查重新构建的文件与提交内容一致。Explainroo 引擎继续使用固定提交的外部依赖。 DSH 工具 | 工具 | 用途 | | explainroo_setup | 读取状态,按请求配置工作台和引擎目录 | | explainroo_project | 读取场景、锁定、覆盖和最新 revision | | explainroo_edit_scene | 修改单场旁白、分镜说明或已有画面对象 | | explainroo_rename | 关联修改场景或触发点名称 | | explainroo_validate | 无声检查场景、触发点、封面与手动时序引用 | | explainroo_run | 使用 DSH Jobs 执行 voice / check / sheet / render | 后台工具返回 native job id,通过 job_output 取结果、job_kill 取消。界面只显示紧凑进度和错误提示。 文件、配音与边界 - 真源为项目的 script.md、scenes.js 和 video.json;手动覆盖、撤销历史与导出快照保存在项目 .explainroo/。 - 配音设置优先沿用项目的 provider、音色、模型或录音来源;未指定 voice 时采用原版 Explainroo 的语言默认值(当前中文为 Kokoro zf_xiaobei)。新建项目与中文示例不再预设 MiMo,已有 MiMo 项目仍保留原配置。保存设置不会生成配音。 - 视频导出按需生成缺失或失效的配音。MiMo / ElevenLabs 可能收费;分镜图和无声预览不调用 TTS。设置不保存 API Key。MiMo 使用本机 MIMO_TTS_API_KEY 或项目 .env,兼容旧 MIMO_API_KEY;ElevenLabs 使用 ELEVENLABS_API_KEY。 - 预览与任务使用同一兼容层,在副本中转换中文场景、触发点、封面及静态 JS 引用;保留可见文字和颜色。所有任务在独立快照中运行,原文件仍是唯一真源。 - MiMo 由插件生成音频,经原版录音入口完成词级对时与渲染。有效配音缓存可复用;新缓存仅在项目 revision 未变时按原中文名称回写。 - 复杂 s.draw、嵌套组件和自定义动画继续由代码维护;目前没有任意 JavaScript 的可视化反编译或专业多轨剪辑。 - 静态验证不执行项目 JS;无法确认的动态定义会报错,实际画面仍需预览。录音缓存识别和按场景迁移仍有限制。 - 工作台设置保存在用户目录 ~/.dsh-explainroo/settings.json。卸载插件不删除视频项目。 项目结构 src/ ├── client/ # 原生业务面板、编辑器与交互 ├── host/ # 项目、事务、预览、导出与技能安装 ├── player/ # 引擎画布和预览消息 ├── shared/ # 协议、数据类型和场景适配器 └── dev/ # 浏览器开发入口 skills/explainroo/ ├── SKILL.md ├── scripts/ # 创作 CLI 与无声验证 ├── references/ # 中文命名、分镜说明及创作参考 └── examples/ # 插件自有中文示例 scripts/ # 开发、构建与打包检查 tests/ # 行为与真实引擎集成测试 docs/ # 架构、设计和验证说明 架构 · 设计 · 验证 · 创作 skill · 第三方许可 上游版本与维护流程 说明固定提交、完整性校验、兼容副本和升级验收。 本插件采用 MIT 许可,外部依赖保留各自许可。开发参考 dsh-oil-creator、DeepSeek Harness、DSH Desktop 工作台规范 和 explainroo。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
AloneAtWar/dsh-explainroo
在对话中创作分镜,逐场编辑并导出讲解视频
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
智能体运行框架路由HarnessRouter/harnessrouter
智能体 harness 的统一接口。
★ 3,984已汉化DSH
71.3
这是你的仓库?认领条目