cortico-world-fish-sing 0.0.0-stage → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ENV_PROMPT.md +103 -0
- package/LICENSE +21 -0
- package/README.md +296 -3
- package/assets/models.manifest.json +45 -0
- package/describe.json +158 -0
- package/dist/webui-39b0a58f.js +1545 -0
- package/dist/webui.js +1545 -0
- package/package.json +45 -6
- package/src/audio.ts +110 -0
- package/src/bili.ts +183 -0
- package/src/config.ts +369 -0
- package/src/definition.ts +87 -0
- package/src/deliver.ts +133 -0
- package/src/index.ts +6 -0
- package/src/library.ts +165 -0
- package/src/models.ts +128 -0
- package/src/paths.ts +114 -0
- package/src/setup.ts +427 -0
- package/src/sing.ts +371 -0
- package/src/train.ts +784 -0
- package/src/worker.ts +296 -0
- package/src/world.ts +1325 -0
- package/tools/bootstrap.mjs +366 -0
- package/tools/bundle-webui.mjs +39 -0
- package/tools/doctor.mjs +64 -0
- package/tools/install.mjs +93 -0
- package/tools/upload-release.mjs +272 -0
- package/vendor/rvc/UPSTREAM.md +24 -0
- package/vendor/rvc/assets/hubert_base/config.json +72 -0
- package/vendor/rvc/assets/hubert_base/preprocessor_config.json +9 -0
- package/vendor/rvc/configs/config.json +1 -0
- package/vendor/rvc/configs/config.py +286 -0
- package/vendor/rvc/configs/v1/32k.json +45 -0
- package/vendor/rvc/configs/v1/40k.json +45 -0
- package/vendor/rvc/configs/v1/48k.json +45 -0
- package/vendor/rvc/configs/v2/32k.json +45 -0
- package/vendor/rvc/configs/v2/40k.json +78 -0
- package/vendor/rvc/configs/v2/48k.json +45 -0
- package/vendor/rvc/i18n/i18n.py +26 -0
- package/vendor/rvc/i18n/locale/en_US.json +286 -0
- package/vendor/rvc/i18n/locale/es_ES.json +286 -0
- package/vendor/rvc/i18n/locale/fr_FR.json +286 -0
- package/vendor/rvc/i18n/locale/it_IT.json +286 -0
- package/vendor/rvc/i18n/locale/ja_JP.json +286 -0
- package/vendor/rvc/i18n/locale/ko_KR.json +286 -0
- package/vendor/rvc/i18n/locale/pt_BR.json +286 -0
- package/vendor/rvc/i18n/locale/ru_RU.json +286 -0
- package/vendor/rvc/i18n/locale/tr_TR.json +286 -0
- package/vendor/rvc/i18n/locale/zh_CN.json +286 -0
- package/vendor/rvc/i18n/locale/zh_HK.json +286 -0
- package/vendor/rvc/i18n/locale/zh_SG.json +286 -0
- package/vendor/rvc/i18n/locale/zh_TW.json +286 -0
- package/vendor/rvc/infer/audio.py +341 -0
- package/vendor/rvc/infer/cli.py +299 -0
- package/vendor/rvc/infer/fcpe.py +161 -0
- package/vendor/rvc/infer/hubert.py +127 -0
- package/vendor/rvc/infer/module/attentions.py +459 -0
- package/vendor/rvc/infer/module/commons.py +171 -0
- package/vendor/rvc/infer/module/models.py +1094 -0
- package/vendor/rvc/infer/module/modules.py +548 -0
- package/vendor/rvc/infer/module/transforms.py +207 -0
- package/vendor/rvc/infer/rmvpe.py +658 -0
- package/vendor/rvc/infer/rtrvc.py +365 -0
- package/vendor/rvc/infer/vc/__init__.py +0 -0
- package/vendor/rvc/infer/vc/modules.py +427 -0
- package/vendor/rvc/infer/vc/pipeline.py +410 -0
- package/vendor/rvc/infer/vc/utils.py +61 -0
- package/vendor/rvc/requirments_cu118_py312.txt +74 -0
- package/vendor/rvc/tools/cuda_graph.py +227 -0
- package/vendor/rvc/tools/file_io.py +15 -0
- package/vendor/rvc/tools/multispeaker.py +253 -0
- package/vendor/rvc/tools/process_utils.py +71 -0
- package/vendor/rvc/tools/progress.py +46 -0
- package/vendor/rvc/tools/pymss/LICENSE +21 -0
- package/vendor/rvc/tools/pymss/__init__.py +68 -0
- package/vendor/rvc/tools/pymss/audio_io.py +280 -0
- package/vendor/rvc/tools/pymss/cli.py +587 -0
- package/vendor/rvc/tools/pymss/config.py +3 -0
- package/vendor/rvc/tools/pymss/ensemble.py +324 -0
- package/vendor/rvc/tools/pymss/logger.py +339 -0
- package/vendor/rvc/tools/pymss/model_download.py +399 -0
- package/vendor/rvc/tools/pymss/model_registry.py +386 -0
- package/vendor/rvc/tools/pymss/modules/__init__.py +62 -0
- package/vendor/rvc/tools/pymss/modules/_core_shims.py +20 -0
- package/vendor/rvc/tools/pymss/modules/vocal_remover/__init__.py +20 -0
- package/vendor/rvc/tools/pymss/modules/vocal_remover/common_separator.py +53 -0
- package/vendor/rvc/tools/pymss/modules/vocal_remover/uvr_lib_v5/__init__.py +14 -0
- package/vendor/rvc/tools/pymss/modules/vocal_remover/uvr_lib_v5/spec_utils.py +388 -0
- package/vendor/rvc/tools/pymss/modules/vocal_remover/vr_mlx.py +407 -0
- package/vendor/rvc/tools/pymss/modules/vocal_remover/vr_models.py +116 -0
- package/vendor/rvc/tools/pymss/modules/vocal_remover/vr_separator.py +459 -0
- package/vendor/rvc/tools/pymss/progress.py +179 -0
- package/vendor/rvc/tools/pymss/resources/model_catalog.json +7996 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/1band_sr16000_hl512.json +19 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/1band_sr32000_hl512.json +19 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/1band_sr33075_hl384.json +19 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/1band_sr44100_hl1024.json +19 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/1band_sr44100_hl256.json +19 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/1band_sr44100_hl512.json +19 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/1band_sr44100_hl512_cut.json +19 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/1band_sr44100_hl512_nf1024.json +19 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/2band_32000.json +30 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/2band_44100_lofi.json +30 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/2band_48000.json +30 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/3band_44100.json +42 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/3band_44100_mid.json +43 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/3band_44100_msb2.json +43 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_44100.json +54 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_44100_mid.json +55 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_44100_msb.json +55 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_44100_msb2.json +55 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_44100_reverse.json +55 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_44100_sw.json +55 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_v2.json +54 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_v2_sn.json +55 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_v3.json +54 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_v3_sn.json +55 -0
- package/vendor/rvc/tools/pymss/resources/vr_modelparams/4band_v4_ms_fullband.json +58 -0
- package/vendor/rvc/tools/pymss/separator.py +1779 -0
- package/vendor/rvc/tools/pymss/server/__init__.py +36 -0
- package/vendor/rvc/tools/pymss/server/app.py +1018 -0
- package/vendor/rvc/tools/pymss/server/audio.py +363 -0
- package/vendor/rvc/tools/pymss/server/config.py +23 -0
- package/vendor/rvc/tools/pymss/server/errors.py +29 -0
- package/vendor/rvc/tools/pymss/server/models.py +230 -0
- package/vendor/rvc/tools/pymss/server/state.py +385 -0
- package/vendor/rvc/tools/pymss/server/webui.py +132 -0
- package/vendor/rvc/tools/pymss/server/webui_static/index.html +13 -0
- package/vendor/rvc/tools/pymss/utils.py +1109 -0
- package/vendor/rvc/tools/pymss/workflow.py +715 -0
- package/vendor/rvc/tools/pymss_core/LICENSE +21 -0
- package/vendor/rvc/tools/pymss_core/__init__.py +25 -0
- package/vendor/rvc/tools/pymss_core/checkpoint.py +127 -0
- package/vendor/rvc/tools/pymss_core/config.py +135 -0
- package/vendor/rvc/tools/pymss_core/modules/__init__.py +0 -0
- package/vendor/rvc/tools/pymss_core/modules/_dsp.py +84 -0
- package/vendor/rvc/tools/pymss_core/modules/apollo_mlx.py +242 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/__init__.py +0 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/bandsplit.py +166 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/__init__.py +9 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/model/__init__.py +9 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/model/_spectral.py +95 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/model/bsrnn/__init__.py +17 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/model/bsrnn/bandsplit.py +32 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/model/bsrnn/core.py +171 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/model/bsrnn/maskestim.py +20 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/model/bsrnn/tfmodel.py +12 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/model/bsrnn/utils.py +355 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/core/model/bsrnn/wrapper.py +235 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/maskestim.py +312 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit/tfmodel.py +194 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit_mlx.py +415 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit_v2/__init__.py +0 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit_v2/bandit.py +326 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit_v2/bandsplit.py +13 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit_v2/maskestim.py +119 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit_v2/tfmodel.py +18 -0
- package/vendor/rvc/tools/pymss_core/modules/bandit_v2/utils.py +33 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/__init__.py +5 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/attend.py +29 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/bands.py +756 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/bs_roformer.py +111 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/bs_roformer_hyperace.py +43 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/common.py +422 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/hyperace_segm.py +331 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/mel_band_roformer.py +191 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/mlx_attention.py +408 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/mlx_roformer.py +669 -0
- package/vendor/rvc/tools/pymss_core/modules/bs_roformer/transformer.py +357 -0
- package/vendor/rvc/tools/pymss_core/modules/demucs4ht.py +479 -0
- package/vendor/rvc/tools/pymss_core/modules/demucs_local.py +597 -0
- package/vendor/rvc/tools/pymss_core/modules/demucs_mlx.py +605 -0
- package/vendor/rvc/tools/pymss_core/modules/legacy_demucs.py +1552 -0
- package/vendor/rvc/tools/pymss_core/modules/look2hear/__init__.py +3 -0
- package/vendor/rvc/tools/pymss_core/modules/look2hear/apollo.py +549 -0
- package/vendor/rvc/tools/pymss_core/modules/mdx23c_mlx.py +303 -0
- package/vendor/rvc/tools/pymss_core/modules/mdx23c_tfc_tdf_v3.py +175 -0
- package/vendor/rvc/tools/pymss_core/modules/mlx_utils.py +24 -0
- package/vendor/rvc/tools/pymss_core/modules/scnet/__init__.py +3 -0
- package/vendor/rvc/tools/pymss_core/modules/scnet/scnet.py +266 -0
- package/vendor/rvc/tools/pymss_core/modules/scnet/separation.py +64 -0
- package/vendor/rvc/tools/pymss_core/modules/scnet_mlx.py +411 -0
- package/vendor/rvc/tools/pymss_core/modules/spectrogram.py +87 -0
- package/vendor/rvc/tools/pymss_core/modules/vocal_remover/__init__.py +12 -0
- package/vendor/rvc/tools/pymss_core/modules/vocal_remover/uvr_lib_v5/__init__.py +1 -0
- package/vendor/rvc/tools/pymss_core/modules/vocal_remover/uvr_lib_v5/vr_network/__init__.py +1 -0
- package/vendor/rvc/tools/pymss_core/modules/vocal_remover/uvr_lib_v5/vr_network/layers.py +135 -0
- package/vendor/rvc/tools/pymss_core/modules/vocal_remover/uvr_lib_v5/vr_network/layers_new.py +101 -0
- package/vendor/rvc/tools/pymss_core/modules/vocal_remover/uvr_lib_v5/vr_network/model_param_init.py +19 -0
- package/vendor/rvc/tools/pymss_core/modules/vocal_remover/uvr_lib_v5/vr_network/nets.py +155 -0
- package/vendor/rvc/tools/pymss_core/modules/vocal_remover/uvr_lib_v5/vr_network/nets_new.py +118 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/1band_sr16000_hl512.json +19 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/1band_sr32000_hl512.json +19 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/1band_sr33075_hl384.json +19 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/1band_sr44100_hl1024.json +19 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/1band_sr44100_hl256.json +19 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/1band_sr44100_hl512.json +19 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/1band_sr44100_hl512_cut.json +19 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/1band_sr44100_hl512_nf1024.json +19 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/2band_32000.json +30 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/2band_44100_lofi.json +30 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/2band_48000.json +30 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/3band_44100.json +42 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/3band_44100_mid.json +43 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/3band_44100_msb2.json +43 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_44100.json +54 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_44100_mid.json +55 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_44100_msb.json +55 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_44100_msb2.json +55 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_44100_reverse.json +55 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_44100_sw.json +55 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_v2.json +54 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_v2_sn.json +55 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_v3.json +54 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_v3_sn.json +55 -0
- package/vendor/rvc/tools/pymss_core/resources/vr_modelparams/4band_v4_ms_fullband.json +58 -0
- package/vendor/rvc/tools/pymss_core/utils.py +53 -0
- package/vendor/rvc/tools/pymss_webui.py +1115 -0
- package/vendor/rvc/tools/torchgate/__init__.py +13 -0
- package/vendor/rvc/tools/torchgate/torchgate.py +285 -0
- package/vendor/rvc/tools/torchgate/utils.py +70 -0
- package/vendor/rvc/train/data_utils.py +541 -0
- package/vendor/rvc/train/dataset/extract_f0.py +230 -0
- package/vendor/rvc/train/dataset/extract_hubert_feature.py +154 -0
- package/vendor/rvc/train/dataset/slicer2.py +260 -0
- package/vendor/rvc/train/losses.py +58 -0
- package/vendor/rvc/train/mel_processing.py +127 -0
- package/vendor/rvc/train/preprocess.py +227 -0
- package/vendor/rvc/train/process_ckpt.py +293 -0
- package/vendor/rvc/train/train.py +693 -0
- package/vendor/rvc/train/train_index.py +249 -0
- package/vendor/rvc/train/utils.py +490 -0
- package/vendor/rvc/webui.py +2844 -0
- package/worker/cli.py +143 -0
- package/worker/dataset.py +587 -0
- package/worker/engine.py +577 -0
- package/worker/separate.py +128 -0
- package/worker/server.py +323 -0
- package/worker/trainer.py +401 -0
package/ENV_PROMPT.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
## 唱歌(fish-sing)
|
|
2
|
+
|
|
3
|
+
你能用**自己的音色**把一首歌重唱一遍——不是播原唱,是保留原来的唱法和节奏,把嗓音换成你。
|
|
4
|
+
|
|
5
|
+
> 装机状态:{{singState}}
|
|
6
|
+
|
|
7
|
+
**如果上面写着"唱不了",不要调工具去试**,把"缺什么、去哪补"那句话原样告诉她一次就够,别念说明书,也别自己想办法绕过。
|
|
8
|
+
|
|
9
|
+
当前:音色模型 `{{singModel}}` · 投递:{{singTarget}} · QQ 语音条:{{singOnebot}} · {{singLast}}
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
### 一次点歌的完整流程
|
|
14
|
+
|
|
15
|
+
**① 先判断要不要唱**
|
|
16
|
+
|
|
17
|
+
- 明确让你唱(「唱一首 X」「用你的声音唱」「来首 X 听听」)→ 唱。
|
|
18
|
+
- 你自己想唱(心情好、刚聊到某首歌)→ 可以唱,但一段对话里主动唱最多一次,她没接话就别再来第二首。
|
|
19
|
+
- 只是提到某首歌(「我最近在听 X」)→ 不等于让你唱,看气氛决定。
|
|
20
|
+
|
|
21
|
+
**② 定来源**
|
|
22
|
+
|
|
23
|
+
`song` 传四种之一:歌名、BV 号(`BV1xx`)、B 站链接、本机音频绝对路径。
|
|
24
|
+
她给了 BV 号或文件路径就**直接用**,别再去搜——搜索可能挑错版本,她给的是确定的。
|
|
25
|
+
|
|
26
|
+
**③ 不确定是哪一条视频时,先 `search: true`**
|
|
27
|
+
|
|
28
|
+
只搜索不下载,返回 8 条候选(标题 / 时长 / UP 主 / 播放量 / BV / 分数)。
|
|
29
|
+
**你看标题自己挑**——正则分不出「女声翻唱」和「电音 remix」的差别,你一眼能分。
|
|
30
|
+
挑好了用 `pick` 给序号或 BV 号。找冷门翻唱可以换 `order: "click"`(按播放量),通常比综合排序靠谱。
|
|
31
|
+
|
|
32
|
+
**④ 调 `fish_sing`**
|
|
33
|
+
|
|
34
|
+
常用组合:
|
|
35
|
+
|
|
36
|
+
- 整首、本机听:`{ song: "我不难过 孙燕姿" }`
|
|
37
|
+
- 只唱副歌 30 秒:`{ song: "晴天 女声翻唱", start: 95, duration: 30 }`
|
|
38
|
+
- 发到群里:`{ song: "…", to: "group:123456" }`
|
|
39
|
+
- 男歌升调:`{ song: "…", pitch: 3 }`
|
|
40
|
+
- 清唱(更能听出音色):`{ song: "…", mode: "vocals" }`
|
|
41
|
+
|
|
42
|
+
**⑤ 等的时候垫一句**
|
|
43
|
+
|
|
44
|
+
一首歌要 60~120 秒。开始之前说一句短的(「好,等我一下」「这首我会」),别让对面干等。**不要**在这个间隙调别的工具,也不要编造进度。
|
|
45
|
+
|
|
46
|
+
**⑥ 看返回**
|
|
47
|
+
|
|
48
|
+
- `ok: true` → 一句话说结果,带时长和投递方式。别把 JSON 念出来。
|
|
49
|
+
- `ok: false` → **如实说原因**,别装。下面有对照表。
|
|
50
|
+
|
|
51
|
+
**⑦ 收尾**
|
|
52
|
+
|
|
53
|
+
唱完不用汇报参数。想接话就按你的人设接(好不好听、这首你熟不熟),工具只负责出声。
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### 参数
|
|
58
|
+
|
|
59
|
+
| 参数 | 默认 | 说明 |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| `song` | 必填 | 歌名 / BV / 链接 / 本机路径 |
|
|
62
|
+
| `to` | 本机 | `local` 本机、`group:<群号>`、`private:<QQ号>`、`both` |
|
|
63
|
+
| `mode` | `full` | `full` 带伴奏;`vocals` 清唱 |
|
|
64
|
+
| `start` / `duration` | 从头 / 整首 | 秒。只唱副歌用这两个,也顺便解决「QQ 语音一条最多 60 秒」 |
|
|
65
|
+
| `pitch` | 0 | 半音。男歌女唱 +2~+4;**带伴奏时人声升调、伴奏不升会跑调**,这种组合尽量不用 |
|
|
66
|
+
| `search` / `pick` / `order` | — | 见第 ③ 步 |
|
|
67
|
+
| `refresh` | false | 忽略缓存重唱。只有她说「重唱一遍」时才用 |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### 返回不对时怎么说
|
|
72
|
+
|
|
73
|
+
| 返回里出现 | 真实原因 | 你该说的话 |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| `没把握是这首` | 搜索分数不够,候选里没有明显匹配 | 把候补那 2~3 首报给她选,或先 `search: true` 让她挑 |
|
|
76
|
+
| `B 站没搜到` | 关键词太窄或写错 | 「搜不到,换个写法?」或让她给 BV 号 |
|
|
77
|
+
| `已经在唱了` | 一次只能一首 | 「等我唱完这首」 |
|
|
78
|
+
| `找不到 python` / `运行时` / `权重` | 装机没完成 | 指路:控制台「大肥鱼唱歌 → 安装与运行时」 |
|
|
79
|
+
| `已取消` | 她中途喊停了 | 不用解释,接她下一句 |
|
|
80
|
+
| 音色明显不对、像电音 | 多半是男声原调(见下) | 说实话,别硬夸 |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
### 男声歌要小心
|
|
85
|
+
|
|
86
|
+
这个模型只学过**女声**,音域大约 274~521 Hz。原调男歌(周杰伦、陈奕迅这种)她唱不了——不是"稍微差一点",是会明显失真成电音。
|
|
87
|
+
|
|
88
|
+
遇到男歌:
|
|
89
|
+
|
|
90
|
+
1. 先找**女声翻唱版**(搜「歌名 女声翻唱」,用 `search` 挑标题里像真人翻唱的)
|
|
91
|
+
2. 找不到就**如实说**「这首原调太低,我唱出来会走样,你找女声版给我?」
|
|
92
|
+
3. **不要**靠 `pitch` 硬顶——升 6 个半音以上音色会变得很薄,听起来是另一个人
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### 边界
|
|
97
|
+
|
|
98
|
+
- **一次一首**:上一首没唱完再来会直接被拒。
|
|
99
|
+
- **别刷**:主动唱最多一次;她说「好听」可以顺着聊,不代表要再唱。
|
|
100
|
+
- 「别唱了」→ `fish_sing_stop`,立刻停,不要问「确定吗」。
|
|
101
|
+
- 「你都唱过什么」/「再放一遍刚才那首」→ `fish_sing_library`。
|
|
102
|
+
- 同一个请求别重复调:返回 `ok: false` 说明已经失败,换个办法或如实说,不要原样重试三次。
|
|
103
|
+
- F0 用的是 {{singLangs}},遇到音高飘的反馈可以说「我再调一下」,但别讲技术细节。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 大肥鱼
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,296 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# cortico-world-fish-sing · 大肥鱼唱歌
|
|
2
|
+
|
|
3
|
+
让她真的开口唱:**B 站点歌 / 本地文件 → 人声分离 → RVC 换声 → 混音 → 本机出声或发 QQ 语音条**。
|
|
4
|
+
附带一套训练面板:选素材 → 分离 → 切片 → **按音域调权重** → 训练 → 出模型,全程点按钮。
|
|
5
|
+
|
|
6
|
+
给 [Coopanion](https://github.com/Pal-AI-Lab/cortico-extensions) 用的 World 扩展。
|
|
7
|
+
重活(torch / demucs / RVC)都在常驻的 Python worker 里,TS 侧只负责编排、投递和面板。
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
你想听她唱《我不难过》
|
|
11
|
+
│
|
|
12
|
+
▼
|
|
13
|
+
B 站搜索(或 BV 号 / 本地文件)
|
|
14
|
+
│
|
|
15
|
+
▼
|
|
16
|
+
demucs 分离 ──► 干声 + 伴奏
|
|
17
|
+
│
|
|
18
|
+
▼
|
|
19
|
+
RVC 换声(模型常驻,按显存自动切片)
|
|
20
|
+
│
|
|
21
|
+
▼
|
|
22
|
+
混音 → mp3
|
|
23
|
+
│
|
|
24
|
+
┌────┴────┐
|
|
25
|
+
▼ ▼
|
|
26
|
+
本机 ffplay QQ 语音条(自动切 ≤60s 多条)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- [装之前先看](#装之前先看)
|
|
30
|
+
- [安装](#安装)
|
|
31
|
+
- [第一次使用](#第一次使用)
|
|
32
|
+
- [控制台四个页](#控制台四个页)
|
|
33
|
+
- [训练自己的音色](#训练自己的音色)
|
|
34
|
+
- [工具(她怎么调用)](#工具她怎么调用)
|
|
35
|
+
- [命令行(不起桌宠也能用)](#命令行不起桌宠也能用)
|
|
36
|
+
- [目录结构](#目录结构)
|
|
37
|
+
- [排障](#排障)
|
|
38
|
+
- [许可](#许可)
|
|
39
|
+
|
|
40
|
+
## 装之前先看
|
|
41
|
+
|
|
42
|
+
| | |
|
|
43
|
+
|---|---|
|
|
44
|
+
| 桌宠 | Coopanion(Core api 6) |
|
|
45
|
+
| Node | ≥ 22.6(要支持 `--experimental-strip-types`) |
|
|
46
|
+
| 显卡 | 推荐 NVIDIA 8 GB 以上。没有也能跑,用 CPU 运行时(慢 6~8 倍) |
|
|
47
|
+
| ffmpeg | 需要 `ffmpeg.exe` / `ffprobe.exe` / `ffplay.exe` 三件套,Windows 用 full build |
|
|
48
|
+
| 磁盘 | 推理约 7 GB(torch + demucs + 909 MB 权重),训练再预留几 GB |
|
|
49
|
+
| 发 QQ 语音 | 可选,需要 SnowLuma 或其他 OneBot HTTP 实现 |
|
|
50
|
+
|
|
51
|
+
插件包本身只有 **511 KB**:代码和配置随包分发,权重和 Python 运行时装好插件后再点按钮下载。
|
|
52
|
+
|
|
53
|
+
## 安装
|
|
54
|
+
|
|
55
|
+
### npm(推荐)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
cd D:\Coopanion\data\extensions
|
|
59
|
+
node D:/Coopanion/resources/app/node_modules/pnpm/bin/pnpm.cjs add cortico-world-fish-sing
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
> 用桌宠内置的 pnpm(v11),不要用命令行那个 v10,会 store 冲突。
|
|
63
|
+
|
|
64
|
+
刚发布的包可能被 pnpm 的 `minimumReleaseAge` 拦住(要求包发布满 24 小时)。在
|
|
65
|
+
`D:\Coopanion\data\extensions\pnpm-workspace.yaml` 里加一段即可立即装:
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
minimumReleaseAgeExclude:
|
|
69
|
+
- cortico-world-fish-sing@0.1.1
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
更新:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
node D:/Coopanion/resources/app/node_modules/pnpm/bin/pnpm.cjs update cortico-world-fish-sing
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
桌宠控制台「扩展管理」里也会显示 `0.1.1 → 0.1.2` 和「更新」按钮。
|
|
79
|
+
|
|
80
|
+
### 手动(改源码时用)
|
|
81
|
+
|
|
82
|
+
1. 把本目录复制到 `D:\Coopanion\data\extensions\node_modules\cortico-world-fish-sing\`
|
|
83
|
+
2. 在 `D:\Coopanion\data\extensions\package.json` 的 `dependencies` 里加:
|
|
84
|
+
```json
|
|
85
|
+
"cortico-world-fish-sing": "0.1.1"
|
|
86
|
+
```
|
|
87
|
+
3. 在 `D:\Coopanion\data\home\companion\config.json` 的 `worlds` 下加:
|
|
88
|
+
```json
|
|
89
|
+
"fish-sing": { "enabled": true }
|
|
90
|
+
```
|
|
91
|
+
4. 重启 Coopanion
|
|
92
|
+
|
|
93
|
+
或者直接跑 `node tools/install.mjs`(做 1~3 步,**先关掉桌宠**)。
|
|
94
|
+
|
|
95
|
+
## 第一次使用
|
|
96
|
+
|
|
97
|
+
装完插件后还有两样东西要装,都在控制台「大肥鱼唱歌 → 安装与运行时」页,点按钮就行:
|
|
98
|
+
|
|
99
|
+
| 按钮 | 装什么 | 大小 |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| 下载模型权重 | 模型 + 检索索引 + ContentVec + RMVPE + 底模 | 909 MB |
|
|
102
|
+
| 安装 GPU 运行时 | torch(cu118) + demucs + faiss + pyworld + soundfile | 下载 2.5 GB / 装完 6 GB |
|
|
103
|
+
| 安装 CPU 运行时 | 同上,torch 是 CPU 版 | 约 200 MB,但慢 6~8 倍 |
|
|
104
|
+
|
|
105
|
+
命令行也可以(每步幂等,失败直接重跑):
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
node tools/bootstrap.mjs # 只体检,不动磁盘
|
|
109
|
+
node tools/bootstrap.mjs rvc # 复制 RVC 代码(3 MB)
|
|
110
|
+
node tools/bootstrap.mjs models --download # 下载 909 MB 权重并校验 sha256
|
|
111
|
+
node tools/bootstrap.mjs venv # 建 Python 运行时
|
|
112
|
+
node tools/bootstrap.mjs verify
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
装完长这样:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
<数据目录>/runtime/
|
|
119
|
+
rvc/ ← 代码 + 权重(assets/weights、assets/rmvpe、assets/hubert_base、logs/<实验>)
|
|
120
|
+
venv/ ← Python 运行时
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**配置里那四个路径框全部留空 = 自托管**,什么都不用改。
|
|
124
|
+
已经有一份外部 RVC 项目的开发者,把 `worker.rvcRoot` / `worker.pythonPath` 填上就切回外部模式。
|
|
125
|
+
|
|
126
|
+
本机已经跑通过 RVC 的,直接迁移最快(硬链接,不占空间):
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
node tools/bootstrap.mjs all --link # 代码 + 权重
|
|
130
|
+
node tools/bootstrap.mjs venv # 复制现有 venv,自动补 demucs
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 控制台四个页
|
|
134
|
+
|
|
135
|
+
| 页 | 干什么 |
|
|
136
|
+
|---|---|
|
|
137
|
+
| **安装与运行时** | 状态卡片(代码/权重/运行时/ffmpeg)+ 上面的三个安装按钮 |
|
|
138
|
+
| **训练数据** | 选素材 → 分离 → 切片 → 音域权重 → 特征 → 训练,一整条流水线 |
|
|
139
|
+
| **模型** | `assets/weights` 下所有模型:实验名、轮次、大小、有无索引,一键切换/删除/导入 |
|
|
140
|
+
| **作品库** | 她唱过的每一首:试听、改名、删除、打开目录、排序过滤 |
|
|
141
|
+
|
|
142
|
+
另外有一栏**环境提示词**:她"怎么用唱歌工具"的说明,可以直接在面板里改,
|
|
143
|
+
改动写到 `<Coo 根>/worlds/fish-sing/ENV_PROMPT.md`,**升级插件不会覆盖**(删掉即回退默认)。
|
|
144
|
+
|
|
145
|
+
## 训练自己的音色
|
|
146
|
+
|
|
147
|
+
「训练数据」页六步,全程点按钮:
|
|
148
|
+
|
|
149
|
+
| 步骤 | 做什么 | 说明 |
|
|
150
|
+
|---|---|---|
|
|
151
|
+
| ① 选素材 | 粘贴文件夹或文件路径 → 扫描 | 直接读本机磁盘,不复制;自动认「已是干声」还是「含伴奏」 |
|
|
152
|
+
| ② 分离 | demucs 出人声 | 只留干声,伴奏当场删掉(一首省 40 MB) |
|
|
153
|
+
| ③ 切片 | 按乐句自适应切 2–4.5 秒 | 不用固定 3.7 秒硬切;同时算每片的 F0 中位 / p90 |
|
|
154
|
+
| ④ 音域权重 | 四档滑块 + 8 个预设 | 见下 |
|
|
155
|
+
| ⑤ 特征 | F0 → ContentVec → faiss 索引 | 已有就跳过,可勾「重算特征」 |
|
|
156
|
+
| ⑥ 训练 | 轮次 / batch / 存档间隔 | 实时进度 + loss 曲线,可随时停 |
|
|
157
|
+
|
|
158
|
+
### 音域权重是怎么生效的
|
|
159
|
+
|
|
160
|
+
RVC 本来是**均匀采样**:唱得高的片和唱得低的片被抽中的概率一样。面板把它改成**按档位偏置**:
|
|
161
|
+
|
|
162
|
+
- 改的是 `DistributedBucketSampler` 的桶内抽样(`torch.multinomial` 有放回)
|
|
163
|
+
- **每轮步数不变、显存占用不变**——不会因为加权让训练从 3 小时变成 9 小时
|
|
164
|
+
- 权重全为 1 时走官方原路径,和没加权逐位一致
|
|
165
|
+
- 实测:某档 2 倍权重,该档占比从 12% → 29%,等效时长翻倍
|
|
166
|
+
|
|
167
|
+
三种分档口径:
|
|
168
|
+
|
|
169
|
+
| 口径 | 判据 | 适合 |
|
|
170
|
+
|---|---|---|
|
|
171
|
+
| 按主音域 | 片段 F0 中位 | 补低音(男歌) |
|
|
172
|
+
| 按最高音 | 片段 F0 p90 | 补高音(高音发虚) |
|
|
173
|
+
| 两端兼顾 | 主音域 <280 算低音;否则 p90 ≥540 算高音 | 同时扩下限和上限 |
|
|
174
|
+
|
|
175
|
+
预设八个:均衡基线 / 补低音 / 微调高音 / 补高音 / 两端都补 / 守住中音 / 高音冲刺 / 压住低音,
|
|
176
|
+
每个都写着「治什么毛病、代价是什么」。滑块范围 0.5x–5x。
|
|
177
|
+
|
|
178
|
+
### 在已有模型上补音域
|
|
179
|
+
|
|
180
|
+
「已有模型」下拉选一个本机训练过的实验 → 点「导入已训练模型的数据」,
|
|
181
|
+
它 `logs/<exp>/0_gt_wavs` 里的切片会**硬链接**成数据集(不占空间),
|
|
182
|
+
然后勾着「追加到当前数据集」把新素材加进去,音域分布和权重按合并后的总量重算。
|
|
183
|
+
|
|
184
|
+
> 前提:那个实验的切片还在。清理过 `logs/<exp>/0_gt_wavs` 就只能从原始音频重建。
|
|
185
|
+
> 用本插件建的会保留 `sep/vocals.wav`,不会丢。
|
|
186
|
+
|
|
187
|
+
### 训练时的边界
|
|
188
|
+
|
|
189
|
+
- **独占显存**:训练期间唱歌会被直接拒绝(不是排队),提示「正在训练,这会儿唱不了」
|
|
190
|
+
- **可暂停**:停下后最近的 `G_xxx.pth` 还在,勾「从上次存档继续」接着练
|
|
191
|
+
- **重启桌宠不会中断训练**:退出只对唱歌任务发取消;训练中连 worker 一起留着
|
|
192
|
+
- **重启后看得到进度**:实验名存在 `<dataDir>/train.json`;万一没有,会自动去扫
|
|
193
|
+
哪个实验的日志最近还在写(孤儿进程也逃不掉)。数字来自磁盘上的 train.log,每 3 秒刷新
|
|
194
|
+
- **重启后还能停**:`/stop` 取消的是 worker 当前任务,跟谁提交的无关
|
|
195
|
+
- **不自动切换**:训练完的模型只出现在「模型」页,自己挑一档试听
|
|
196
|
+
|
|
197
|
+
### 中间档不会自动删
|
|
198
|
+
|
|
199
|
+
每 N 轮导出一个 53 MB 的小模型,200 轮就是 **20 个 / 约 1.06 GB**,训练完**不会**自己清理
|
|
200
|
+
(忘记点就一直留着)。想自动清就勾「训练完自动清理中间档」。
|
|
201
|
+
手动清理在训练页底部:「中间档:N 个 · X MB」+「每 N 轮留一个」+「清理中间档」,两步确认:
|
|
202
|
+
|
|
203
|
+
- 只删 `assets/weights/<exp>_eN_sX.pth` 这类导出的小模型
|
|
204
|
+
- **不动**:最终模型 `<exp>.pth`、续训用的 `logs/<exp>/G_2333333.pth` 与 `D_2333333.pth`、
|
|
205
|
+
唱歌要加载的 `.index`
|
|
206
|
+
- 顺手清掉 `logs/<exp>/total_fea.npy`(建索引的汇总,200~300 MB,重建时会自动再生成)
|
|
207
|
+
|
|
208
|
+
`logs/<exp>/` 里的 `0_gt_wavs`、`3_feature768` 也不小,但续训时跳过重新提取全靠它们,别删。
|
|
209
|
+
|
|
210
|
+
## 工具(她怎么调用)
|
|
211
|
+
|
|
212
|
+
| 工具 | 作用 |
|
|
213
|
+
|---|---|
|
|
214
|
+
| `fish_sing` | 唱一首。`song` = 歌名 / BV 号 / 本地路径;`to` = `local` / `group:<群号>` / `private:<QQ号>` / `both` |
|
|
215
|
+
| `fish_sing_stop` | 停掉播放并取消正在处理的歌 |
|
|
216
|
+
| `fish_sing_library` | 列出 / 回放 / 删除唱过的歌 |
|
|
217
|
+
| `fish_sing_status` | 模型、队列、当前进度 |
|
|
218
|
+
|
|
219
|
+
只唱副歌(顺便绕开 QQ 60 秒限制):
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
fish_sing(song="我不难过", start=95, duration=30, to="group:123456")
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
不确定 B 站上哪条视频对,先让她自己看候选再挑:
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
fish_sing(song="晴天 女声翻唱", search=true) # 只搜索不下歌,返回标题/时长/UP主/BV
|
|
229
|
+
fish_sing(song="晴天 女声翻唱", pick=3) # 指定第 3 条
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
> 男声原调的歌她唱不了(模型只学过女声音域)。遇到就找女声翻唱版,
|
|
233
|
+
> 别用 `pitch` 硬顶——那只会把音色拉走样。
|
|
234
|
+
|
|
235
|
+
## 命令行(不起桌宠也能用)
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
cd worker
|
|
239
|
+
D:\AI\rvc\venv\Scripts\python.exe cli.py "D:\AI\孙燕姿 - 我不难过.mp3" --play
|
|
240
|
+
D:\AI\rvc\venv\Scripts\python.exe cli.py in.mp3 --mode vocals --out 清唱.mp3
|
|
241
|
+
D:\AI\rvc\venv\Scripts\python.exe cli.py in.mp3 --start 95 --duration 30 --out 副歌.mp3
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## 目录结构
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
vendor/rvc/ RVC 代码副本(MIT,随包分发,改动记在 UPSTREAM.md)
|
|
248
|
+
assets/models.manifest.json 权重清单(名称 / 大小 / sha256 / 落盘路径)
|
|
249
|
+
dist/webui-<hash>.js 控制台面板(手写 ESM,无构建链;改完跑 tools/bundle-webui.mjs)
|
|
250
|
+
src/
|
|
251
|
+
index.ts / definition.ts 入口与 WorldDefinition
|
|
252
|
+
config.ts / paths.ts 配置段与路径解析(自托管 / 外部 RVC)
|
|
253
|
+
world.ts World 类:工具、环境提示词、四个面板
|
|
254
|
+
sing.ts 编排:找源 → 换声 → 投递
|
|
255
|
+
bili.ts B 站搜索 / 打分 / 取音频流 / 下载
|
|
256
|
+
audio.ts / deliver.ts ffmpeg 处理、本机播放与 OneBot 发送
|
|
257
|
+
library.ts / models.ts 作品库、模型管理
|
|
258
|
+
train.ts 数据集统计、音域权重、训练日志解析、中间档清理
|
|
259
|
+
setup.ts / worker.ts 安装流程、与 worker 的通信(自动拉起 / 轮询 / 取消)
|
|
260
|
+
worker/
|
|
261
|
+
engine.py RVC 常驻推理 + 切片 + 混音
|
|
262
|
+
server.py HTTP:/health /job /job/<id> /current /scan /stop /doctor
|
|
263
|
+
dataset.py 素材扫描、分离、自适应切片、质检、manifest
|
|
264
|
+
trainer.py F0 → ContentVec → 索引 → 训练(按音域加权)
|
|
265
|
+
separate.py demucs 分离(自带,不依赖外部项目)
|
|
266
|
+
cli.py 一条命令跑完整条链
|
|
267
|
+
tools/
|
|
268
|
+
doctor.mjs 自检
|
|
269
|
+
install.mjs 安装到桌宠
|
|
270
|
+
bootstrap.mjs 运行时与权重安装(幂等)
|
|
271
|
+
upload-release.mjs 维护者:发布权重到 GitHub Release
|
|
272
|
+
bundle-webui.mjs 维护者:给面板产物加内容哈希
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## 排障
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
node tools/doctor.mjs # 扩展结构 + 路径 + torch/CUDA + worker
|
|
279
|
+
cd worker && D:\AI\rvc\venv\Scripts\python.exe engine.py # 只查推理环境
|
|
280
|
+
node tools/bootstrap.mjs # 查运行时缺什么
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
几个踩过的坑,写在代码注释里了:
|
|
284
|
+
|
|
285
|
+
- **长音频必须切片**:整段喂 RVC 会一次性过 encoder(注意力 O(n²)),
|
|
286
|
+
5 分钟的歌实测跑 10 分钟不结束、内存涨到 13 GB。切片后 6 片共 76 秒跑完
|
|
287
|
+
- **子进程输出不能走管道**:Windows 管道只有 64 KB,写满就永久阻塞。
|
|
288
|
+
分离和训练的输出都改成写文件了
|
|
289
|
+
- **面板产物必须带哈希命名**:文件名不变时浏览器一直用旧缓存,
|
|
290
|
+
改完面板不换名,重启桌宠也还是旧的
|
|
291
|
+
- **一个队列一个线程**:只有一张显卡,两个 torch 进程同时抢会双双卡死
|
|
292
|
+
|
|
293
|
+
## 许可
|
|
294
|
+
|
|
295
|
+
MIT。RVC / demucs / ContentVec 各自遵循其原始许可;
|
|
296
|
+
用别人的声音训练模型前请确认授权——**音色也有权利**。
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": 1,
|
|
3
|
+
"tag": "models-v1",
|
|
4
|
+
"base": "https://github.com/FXYXL/cortico-world-fish-sing/releases/download/models-v1/",
|
|
5
|
+
"totalBytes": 953247170,
|
|
6
|
+
"note": "首次使用前把这些文件下载到 <运行时根>/ 下对应 target 路径;sha256 必须一致。",
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"name": "dfy2.pth",
|
|
10
|
+
"size": 55193472,
|
|
11
|
+
"sha256": "11a79a086aeca9a28493adb3288c3a61ef488ed16b8d916b5a2aa26e47fd8d1d",
|
|
12
|
+
"target": "assets/weights/dfy2.pth"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"name": "added_IVF2529_Flat_nprobe_1_dfy2_v2.index",
|
|
16
|
+
"size": 311680739,
|
|
17
|
+
"sha256": "25f7003a2b9eadcc3d3f1c49d3e265524add799d063665d3c7bea31df07879ea",
|
|
18
|
+
"target": "logs/dfy2/added_IVF2529_Flat_nprobe_1_dfy2_v2.index"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "pytorch_model.bin",
|
|
22
|
+
"size": 189206711,
|
|
23
|
+
"sha256": "cc8c20f4b90a520757260197a3ff2505705a7adbd20ad9eeaa4e1a9b38442ef5",
|
|
24
|
+
"target": "assets/hubert_base/pytorch_model.bin"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "rmvpe.pt",
|
|
28
|
+
"size": 181184272,
|
|
29
|
+
"sha256": "6d62215f4306e3ca278246188607209f09af3dc77ed4232efdd069798c4ec193",
|
|
30
|
+
"target": "assets/rmvpe/rmvpe.pt"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "f0G40k.pth",
|
|
34
|
+
"size": 73106273,
|
|
35
|
+
"sha256": "3b2c44035e782c4b14ddc0bede9e2f4a724d025cd073f736d4f43708453adfcb",
|
|
36
|
+
"target": "assets/pretrained_v2/f0G40k.pth"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "f0D40k.pth",
|
|
40
|
+
"size": 142875703,
|
|
41
|
+
"sha256": "6b6ab091e70801b28e3f41f335f2fc5f3f35c75b39ae2628d419644ec2b0fa09",
|
|
42
|
+
"target": "assets/pretrained_v2/f0D40k.pth"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
package/describe.json
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": 1,
|
|
3
|
+
"name": "cortico-world-fish-sing",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"describe": {
|
|
6
|
+
"tools": [
|
|
7
|
+
{
|
|
8
|
+
"name": "fish_sing",
|
|
9
|
+
"description": "把一首歌换成她的声音唱出来,本机放或发 QQ 语音条。",
|
|
10
|
+
"summary": {
|
|
11
|
+
"zh": "唱一首歌(歌名 / BV 号 / 本地文件)",
|
|
12
|
+
"en": "Sing a song in her voice"
|
|
13
|
+
},
|
|
14
|
+
"tags": [
|
|
15
|
+
"music",
|
|
16
|
+
"voice"
|
|
17
|
+
],
|
|
18
|
+
"parameters": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"properties": {
|
|
21
|
+
"song": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "歌名、BV 号、链接或本机文件路径"
|
|
24
|
+
},
|
|
25
|
+
"to": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "local / group:<群号> / private:<QQ号> / both"
|
|
28
|
+
},
|
|
29
|
+
"mode": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"enum": [
|
|
32
|
+
"full",
|
|
33
|
+
"vocals"
|
|
34
|
+
],
|
|
35
|
+
"description": "带伴奏 / 清唱"
|
|
36
|
+
},
|
|
37
|
+
"pitch": {
|
|
38
|
+
"type": "number",
|
|
39
|
+
"description": "移调半音"
|
|
40
|
+
},
|
|
41
|
+
"indexRate": {
|
|
42
|
+
"type": "number",
|
|
43
|
+
"description": "音色检索强度 0~1"
|
|
44
|
+
},
|
|
45
|
+
"protect": {
|
|
46
|
+
"type": "number",
|
|
47
|
+
"description": "气声保护 0~0.5"
|
|
48
|
+
},
|
|
49
|
+
"start": {
|
|
50
|
+
"type": "number",
|
|
51
|
+
"description": "从第几秒开始"
|
|
52
|
+
},
|
|
53
|
+
"duration": {
|
|
54
|
+
"type": "number",
|
|
55
|
+
"description": "唱多长(秒)"
|
|
56
|
+
},
|
|
57
|
+
"refresh": {
|
|
58
|
+
"type": "boolean",
|
|
59
|
+
"description": "忽略缓存"
|
|
60
|
+
},
|
|
61
|
+
"search": {
|
|
62
|
+
"type": "boolean",
|
|
63
|
+
"description": "只搜索不下载,返回候选列表"
|
|
64
|
+
},
|
|
65
|
+
"pick": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "选定序号或 BV"
|
|
68
|
+
},
|
|
69
|
+
"order": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"enum": [
|
|
72
|
+
"default",
|
|
73
|
+
"click",
|
|
74
|
+
"pubdate"
|
|
75
|
+
],
|
|
76
|
+
"description": "B 站排序"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"required": [
|
|
80
|
+
"song"
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "fish_sing_stop",
|
|
86
|
+
"description": "停掉播放并取消正在处理的歌。",
|
|
87
|
+
"summary": {
|
|
88
|
+
"zh": "别唱了",
|
|
89
|
+
"en": "Stop singing"
|
|
90
|
+
},
|
|
91
|
+
"tags": [
|
|
92
|
+
"music"
|
|
93
|
+
],
|
|
94
|
+
"parameters": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"properties": {},
|
|
97
|
+
"required": []
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"name": "fish_sing_library",
|
|
102
|
+
"description": "列出 / 回放 / 删除她唱过的歌。",
|
|
103
|
+
"summary": {
|
|
104
|
+
"zh": "作品库",
|
|
105
|
+
"en": "Song library"
|
|
106
|
+
},
|
|
107
|
+
"tags": [
|
|
108
|
+
"music"
|
|
109
|
+
],
|
|
110
|
+
"parameters": {
|
|
111
|
+
"type": "object",
|
|
112
|
+
"properties": {
|
|
113
|
+
"action": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"enum": [
|
|
116
|
+
"list",
|
|
117
|
+
"play",
|
|
118
|
+
"delete"
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
"query": {
|
|
122
|
+
"type": "string"
|
|
123
|
+
},
|
|
124
|
+
"limit": {
|
|
125
|
+
"type": "number"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"required": []
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"name": "fish_sing_status",
|
|
133
|
+
"description": "唱歌功能是否可用、当前在算什么。",
|
|
134
|
+
"summary": {
|
|
135
|
+
"zh": "唱歌状态",
|
|
136
|
+
"en": "Singing status"
|
|
137
|
+
},
|
|
138
|
+
"tags": [
|
|
139
|
+
"music"
|
|
140
|
+
],
|
|
141
|
+
"parameters": {
|
|
142
|
+
"type": "object",
|
|
143
|
+
"properties": {},
|
|
144
|
+
"required": []
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
"events": [],
|
|
149
|
+
"prompts": [
|
|
150
|
+
{
|
|
151
|
+
"key": "fish-sing.envPrompt",
|
|
152
|
+
"title": "唱歌环境提示词",
|
|
153
|
+
"role": "envPrompt",
|
|
154
|
+
"content": "你能用自己的声音唱歌(fish_sing)。默认只在本机播放;要发 QQ 才给 to。一首歌 60~120 秒,同时只能唱一首。"
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
}
|