diff --git a/nodes/generator.py b/nodes/generator.py index bc0f2af..2b5686d 100644 --- a/nodes/generator.py +++ b/nodes/generator.py @@ -63,11 +63,80 @@ class OmniVoiceGenerate: "tooltip": "Transcription of ref_audio. Connect a Whisper (or other STT) node for best results.", }), "language": ( - ["auto", "English", "Chinese", "Japanese", "Korean", "French", - "Spanish", "German", "Portuguese", "Russian", "Arabic", "Hindi"], + [ + "auto", + # A + "Abkhazian", "Afar", "Afrikaans", "Akan", "Albanian", "Amharic", + "Arabic", "Aragonese", "Armenian", "Assamese", "Avaric", "Avestan", + "Aymara", "Azerbaijani", + # B + "Bambara", "Bashkir", "Basque", "Belarusian", "Bengali", "Bihari", + "Bislama", "Bosnian", "Breton", "Bulgarian", "Burmese", + # C + "Catalan", "Chamorro", "Chechen", "Chichewa", "Chinese (Mandarin)", + "Chinese (Cantonese)", "Chuvash", "Cornish", "Corsican", "Cree", + "Croatian", "Czech", + # D + "Danish", "Divehi", "Dutch", "Dzongkha", + # E + "English", "Esperanto", "Estonian", "Ewe", + # F + "Faroese", "Fijian", "Finnish", "French", "Fula", + # G + "Galician", "Georgian", "German", "Greek", "Guaraní", "Gujarati", + # H + "Haitian Creole", "Hausa", "Hebrew", "Herero", "Hindi", "Hiri Motu", + "Hungarian", + # I + "Interlingua", "Indonesian", "Igbo", "Inuktitut", "Irish", + "Italian", + # J + "Japanese", "Javanese", + # K + "Kannada", "Kanuri", "Kashmiri", "Kazakh", "Khmer", "Kikuyu", + "Kinyarwanda", "Komi", "Kongo", "Korean", "Kurdish", "Kyrgyz", + # L + "Lao", "Latin", "Latvian", "Limburgish", "Lingala", "Lithuanian", + "Luganda", "Luxembourgish", + # M + "Macedonian", "Malagasy", "Malay", "Malayalam", "Maltese", "Manx", + "Maori", "Marathi", "Marshallese", "Mongolian", + # N + "Nauruan", "Navajo", "Nepali", "Northern Sami", "Norwegian", + "Norwegian Bokmål", "Norwegian Nynorsk", + # O + "Occitan", "Ojibwe", "Odia", "Oromo", "Ossetian", + # P + "Pali", "Pashto", "Persian", "Polish", "Portuguese", + "Punjabi", + # Q + "Quechua", + # R + "Romanian", "Romansh", "Russian", + # S + "Samoan", "Sango", "Sanskrit", "Serbian", "Shona", "Sindhi", + "Sinhala", "Slovak", "Slovenian", "Somali", "Southern Sotho", + "Spanish", "Sundanese", "Swahili", "Swati", "Swedish", + # T + "Tagalog", "Tahitian", "Tajik", "Tamil", "Tatar", "Telugu", + "Thai", "Tibetan", "Tigrinya", "Tonga", "Tsonga", "Tswana", + "Turkish", "Turkmen", "Twi", + # U + "Ukrainian", "Urdu", "Uyghur", "Uzbek", + # V + "Vietnamese", "Volapük", + # W + "Walloon", "Welsh", "Western Frisian", "Wolof", + # X + "Xhosa", + # Y + "Yiddish", "Yoruba", + # Z + "Zhuang", "Zulu", + ], { "default": "auto", - "tooltip": "Language of the text to synthesize. 'auto' lets the model detect it.", + "tooltip": "Language of the text. Type to filter. OmniVoice supports 600+ languages — use 'auto' when unsure.", }, ), "instruct": ("STRING", { @@ -124,7 +193,7 @@ class OmniVoiceGenerate: if seed != 0: torch.manual_seed(seed) kwargs = {"text": text, "speed": speed, "num_step": num_step, "guidance_scale": guidance_scale} - if language != "auto": + if language and language != "auto": kwargs["language"] = language if mode == "voice_cloning" and ref_audio is None: diff --git a/nodes/voice_design.py b/nodes/voice_design.py index 4ae16ee..188b706 100644 --- a/nodes/voice_design.py +++ b/nodes/voice_design.py @@ -1,24 +1,60 @@ class OmniVoiceVoiceDesign: """Compose a voice design instruct string from structured dropdowns.""" - GENDERS = ["none", "male", "female"] - AGES = ["none", "child", "teenager", "young adult", "middle-aged", "elderly"] - PITCHES = ["none", "very low pitch", "low pitch", "moderate pitch", "high pitch", "very high pitch", "whisper"] - ACCENTS = [ + GENDERS = ["none", "male", "female"] + + AGES = ["none", "child", "teenager", "young adult", "middle-aged", "elderly"] + + PITCHES = [ "none", - "american accent", "british accent", "australian accent", "canadian accent", - "indian accent", "chinese accent", "japanese accent", "korean accent", - "portuguese accent", "russian accent", + "very low pitch", "low pitch", "moderate pitch", + "high pitch", "very high pitch", "whisper", + ] + + ACCENTS = [ + "none", + # English varieties + "american accent", "american southern accent", "american new york accent", + "american midwest accent", "american texas accent", + "british accent", "british rp accent", "british cockney accent", + "scottish accent", "welsh accent", "irish accent", + "australian accent", "new zealand accent", + "canadian accent", "south african accent", + # South / Southeast Asia + "indian accent", "pakistani accent", "bangladeshi accent", + "sri lankan accent", "singaporean accent", "malaysian accent", + "filipino accent", "vietnamese accent", "thai accent", + "indonesian accent", + # East Asia + "chinese accent", "japanese accent", "korean accent", + # Europe + "french accent", "german accent", "italian accent", + "spanish accent", "portuguese accent", "dutch accent", + "swedish accent", "norwegian accent", "danish accent", + "finnish accent", "polish accent", "czech accent", + "hungarian accent", "romanian accent", "greek accent", + "turkish accent", + # Eastern Europe / Central Asia + "russian accent", "ukrainian accent", "arabic accent", + "persian accent", "kazakh accent", + # Africa / Americas + "nigerian accent", "ghanaian accent", "kenyan accent", + "mexican accent", "brazilian accent", "caribbean accent", + "argentinian accent", ] @classmethod def INPUT_TYPES(cls): return { "required": { - "gender": (cls.GENDERS, {"default": "female"}), - "age": (cls.AGES, {"default": "none"}), - "pitch": (cls.PITCHES, {"default": "none"}), - "accent": (cls.ACCENTS, {"default": "none"}), + "gender": (cls.GENDERS, {"default": "female", + "tooltip": "Voice gender."}), + "age": (cls.AGES, {"default": "none", + "tooltip": "Approximate age of the speaker."}), + "pitch": (cls.PITCHES, {"default": "none", + "tooltip": "Pitch / register of the voice."}), + "accent": (cls.ACCENTS, {"default": "none", + "tooltip": "Regional or language accent. Type to filter the list."}), }, }