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

番剧配音克隆 InariNGT-Ofiicial/dsh-anime-voice

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

番剧角色台词提取与 GPT-SoVITS v2 训练配音技能,含 DSH 宿主实测记录

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

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add InariNGT-Ofiicial/dsh-anime-voice
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · skill
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/25) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 plugins/tts-train-pipeline/package.json

展开查看检查明细 ↓

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

✗npm 包dsh-tts-train-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/25 17:09:34

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

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 73 处,展示前 45 条)
  • 读取本地文件
    plugins/tts-train-pipeline/src/checks.js:80
    const missing = GSV_MARKERS.filter((m) => !existsSync(join(cfg.gsvDir, m)));
  • 读取本地文件
    plugins/tts-train-pipeline/src/checks.js:110
    if (!existsSync(p)) {
  • 读取本地文件
    plugins/tts-train-pipeline/src/checks.js:122
    } else if (cfg.ffmpeg !== 'ffmpeg' && !existsSync(cfg.ffmpeg)) {
  • 执行外部命令固定命令
    plugins/tts-train-pipeline/src/checks.js:235
    const out = execFileSync('git', ['-C', dir, 'rev-parse', '--short', 'HEAD'], { encoding: 'utf8', timeout: 8000 });
  • 读取本地文件
    plugins/tts-train-pipeline/src/config.js:262
    export const isFile = (p) => { try { return !!p && existsSync(p) && statSync(p).isFile(); } catch { return false; } };
  • 读取本地文件
    plugins/tts-train-pipeline/src/config.js:262
    export const isFile = (p) => { try { return !!p && existsSync(p) && statSync(p).isFile(); } catch { return false; } };
  • 读取本地文件
    plugins/tts-train-pipeline/src/config.js:263
    export const isDir = (p) => { try { return !!p && existsSync(p) && statSync(p).isDirectory(); } catch { return false; } };
  • 读取本地文件
    plugins/tts-train-pipeline/src/config.js:263
    export const isDir = (p) => { try { return !!p && existsSync(p) && statSync(p).isDirectory(); } catch { return false; } };
  • 读取本地文件
    plugins/tts-train-pipeline/src/config.js:268
    return readdirSync(dir, { withFileTypes: true })
  • 读取本地文件
    plugins/tts-train-pipeline/src/config.js:276
    return readdirSync(dir, { withFileTypes: true }).filter((d) => d.isFile()).map((d) => d.name);
  • 执行外部命令来自配置/变量
    plugins/tts-train-pipeline/src/execution.js:57
    child = spawn(cmd, args, { cwd, env, windowsHide: true });
  • 写入本地文件
    plugins/tts-train-pipeline/src/execution.js:80
    mkdirSync(dirname(logPath), { recursive: true });
  • 写入本地文件
    plugins/tts-train-pipeline/src/execution.js:82
    try { writeFileSync(logPath, ''); } catch { }
  • 执行外部命令来自配置/变量
    plugins/tts-train-pipeline/src/execution.js:86
    child = spawn(cmd, args, {
  • 写入本地文件
    plugins/tts-train-pipeline/src/execution.js:91
    try { appendFileSync(logPath, `\n[spawn error] ${e?.message ?? e}\n`); } catch { }
  • 读取本地文件
    plugins/tts-train-pipeline/src/execution.js:109
    if (existsSync(p)) {
  • 读取本地文件
    plugins/tts-train-pipeline/src/execution.js:111
    const st = statSync(p);
  • 读取本地文件
    plugins/tts-train-pipeline/src/execution.js:116
    try { entries = readdirSync(p).length; } catch { entries = 0; }
  • 读取本地文件
    plugins/tts-train-pipeline/src/execution.js:142
    if (!existsSync(path)) return '';
  • 读取本地文件
    plugins/tts-train-pipeline/src/execution.js:144
    const size = statSync(path).size;
  • 读取本地文件
    plugins/tts-train-pipeline/src/execution.js:225
    const arr = JSON.parse(readFileSync(file, 'utf8'));
  • 写入本地文件
    plugins/tts-train-pipeline/src/execution.js:232
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    plugins/tts-train-pipeline/src/execution.js:233
    writeFileSync(file, JSON.stringify(jobs.slice(-50), null, 2), 'utf8');
  • 读取本地文件
    plugins/tts-train-pipeline/src/gsv.js:52
    if (!existsSync(p)) continue;
  • 写入本地文件
    plugins/tts-train-pipeline/src/gsv.js:54
    mkdirSync(staleDir, { recursive: true });
  • 写入本地文件
    plugins/tts-train-pipeline/src/gsv.js:55
    renameSync(p, join(staleDir, t));
  • 读取本地文件
    plugins/tts-train-pipeline/src/gsv.js:104
    if (!existsSync(scriptPath)) {
  • 写入本地文件
    plugins/tts-train-pipeline/src/gsv.js:107
    mkdirSync(cfg.expDir, { recursive: true });
  • 读取本地文件
    plugins/tts-train-pipeline/src/gsv.js:124
    if (existsSync(part)) {
  • 写入本地文件
    plugins/tts-train-pipeline/src/gsv.js:125
    try { renameSync(part, fin); return true; } catch { return false; }
  • 读取本地文件
    plugins/tts-train-pipeline/src/gsv.js:127
    return existsSync(fin);
  • 读取本地文件
    plugins/tts-train-pipeline/src/gsv.js:152
    textLines = readFileSync(join(cfg.expDir, PREP_ARTIFACTS.text), 'utf8')
  • 读取本地文件
    plugins/tts-train-pipeline/src/gsv.js:173
    const txt = readFileSync(listFile, 'utf8');
  • 写入本地文件
    plugins/tts-train-pipeline/src/gsv.js:248
    mkdirSync(join(tmpPath, '..'), { recursive: true });
  • 写入本地文件
    plugins/tts-train-pipeline/src/gsv.js:249
    writeFileSync(ovPath, JSON.stringify(overrides, null, 2), 'utf8');
  • 读取本地文件
    plugins/tts-train-pipeline/src/index.js:47
    if (!existsSync(p)) return '';
  • 读取本地文件
    plugins/tts-train-pipeline/src/index.js:50
    for (const line of readFileSync(p, 'utf8').split(/ ? /)) {
  • 读取本地文件
    plugins/tts-train-pipeline/src/index.js:324
    if (existsSync(p)) { scnDir = p; break; }
  • 读取本地文件
    plugins/tts-train-pipeline/src/index.js:332
    if (!existsSync(scnDir)) {
  • 写入本地文件
    plugins/tts-train-pipeline/src/index.js:338
    mkdirSync(c.workspace.corpus, { recursive: true });
  • 读取本地文件
    plugins/tts-train-pipeline/src/index.js:401
    try { isLines = statSync(args.source).isFile(); } catch { isLines = false; }
  • 读取本地文件
    plugins/tts-train-pipeline/src/index.js:590
    if (!existsSync(wavDir)) {
  • 写入本地文件
    plugins/tts-train-pipeline/src/index.js:843
    mkdirSync(c.workspace.logs, { recursive: true });
  • 写入本地文件
    plugins/tts-train-pipeline/src/index.js:1283
    mkdirSync(join(file, '..'), { recursive: true });
  • 写入本地文件
    plugins/tts-train-pipeline/src/index.js:1284
    writeFileSync(file, JSON.stringify(reg, null, 2), 'utf8');
扫描于 2026/10/31(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

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

README

由 DeepSeek 最新模型翻译生成
DSH Anime Voice 正式版 v0.1.0 · 同时支持 DSH rc.2 / rc.3。 兼容维护:同时支持 DSH 0.2.1-rc.2 / rc.3,保留旧版用法与设置。验证范围与复现见 DSH 兼容说明。 番剧台词提取与 GPT-SoVITS v2 训练/配音的两个本地技能。与 DDSP 训练、歌曲翻唱项目分别维护。 2026-10-20 已核验一条真实 DSH 代表性链路:自然语言任务 → 技能加载 → 少量真实片段导出 → 数据集校验/清单 → 报告 → 已有检查点 CPU 配音。运行时使用 danger-full-access 授权,并调整了推理子进程的 NO_PROXY;受限模式、完整训练和人工听音仍待验证。见 宿主回执与验收范围。 | 技能 | 输入 | 输出 | | anime-voice-line-extractor | 本地音视频、已确认的角色映射 | 角色 WAV/TXT、绝对时间轴 CSV、train.list | | anime-voice-clone-training | 整集音频、人工确认的声纹参照、明确模型路径 | 整集重建数据集、训练特征/权重、单句配音 WAV/JSON | A 可以直接导出 绝对wav路径|角色|语言|文本。
展开完整文档(README 剩余 1 节)
DSH Anime Voice

正式版 v0.1.0 · 同时支持 DSH rc.2 / rc.3。

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

番剧台词提取与 GPT-SoVITS v2 训练/配音的两个本地技能。与 DDSP 训练、歌曲翻唱项目分别维护。

2026-10-20 已核验一条真实 DSH 代表性链路:自然语言任务 → 技能加载 → 少量真实片段导出 → 数据集校验/清单 → 报告 → 已有检查点 CPU 配音。运行时使用 danger-full-access 授权,并调整了推理子进程的 NO_PROXY;受限模式、完整训练和人工听音仍待验证。见 宿主回执与验收范围。

| 技能 | 输入 | 输出 |
| anime-voice-line-extractor | 本地音视频、已确认的角色映射 | 角色 WAV/TXT、绝对时间轴 CSV、train.list |
| anime-voice-clone-training | 整集音频、人工确认的声纹参照、明确模型路径 | 整集重建数据集、训练特征/权重、单句配音 WAV/JSON |

A 可以直接导出 绝对wav路径|角色|语言|文本。B 的主路线复用 A 建声纹参照,再从整集分离和带标点 ASR 重建数据集;不是把 A 的旧 157 条直接洗成新 291 条。训练器也可以独立读取 A 的清单,但素材是否适合训练仍需审核。

安装

git clone https://github.com/InariNGT-Ofiicial/dsh-anime-voice.git
cd dsh-anime-voice
./install.ps1 -SkillRoot "$env:USERPROFILE/.dsh/skills"

已经安装时加 -Update;脚本会先备份这两个技能。若 .dsh/skills 是 Junction,会写入它实际指向的技能根。安装不修改宿主配置、模型、Python 环境或其它技能。

Windows 11、PowerShell 7 和 Python 3.10–3.12 是本项目的目标环境。分析侧依赖见 requirements-analysis.txt;训练和推理必须使用已经配置好的 GPT-SoVITS v2 环境。分离使用独立的 MSST 兼容环境。不要把这几套环境混装。

复制 config.example.ps1 为本地配置,填入自己的路径后执行:

. ./config.local.ps1
$A = "$env:USERPROFILE/.dsh/skills/anime-voice-line-extractor/scripts"
$B = "$env:USERPROFILE/.dsh/skills/anime-voice-clone-training/scripts"
& $env:ANIME_PYTHON "$A/anime_lines.py" --help
& $env:ANIME_PYTHON "$B/run_pipeline.py" --list-stages

完整操作、依赖和可复现命令见 运行说明,宿主实测范围见 验证记录。在 DSH 新会话里用自然语言说明素材路径、角色、输出目录,以及允许哪些耗时阶段。技能目录存在只证明文件已安装;真实宿主验收必须包含模型选择技能、调用工具和生成产物的证据。

训练插件(可选)

plugins/tts-train-pipeline/ 是同一套 GPT-SoVITS 训练流程的 DSH 插件形态:14 个工具(tts_doctor / tts_script / tts_scan / tts_build / tts_preprocess / tts_run / tts_infer …),由宿主直接加载,不用在会话里逐步跑脚本。

cd plugins/tts-train-pipeline
npm test # 契约自检,不需要 GPT-SoVITS 环境
dsh plugin add .

它和两个 skill 的分工:skill 是「一次任务的脚本化流程」,插件是「常驻工具集」。两者共用同一个 GPT-SoVITS 工程与语料约定,不要同时改同一个实验目录。

0.2.0 新增两项与训练质量直接相关的改动,都有同批语料的对照:

- 数据集留尾:出料默认只裁句首静音,保留句尾自然衰减并兜 0.16s 静音底。旧做法每条都停在满电平,训出来的模型会吞末字。383 条语料对照:末三字完整念出率 33% → 93%,PER 0.197 → 0.018。
- 日语文本消 UNK:#(声调短语边界)与 引号/破折号/括号 都不在 732 项符号表里,会被降级成 UNK。
补丁幂等、自动备份、可回滚、打前核符号表;打了必须重训(只打不训是负收益,PER 0.197 → 0.236)。

详见该目录的 README 与 CHANGELOG。

许可随仓库整体:代码尚未指定开放许可证,插件 package.json 里的 license 因此标为 UNLICENSED(不是 MIT)。要引用或再分发请先取得授权。

能力边界

声纹、F0、ASR 一致性都是辅助筛选,不能替代人工听音与文本校对;默认 F0 下限为 0,必须按目标声音调整。标点只能说明文字形态,不能证明音频自然收尾——现在这条有可判读的信号了:插件出料会给出 tail_stats(收尾电平中位、尾部静音中位、切断比例),但它仍然只是体检,不是听音替代。脚本生成 WAV 不等于朗读正确,跨语种尤其需要逐句复听。
没有通用的「25/38 分钟就达标」门槛,也不把余弦相似度解释成「不可区分」。旧版本的声纹/F0 数字不代表当前权重已通过验收。当前维护验证优先复用已存在的 v2 检查点,不重新训练整个模型,也不重跑三集全量流程。

仓库只包含代码和脱敏技术验证记录;不包含番剧、声音素材、模型权重、用户会话或凭据。素材、声音及模型的使用授权由使用者确认,各上游依赖分别遵循其许可证。代码尚未指定开放许可证。

维护

python -m unittest discover -s tests -v

反馈问题时请提供脚本版本、已脱敏的命令/退出码、阶段、期望和实际产物。不要上传模型、私有路径、音频或账号配置。CPU 接口回归由 GitHub Actions 执行;GPU 和 DSH 宿主验证记录单独维护,不能由 CI 通过替代。
预览分享卡片长什么样 ↓InariNGT-Ofiicial/dsh-anime-voice
分享 · DeepSeek Harness Hub
InariNGT-Ofiicial/dsh-anime-voice

番剧角色台词提取与 GPT-SoVITS v2 训练配音技能,含 DSH 宿主实测记录

回到顶部