From 50a2ec33462b6a4e2eef42fe05c2664219ceb9e2 Mon Sep 17 00:00:00 2001 From: Hawk Lee Date: Sun, 1 Feb 2026 16:26:25 +0800 Subject: [PATCH] fix(vibevoice): auto-normalize custom roles to Speaker N format (v1.10.9) --- .../aiia_vibevoice_nodes.cpython-314.pyc | Bin 19183 -> 28046 bytes aiia_vibevoice_nodes.py | 57 +++++++++++++++++- pyproject.toml | 2 +- 3 files changed, 57 insertions(+), 2 deletions(-) mode change 100755 => 100644 __pycache__/aiia_vibevoice_nodes.cpython-314.pyc diff --git a/__pycache__/aiia_vibevoice_nodes.cpython-314.pyc b/__pycache__/aiia_vibevoice_nodes.cpython-314.pyc old mode 100755 new mode 100644 index aa4b4cf81bad5631c597935e64a15be41a8dd1b1..845ac6d0e7c79b4e3e622321550c366ab10cc39b GIT binary patch delta 11423 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 "Speaker 1:") + text, role_map = self._normalize_roles(text) + if role_map: + print(f"[AIIA] Auto-mapped roles: {role_map}") + # Warn if user needs more reference audios + required_voices = len(role_map) + # We don't have ref audio count here yet easily (it's loaded later), but likely user provided list + + # Default Speaker Tag (if still no speakers detected) if not re.search(r'^Speaker\s+\d+\s*:', text, re.IGNORECASE | re.MULTILINE): lines = text.split('\n') text = "\n".join([f"Speaker 1: {line.strip()}" for line in lines if line.strip()]) diff --git a/pyproject.toml b/pyproject.toml index fe157f7..6f9cd20 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "aiia" description = "The Ultimate AI Audio/Video toolkit for ComfyUI. Features an enhanced Ditto (with optimizations that outperform official demos and other SOTA talking head models in lip-sync accuracy and natural motion), EchoMimic V3 & FLOAT, VibeVoice & CosyVoice 3.0 (Zero-Shot Voice Cloning), Multi-Role Podcast Generation, and a powerful Media Browser." -version = "1.10.8" +version = "1.10.9" license = {file = "LICENSE"} readme = "README.md" authors = [