1 Commits
v25 ... v26

Author SHA1 Message Date
MasterPhooey
68c4227cb7 Release NVIDIA WakeWord Trainer v26 2026-08-04 06:25:09 -05:00
5 changed files with 20 additions and 5 deletions

View File

@@ -1 +1 @@
25
26

View File

@@ -1,2 +1 @@
- Prevented unreadable audio files from freezing sample preparation by adding a bounded FFmpeg watchdog, safe cleanup, and visible normalization progress.
- Kept primary and guided STT results visible after captures are automatically sorted into positive or negative training samples.
- Restored MOSS-TTS-Nano generation with the current voice-cloning API so all four providers contribute to the final training corpus.

View File

@@ -44,7 +44,7 @@ from tts_config import ( # noqa: E402
)
GENERATOR_VERSION = "modern-tts-v15-four-provider-direct-corpus-safe-limits"
GENERATOR_VERSION = "modern-tts-v16-four-provider-direct-corpus-safe-limits"
VOICE_BANK_VERSION = "modern-tts-voice-bank-v1-native-random-qualified-single-utterance"
COMPATIBLE_VOICE_BANK_VERSIONS = {
VOICE_BANK_VERSION,

View File

@@ -69,7 +69,6 @@ def main() -> int:
text=str(item["text"]),
output_audio_path=str(output_path),
mode="voice_clone",
prompt_text=str(item["ref_text"]),
prompt_audio_path=str(item["ref_audio"]),
reference_audio_path=None,
text_tokenizer_path=None,

View File

@@ -1,6 +1,7 @@
from __future__ import annotations
import argparse
import ast
import importlib.util
import json
import math
@@ -70,6 +71,22 @@ class ModernTtsTests(unittest.TestCase):
["--position_temperature", "5.0", "--class_temperature", "0.0"],
)
def test_moss_voice_clone_uses_audio_without_disallowed_prompt_text(self) -> None:
worker_path = REPO_ROOT / "cli" / "tts_moss_worker.py"
tree = ast.parse(worker_path.read_text(encoding="utf-8"))
inference_calls = [
node
for node in ast.walk(tree)
if isinstance(node, ast.Call)
and isinstance(node.func, ast.Attribute)
and node.func.attr == "inference"
]
self.assertEqual(len(inference_calls), 1)
keywords = {keyword.arg for keyword in inference_calls[0].keywords}
self.assertIn("prompt_audio_path", keywords)
self.assertNotIn("prompt_text", keywords)
def test_omnivoice_uses_a_hidden_stable_prompt_before_short_clone(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
data_dir = Path(temp_dir)