add InstructNode support
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
* @Date: 2024-10-04 11:28:28
|
||||
* @version:
|
||||
* @LastEditors: SpenserCai
|
||||
* @LastEditTime: 2024-10-04 20:48:17
|
||||
* @LastEditTime: 2024-10-04 21:14:03
|
||||
* @Description: file content
|
||||
-->
|
||||
# ComfyUI-FunAudioLLM
|
||||
@@ -12,7 +12,8 @@ Comfyui custom node for [FunAudioLLM](https://funaudiollm.github.io/) include [C
|
||||
## Features
|
||||
|
||||
### CosyVoice
|
||||
- Support SFT,Zero-shot,Cross-lingual
|
||||
- CosyVoice Version: 2024-10-04
|
||||
- Support SFT,Zero-shot,Cross-lingual,Instruct
|
||||
- Support CosyVoice-300M-25Hz in zero-shot and cross-lingual
|
||||
- Support SFT's 25Hz(unoffical)
|
||||
- <details>
|
||||
|
||||
+5
-1
@@ -3,7 +3,7 @@ Author: SpenserCai
|
||||
Date: 2024-10-04 12:14:22
|
||||
version:
|
||||
LastEditors: SpenserCai
|
||||
LastEditTime: 2024-10-04 20:14:52
|
||||
LastEditTime: 2024-10-04 21:12:47
|
||||
Description: file content
|
||||
'''
|
||||
from .nodes.cosyvoice_nodes import *
|
||||
@@ -22,6 +22,10 @@ NODE_CONFIG = {
|
||||
"class": CosyVoiceCrossLingualNode,
|
||||
"name": "CosyVoice 跨语言克隆"
|
||||
},
|
||||
"CosyVoiceInstructNode": {
|
||||
"class": CosyVoiceInstructNode,
|
||||
"name": "CosyVoice 自然语言控制"
|
||||
},
|
||||
"CosyVoiceSaveSpeakerModelNode": {
|
||||
"class": CosyVoiceSaveSpeakerModelNode,
|
||||
"name": "CosyVoice 保存说话人模型"
|
||||
|
||||
@@ -3,7 +3,7 @@ Author: SpenserCai
|
||||
Date: 2024-10-04 13:54:01
|
||||
version:
|
||||
LastEditors: SpenserCai
|
||||
LastEditTime: 2024-10-04 18:42:14
|
||||
LastEditTime: 2024-10-04 21:10:55
|
||||
Description: file content
|
||||
'''
|
||||
import modelscope
|
||||
@@ -34,5 +34,12 @@ def download_cosyvoice_300m_sft(is_25hz=False):
|
||||
snapshot_download(model_id=model_id, local_dir=model_dir)
|
||||
return model_name, model_dir
|
||||
|
||||
def download_cosyvoice_300m_instruct():
|
||||
model_name = "CosyVoice-300M-Instruct"
|
||||
model_id = "iic/CosyVoice-300M-Instruct"
|
||||
model_dir = os.path.join(base_cosyvoice_model_path, model_name)
|
||||
snapshot_download(model_id=model_id, local_dir=model_dir)
|
||||
return model_name, model_dir
|
||||
|
||||
def get_speaker_default_path():
|
||||
return os.path.join(base_cosyvoice_model_path, "Speaker")
|
||||
@@ -3,7 +3,7 @@ Author: SpenserCai
|
||||
Date: 2024-10-04 12:13:28
|
||||
version:
|
||||
LastEditors: SpenserCai
|
||||
LastEditTime: 2024-10-04 20:13:31
|
||||
LastEditTime: 2024-10-04 21:11:53
|
||||
Description: file content
|
||||
'''
|
||||
import os
|
||||
@@ -12,7 +12,7 @@ import random
|
||||
import numpy as np
|
||||
import torch
|
||||
from funaudio_utils.pre import FunAudioLLMTool
|
||||
from funaudio_utils.download_models import download_cosyvoice_300m, get_speaker_default_path, download_cosyvoice_300m_sft
|
||||
from funaudio_utils.download_models import download_cosyvoice_300m, get_speaker_default_path, download_cosyvoice_300m_sft,download_cosyvoice_300m_instruct
|
||||
from funaudio_utils.cosyvoice_plus import CosyVoicePlus
|
||||
from cosyvoice.utils.common import set_all_random_seed
|
||||
|
||||
@@ -158,6 +158,38 @@ class CosyVoiceCrossLingualNode:
|
||||
output = cosyvoice.inference_cross_lingual(tts_text, prompt_speech_16k, False, speed)
|
||||
return return_audio(output,t0,None)
|
||||
|
||||
class CosyVoiceInstructNode:
|
||||
sft_spk_list = ['中文女', '中文男', '日语男', '粤语女', '英文女', '英文男', '韩语女']
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required":{
|
||||
"tts_text":("STRING",),
|
||||
"speaker_name":(s.sft_spk_list,{
|
||||
"default":"中文女"
|
||||
}),
|
||||
"instruct_text":("STRING",),
|
||||
"speed":("FLOAT",{
|
||||
"default": 1.0
|
||||
}),
|
||||
"seed":("INT",{
|
||||
"default": 42
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
CATEGORY = CATEGORY_NAME
|
||||
RETURN_TYPES = ("AUDIO",)
|
||||
FUNCTION="generate"
|
||||
|
||||
def generate(self, tts_text, speaker_name, instruct_text, speed, seed, use_25hz):
|
||||
t0 = ttime()
|
||||
_, model_dir = download_cosyvoice_300m_instruct()
|
||||
cosyvoice = CosyVoicePlus(model_dir)
|
||||
set_all_random_seed(seed)
|
||||
output = cosyvoice.inference_instruct(tts_text, speaker_name, instruct_text, False, speed)
|
||||
return return_audio(output,t0,None)
|
||||
|
||||
class CosyVoiceLoadSpeakerModelNode:
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
|
||||
Reference in New Issue
Block a user