Skip to content

Commit 88d4ca8

Browse files
committed
Added seed to node
1 parent 62e4d7b commit 88d4ca8

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

F5TTS.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from .Install import Install
44
import subprocess
55
import wave
6+
import torch
67
import torchaudio
78
import hashlib
89
import folder_paths
@@ -27,6 +28,7 @@
2728

2829
class F5TTSCreate:
2930
voice_reg = re.compile(r"\{(\w+)\}")
31+
tooltip_seed = "Seed. -1 = random"
3032

3133
def is_voice_name(self, word):
3234
return self.voice_reg.match(word.strip())
@@ -68,7 +70,12 @@ def load_model(self):
6870
ema_model = load_model(model_cls, model_cfg, ckpt_file, vocab_file)
6971
return ema_model
7072

71-
def generate_audio(self, voices, model_obj, chunks):
73+
def generate_audio(self, voices, model_obj, chunks, seed):
74+
if seed >= 0:
75+
torch.manual_seed(seed)
76+
else:
77+
torch.random.seed()
78+
7279
frame_rate = 44100
7380
generated_audio_segments = []
7481
pbar = ProgressBar(len(chunks))
@@ -110,9 +117,9 @@ def generate_audio(self, voices, model_obj, chunks):
110117
os.unlink(wave_file.name)
111118
return audio
112119

113-
def create(self, voices, chunks):
120+
def create(self, voices, chunks, seed=-1):
114121
model_obj = self.load_model()
115-
return self.generate_audio(voices, model_obj, chunks)
122+
return self.generate_audio(voices, model_obj, chunks, seed)
116123

117124

118125
class F5TTSAudioInputs:
@@ -129,6 +136,11 @@ def INPUT_TYPES(s):
129136
"multiline": True,
130137
"default": "This is what I want to say"
131138
}),
139+
"seed": ("INT", {
140+
"display": "number", "step": 1,
141+
"default": 1, "min": -1,
142+
"tooltip": F5TTSCreate.tooltip_seed,
143+
}),
132144
},
133145
}
134146

@@ -162,7 +174,7 @@ def remove_wave_file(self):
162174
print("F5TTS: Cannot remove? "+self.wave_file.name)
163175
print(e)
164176

165-
def create(self, sample_audio, sample_text, speech):
177+
def create(self, sample_audio, sample_text, speech, seed=-1):
166178
try:
167179
main_voice = self.load_voice_from_input(sample_audio, sample_text)
168180

@@ -172,17 +184,18 @@ def create(self, sample_audio, sample_text, speech):
172184
chunks = f5ttsCreate.split_text(speech)
173185
voices['main'] = main_voice
174186

175-
audio = f5ttsCreate.create(voices, chunks)
187+
audio = f5ttsCreate.create(voices, chunks, seed)
176188
finally:
177189
self.remove_wave_file()
178190
return (audio, )
179191

180192
@classmethod
181-
def IS_CHANGED(s, sample_audio, sample_text, speech):
193+
def IS_CHANGED(s, sample_audio, sample_text, speech, seed):
182194
m = hashlib.sha256()
183195
m.update(sample_text)
184196
m.update(sample_audio)
185197
m.update(speech)
198+
m.update(seed)
186199
return m.digest().hex()
187200

188201

@@ -215,6 +228,11 @@ def INPUT_TYPES(s):
215228
"multiline": True,
216229
"default": "This is what I want to say"
217230
}),
231+
"seed": ("INT", {
232+
"display": "number", "step": 1,
233+
"default": 1, "min": -1,
234+
"tooltip": F5TTSCreate.tooltip_seed,
235+
}),
218236
}
219237
}
220238

@@ -271,7 +289,7 @@ def load_voices_from_files(self, sample, voice_names):
271289
voices[voice_name] = self.load_voice_from_file(sample_file)
272290
return voices
273291

274-
def create(self, sample, speech):
292+
def create(self, sample, speech, seed=-1):
275293
# Install.check_install()
276294
main_voice = self.load_voice_from_file(sample)
277295

@@ -291,11 +309,11 @@ def create(self, sample, speech):
291309
voices = self.load_voices_from_files(sample, voice_names)
292310
voices['main'] = main_voice
293311

294-
audio = f5ttsCreate.create(voices, chunks)
312+
audio = f5ttsCreate.create(voices, chunks, seed)
295313
return (audio, )
296314

297315
@classmethod
298-
def IS_CHANGED(s, sample, speech):
316+
def IS_CHANGED(s, sample, speech, seed):
299317
m = hashlib.sha256()
300318
audio_path = folder_paths.get_annotated_filepath(sample)
301319
audio_txt_path = F5TTSAudio.get_txt_file_path(audio_path)
@@ -305,4 +323,5 @@ def IS_CHANGED(s, sample, speech):
305323
m.update(str(last_modified_timestamp))
306324
m.update(str(txt_last_modified_timestamp))
307325
m.update(speech)
326+
m.update(seed)
308327
return m.digest().hex()

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[project]
22
name = "comfyui-f5-tts"
33
description = "Text to speech with F5-TTS"
4-
version = "1.0.3"
4+
version = "1.0.4"
55
license = {text = "MIT License"}
66

77
[project.urls]

0 commit comments

Comments
 (0)