Files
ComfyUI-Omnivoice/nodes/voice_design.py
T
Ethanfel d2cb5c4249 feat: expand language and accent lists to full coverage
Language: ~170 world languages with type-to-filter dropdown
Accent: 50+ regional varieties grouped by area

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 20:04:12 +02:00

69 lines
2.7 KiB
Python

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 = [
"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",
"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."}),
},
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("instruct",)
FUNCTION = "compose"
CATEGORY = "OmniVoice"
def compose(self, gender, age, pitch, accent):
parts = [v for v in [gender, age, pitch, accent] if v != "none"]
return (", ".join(parts),)