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

翻唱流水线 InariNGT-Ofiicial/dsh-cover-pipeline

DeepSeek 客户端
InariNGT-Ofiicial7 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

面向 DeepSeek Harness 的本地 AI 翻唱插件:9 个工具串起分离 → 换声 → 移调 → 混音 →…

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

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/InariNGT-Ofiicial/dsh-cover-pipeline.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-cover-pipeline(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 04:53:01

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 52 处,展示前 35 条)
  • 读取本地文件
    src/index.js:33
    if (!existsSync(dir)) return { dir, exists: false, entries: [] };
  • 读取本地文件
    src/index.js:37
    for (const f of readdirSync(d, { withFileTypes: true })) {
  • 读取本地文件
    src/index.js:45
    for (const g of readdirSync(cur, { withFileTypes: true })) {
  • 读取本地文件
    src/index.js:50
    const st = statSync(p);
  • 读取本地文件
    src/index.js:265
    ]) if (!p || !existsSync(p)) missing.push(`${label} 不存在: ${p || '(空)'}`);
  • 读取本地文件
    src/index.js:266
    if (!next.voiceModel || !existsSync(next.voiceModel)) missing.push(`目标音色权重不存在: ${next.voiceModel || '(空)'}`);
  • 写入本地文件
    src/index.js:284
    writeFileSync(LOCAL_CONFIG, JSON.stringify(local, null, 2), 'utf8');
  • 读取本地文件
    src/config.js:87
    const isFile = (p) => { try { return !!p && existsSync(p) && statSync(p).isFile(); } catch { return false; } };
  • 读取本地文件
    src/config.js:87
    const isFile = (p) => { try { return !!p && existsSync(p) && statSync(p).isFile(); } catch { return false; } };
  • 读取本地文件
    src/config.js:88
    const isDir = (p) => { try { return !!p && existsSync(p) && statSync(p).isDirectory(); } catch { return false; } };
  • 读取本地文件
    src/config.js:88
    const isDir = (p) => { try { return !!p && existsSync(p) && statSync(p).isDirectory(); } catch { return false; } };
  • 读取本地文件
    src/config.js:93
    return readdirSync(dir, { withFileTypes: true })
  • 读取本地文件
    src/config.js:101
    return readdirSync(dir, { withFileTypes: true })
  • 写入本地文件
    src/config.js:272
    try { if (cfg[k]) mkdirSync(cfg[k], { recursive: true }); } catch { }
  • 读取本地文件
    src/execution.js:8
    const b = readFileSync(file);
  • 读取本地文件
    src/execution.js:23
    const files = readdirSync(folder, { withFileTypes: true }).filter(f => f.isFile() && / (wav|mp3|flac)$/i.test(f.name)).map(f => resolve(folder, f.nam
  • 读取本地文件
    src/execution.js:30
    const hash = file => createHash('sha256').update(readFileSync(file)).digest('hex');
  • 读取本地文件
    src/execution.js:46
    && !existsSync(spec.args[0])) throw new Error(`Missing optional/conditional tool script: ${spec.args[0]}`);
  • 读取本地文件
    src/execution.js:48
    const missing = inputs.filter(p => !p || !existsSync(p));
  • 读取本地文件
    src/execution.js:58
    if (!model || !existsSync(model) || !existsSync(resolve(dirname(model), 'config.yaml'))) throw new Error('Effective model and sibling config.yaml must
  • 写入本地文件
    src/execution.js:75
    try { mkdirSync(dirname(lock), { recursive: true }); writeFileSync(lock, runId, { flag: 'wx' }); }
  • 写入本地文件
    src/execution.js:75
    try { mkdirSync(dirname(lock), { recursive: true }); writeFileSync(lock, runId, { flag: 'wx' }); }
  • 删除本地文件
    src/execution.js:80
    catch (e) { if (lock) unlinkSync(lock); return failure(spec.label, e, 'executed'); }
  • 写入本地文件
    src/execution.js:112
    const dir = dirname(expected[0]); mkdirSync(dir, { recursive: true });
  • 写入本地文件
    src/execution.js:117
    writeFileSync(manifestPath, JSON.stringify({ runId, started, stage: key, args, effectiveConfig: { voiceModel: cfg.voiceModel, targetLufs: cfg.targetLu
  • 删除本地文件
    src/execution.js:121
    if (lock) unlinkSync(lock);
  • 写入本地文件
    src/execution.js:133
    mkdirSync(stageDir, { recursive: true });
  • 写入本地文件
    src/execution.js:134
    sources.forEach((f, i) => copyFileSync(resolve(args.outDir, basename(f, extname(f)), 'vocals.wav'), staged[i]));
  • 读取本地文件
    src/checks.js:37
    if (!existsSync(p)) return { name, level, ok: false, detail: `不存在: ${p}`, fix };
  • 读取本地文件
    src/checks.js:38
    const st = statSync(p);
  • 读取本地文件
    src/checks.js:62
    while (probe && !existsSync(probe)) {
  • 读取本地文件
    src/checks.js:93
    name, level: 'error', ok: existsSync(p),
  • 读取本地文件
    src/checks.js:94
    detail: existsSync(p) ? p : `不存在: ${p}`,
  • 读取本地文件
    src/checks.js:95
    fix: existsSync(p) ? '' : '把材料解压到 <songRoot>/01_*、02_*;或运行 cover_setup 看缺失清单',
  • 执行外部命令来自配置/变量
    src/runner.js:42
    child = spawn(cmd, args, {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(110 字)↓

面向 DeepSeek Harness 的本地 AI 翻唱插件:9 个工具串起分离 → 换声 → 移调 → 混音 → 验收,JavaScript 零运行时依赖,重活交给 MSST / DDSP 两套 Python 工程。

README

由 DeepSeek 最新模型翻译生成
dsh-cover-pipeline 正式版 v1.1.3 · 同时支持 DSH rc.2 / rc.3。 兼容维护:同时支持 DSH 0.2.1-rc.2 / rc.3,保留旧版用法与设置。验证范围与复现见 DSH 兼容说明。 面向 DeepSeek Harness(DSH)的本地 AI 翻唱插件,版本 1.1.3。用 9 个工具组织分离、移调、换声、混音和验收。JavaScript 无运行时 npm 依赖;音频处理依赖外部 Python 工程与模型。 把「分离 → 换声 →(条件)移调 → 混音 → 验收 → 听审」做成 DSH 里可直接调用的工具。 零运行时依赖(只用 node: 内置模块);重活交给 MSST / DDSP 两套既有 Python 环境。 安装前先读:依赖清单与上游下载入口。 本仓库自带 8 个核心脚本(全在 runtime/):5 个 adapter(convert.py、long_audio.py、guided_core.py、mix.py、validate_model.py)+ shift.py + mix_master.py + verify_mix.py。 不含任何旧歌工程的 QC / 裁剪 / 封装脚本;MSST / DDSP 两个大工程与音色权重不放进 git,见 materials/README.md。
展开完整文档(README 剩余 1 节)
dsh-cover-pipeline

正式版 v1.1.3 · 同时支持 DSH rc.2 / rc.3。

兼容维护:同时支持 DSH 0.2.1-rc.2 / rc.3,保留旧版用法与设置。验证范围与复现见 DSH 兼容说明。

面向 DeepSeek Harness(DSH)的本地 AI 翻唱插件,版本 1.1.3。用 9 个工具组织分离、移调、换声、混音和验收。JavaScript 无运行时 npm 依赖;音频处理依赖外部 Python 工程与模型。

把「分离 → 换声 →(条件)移调 → 混音 → 验收 → 听审」做成 DSH 里可直接调用的工具。
零运行时依赖(只用 node: 内置模块);重活交给 MSST / DDSP 两套既有 Python 环境。

安装前先读:依赖清单与上游下载入口。

本仓库自带 8 个核心脚本(全在 runtime/):5 个 adapter(convert.py、long_audio.py、guided_core.py、mix.py、validate_model.py)+ shift.py + mix_master.py + verify_mix.py。
不含任何旧歌工程的 QC / 裁剪 / 封装脚本;MSST / DDSP 两个大工程与音色权重不放进 git,见 materials/README.md。

第一次用、只想知道「下完仓库还缺什么」→ 看 小白接入。

快速开始(小白版)

1. 拿材料(三样大文件,网盘链接、提取码、目录布局全在 materials/README.md): MSST 整合包、DDSP 6.2 整合包、8 人音色模型包。
2. 一条命令接入:

powershell -ExecutionPolicy Bypass -File scripts\install.ps1 -Root D:\AI-Song -Voice 祥子

3. 重启 DSH,然后直接说:「用祥子的声音翻唱《歌名》」。

只想先看看缺什么:加 -DryRun。
只验材料:node scripts/verify-materials.mjs --root D:\AI-Song --voice 祥子。

安装与配置

需要 Node.js 18+、DSH,以及能独立运行的 MSST、DDSP-SVC。混音/验收脚本已随包。

dsh plugin --profile desktop add <本仓库绝对路径>

cordis.patch.yml 是安装配置,cordis.dev.yml 是开发覆盖层。
路径默认全留空:src/config.js 会依次尝试 DSH_COVER_ROOT → D:/AI-Song → C:/AudioWork → 当前目录,并在根目录里自动找 01_(MSST)、02_/DDSP-barbara-(DDSP)、03_(音色库)与 env/python.exe。
工程数据统一落在 <songRoot>/cover_runs,不再引用任何旧歌的 _probe / _pipeline_bqll。
发现不到时,cover_setup 会输出可直接粘的配置片段;cover.local.json(git 忽略)可做本机覆盖。

| 配置 | 应指向 |
| msstDir / msstEnv | MSST 工程及 Python,包含 kim/karaoke 模型与配置,支持 --extract_instrumental |
| ddspDir / ddspEnv | DDSP 工程及 Python,包含 batch_infer、RMVPE、编码器、声码器 |
| voiceModel | 有权使用的音色权重;同目录有 config.yaml,引用资产必须存在 |
| mixDir / probeDir | 工程数据目录,默认 <songRoot>/cover_runs;混音脚本在 runtime/ |
| ffmpeg | 验证可用的 ffmpeg(可选) |
| pipelineRoot / songRoot | 本地项目数据目录 |
| targetLufs | 默认 −14;mix、verify 共用,可显式覆盖 |

安装后用 cover_doctor 检查;缺少核心依赖时不要宣称端到端可用。

工具与工作流

工具:cover_doctor、cover_setup、cover_plan、cover_status、cover_separate、cover_shift、cover_convert、cover_mix、cover_verify。
cover_setup 是自动发现与选音色的入口;cover_shift 只在非八度 key 时使用;cover_verify 只做技术检查,听审单独记录。

baseline:kim → karaoke → 只换主唱 → 保留原和声 → standard 混音 → 单次母带归一化/限制 → 技术验收 → 用户试听。

先从有权使用的原始录音裁同一时间段,例如 55–80 秒,44.1 kHz 双声道浮点 WAV,不预降增益,命名为 pilot.wav。以下 C:/AudioWork/run-001 是新建目录示例:

{"tool":"cover_separate","args":{"inputFolder":"C:/AudioWork/run-001/input","outDir":"C:/AudioWork/run-001/sep","karaoke":true}}
{"tool":"cover_convert","args":{"src":"C:/AudioWork/run-001/sep/kara/pilot/Vocals.wav","outDir":"C:/AudioWork/run-001/conv","mode":"pilot","backend":"baseline","start":0,"duration":25,"key":0,"step":50,"method":"euler","tStart":0.7}}
{"tool":"cover_mix","args":{"inst":"C:/AudioWork/run-001/sep/pilot/instrumental.wav","lead":"C:/AudioWork/run-001/conv/lead_pilot_k+0.wav","harm":"C:/AudioWork/run-001/sep/kara/pilot/instrumental.wav","out":"C:/AudioWork/run-001/master.wav","profile":"standard"}}
{"tool":"cover_verify","args":{"wav":"C:/AudioWork/run-001/master.wav","json":"C:/AudioWork/run-001/master.verify.json"}}

不要把短主唱与全长伴奏混合;先裁源再分离,可保持窗口一致。key:0 是示例,不适用所有音源;变调需同步处理伴奏和和声。先试听,再以新目录、完整源和 mode:"full" 制作整曲。已有目标会被拒绝。

dryRun:true 只返回命令与预期产物,不代表输出通过。manifest 和转换 provenance 含本机路径,仅作本地追溯,不应提交用户素材或私有日志。

测试和验证

npm test # 15 项回归
npm run test:workflow # 6 项核心流程契约
npm run test:setup # 8 项:8 脚本齐全 + cover_setup + 按名字选音色
npm run test:contract # 28 项:工具定义/输出契约 + 核心工具 dry-run(自造夹具)
python -B test/adapter-cpu.py # 6 项
python -B test/long-audio-cpu.py # 6 项
python -B test/mix-cpu.py --mix-dir runtime # 3 项,用随包混音实现
npm run test:package # 打包边界:8 脚本 + 清单,无权重/音频
node scripts/verify-materials.mjs --root D:\AI-Song --voice 祥子

Python CPU 测试需要 numpy/scipy/soundfile;混音测试直接用 runtime/。test:contract 里的 doctor 会读本机环境,不能冒充新歌全链路验证。

输入源经验

Vocaloid 可以作为输入,不因旧失败案例而排除;尽量不用已经换声/翻唱处理过的录音作为输入源。这是实践建议,不是普遍技术定律;应按歌曲、模型先试听。

许可与发布边界

插件代码采用 MIT,不涵盖外部工程、模型权重、音色、词曲或录音使用权。插件不解密 DRM、不上传歌曲到第三方、不自动发布视频。

scripts/publish.ps1 是手动发布辅助脚本,运行前必须检查目标分支。公开仓库和 npm 包不应包含歌曲、权重、凭据或用户日志。

1.1.2 说明

保留 1.1.1 的长音频分块推理与根因错误传播修复;不改模型、key、采样器或标准混音配方。非八度移调仍是条件必需步骤。保留输入/模型、时长、新鲜产物、有限值、真峰值、错误传播与用户听审;不承诺商业质量,不自动循环调音。

安装包不包含外部混音/分离/推理工程及权重;配置依赖后才可运行。验证边界见 1.1.2 说明。
预览分享卡片长什么样 ↓InariNGT-Ofiicial/dsh-cover-pipeline
分享 · DeepSeek Harness Hub
InariNGT-Ofiicial/dsh-cover-pipeline

面向 DeepSeek Harness 的本地 AI 翻唱插件:9 个工具串起分离 → 换声 → 移调 → 混音 →…

回到顶部