# Copyright (c) 2026 DeepBeepMeep - part of WanGP, WanGP Community License 2.0 (see LICENSE.txt)
from models.help_shared import LYRICS_PROMPT, LYRICS_PROMPT_SHORT, SPEECH_PROMPT, SPEECH_PROMPT_SHORT, help_text, specialities


CHATTERBOX_HELP = help_text("Chatterbox Speech", "Speak the text in the selected **Language**, optionally using **Voice to Replicate** as a speaker reference. Use clean single-speaker audio. **Emotion Exaggeration** increases expressiveness; **Pace** changes delivery. Begin at their neutral defaults and change one control at a time. This is the multilingual Chatterbox workflow; do not assume special tags advertised for other Chatterbox checkpoints are accepted.", SPEECH_PROMPT, "prompt = spoken words; model_mode = language; optional audio_guide = voice sample. Exaggeration/Pace adjust delivery. Use this multilingual checkpoint's controls, not Turbo-specific tags.", SPEECH_PROMPT_SHORT, ["https://github.com/resemble-ai/chatterbox"])
CHATTERBOX_HELP["specialities"] = specialities("voice cloning")

KUGEL_HELP = help_text("KugelAudio Speech and Dialogue", "Generate speech from text, optionally cloning one to three reference voices. Choose **Text Only** or the matching **Voice Cloning** mode. References must be clean single-speaker recordings. For dialogue, number speakers in reference order. **Max Duration** caps the assembled result. Use blank lines to split long passages; **Auto Split** helps avoid speech accelerating in long segments, and **Pause Between Sentences** adds spacing.", SPEECH_PROMPT + "\n\n### Dialogue\n\n```text\nSpeaker 1: Shall we begin?\nSpeaker 2: Yes, I have everything ready.\n```\n\nUse `Speaker 3:` only when a third reference voice is supplied. Write in the desired language; this family focuses on European-language speech.", "Text only, or audio_prompt_type A/AB/ABD for 1/2/3 reference voices. Speaker N labels follow reference order. Max Duration caps speech; blank lines and Auto Split divide passages; pauses add spacing.", SPEECH_PROMPT_SHORT + " For dialogue use `Speaker 1: ...` / `Speaker 2: ...` / `Speaker 3: ...` in reference order.", ["https://github.com/Kugelaudio/kugelaudio-open"])
KUGEL_HELP["specialities"] = specialities("voice cloning", "speech dialogue")

OMNIVOICE_HELP = help_text("OmniVoice Speech", "Generate speech from a voice description or clone one to three reference voices. Select the matching voice mode and language. **Max Duration** limits the output (0 selects automatic duration). Keep a reference short, clear and from one speaker. In cloning mode the secondary text field holds the reference transcript; in design mode it holds supported voice tags.", SPEECH_PROMPT + "\n\n### Voice and Dialogue\n\nIn **Voice Design**, put supported comma-separated tags in **Voice Instruction**, for example `female, young adult, british accent`. In **Voice Cloning**, put the exact reference transcript in that field, or leave it blank for automatic transcription.\n\nDialogue uses `Speaker 1:` / `Speaker 2:` / `Speaker 3:` lines matching the supplied references. Supported non-verbal tags such as `[laughter]` and `[sigh]` belong in the spoken text; the full list appears in the model input help.\n\n**Example:** `[sigh] We finally made it. [laughter] What a journey!`", "Voice design: supported comma-separated tags in alt_prompt. Cloning: A/AB/ABD select 1/2/3 audio references; alt_prompt is the exact reference transcript(s), blank for transcription. Prefer 3–10s clean samples in target language. Max Duration 0 = auto.", "prompt contains speech; dialogue uses Speaker N labels matching audio references. [laughter]/[sigh] and the documented non-verbal tags are supported. Do not invent emotion tags. Voice-design tags go in alt_prompt; cloning transcripts describe the reference, not target speech.", ["https://github.com/k2-fsa/OmniVoice"])
OMNIVOICE_HELP["specialities"] = specialities("voice cloning", "voice design", "speech dialogue")

HEARTMULA_HELP = help_text("HeartMuLa Songs", "Combine **Lyrics** with comma-separated **Keywords / Tags** for genre, mood, instruments and vocal character. **Maximum Song Duration** is a cap: the song may finish earlier, or be cut off if it needs more time. Begin with a short verse and chorus, then extend the lyrics and duration. This entry generates from text; it does not expose the reference-audio or MIDI workflows of separate HeartMuLa projects.", LYRICS_PROMPT + "\n\n**Keywords / Tags example:** `acoustic folk,warm,female vocals,guitar,soft drums`. For an instrumental, use an `[Instrumental]` section and instrumental style tags.", "prompt = sectioned lyrics; alt_prompt = comma-separated sound/style tags. Maximum Song Duration caps output. No audio/MIDI reference input for this entry.", LYRICS_PROMPT_SHORT + " alt_prompt example: acoustic folk,warm,female vocals,guitar. For instrumental use [Instrumental] and instrumental tags.", ["https://github.com/HeartMuLa/heartlib"])
HEARTMULA_HELP["specialities"] = specialities("music generation")

ACE1_HELP = help_text("ACE-Step 1.0 Music", "Combine **Lyrics** and **Genres / Tags** to create a song, or use `[Instrumental]` lyrics for music without singing. Duration selects the target length. **Remix Audio** uses Source Audio, the original lyrics and **Prompt Audio Strength** to guide a variation. Keep this 1.0 workflow separate from ACE-Step 1.5's cover/timbre modes.", LYRICS_PROMPT, "ACE-Step 1.0: prompt lyrics, alt_prompt genre/style tags, target duration. A remixes audio_guide with original lyrics and audio strength. No separate 1.5 timbre mode.", LYRICS_PROMPT_SHORT + " Instrumental: [Instrumental] lyrics and an instrumental style description.", ["https://github.com/ace-step/ACE-Step"])
ACE1_HELP["specialities"] = specialities("music generation")

MINIMAX_MUSIC_HELP = {
    "deepy_infos": "### MiniMax Music 3\n\nLyrics in prompt, music description in alt_prompt. Maximum Song Duration is a cap (up to 300s); generation can end sooner. Text-conditioned songs, no reference-audio control here. Tags and tempo/key requests are generative guidance, not exact guarantees.",
    "deepy_prompt_infos": "### Lyrics and Caption\n\nUse actual lyrics with section tags on their own lines: [Verse], [Chorus], [Bridge], [Outro]. Keep genre, mood, voices, instruments and development in alt_prompt. Natural language works; a richer caption can use Global Metadata, Vocal Details and Arrangement. Keep lyric words in prompt. Example caption: warm acoustic pop, intimate vocals, fingerpicked guitar, soft percussion building into the chorus.",
    "specialities": specialities("music generation"),
}

INDEX_VOICE_INPUTS = """### Speaker References and Dialogue

Supply a clean **Speaker Reference Voice** and write the words to speak. **Voice Cloning** uses that recording's voice and emotion. **Voice + Emotion** uses a second recording for emotion while retaining the first voice. In **Dialogue**, provide two or three speaker recordings and label the text `Speaker 1:`, `Speaker 2:` and `Speaker 3:` in reference order.

**Default Emotion Instruction** and inline emotion cues control delivery separately from the words. **Max Duration** caps the assembled output."""

INDEX25_HELP = {
    "deepy_infos": "### IndexTTS 2.5\n\nRequired speaker audio. A clones it; AB adds emotion audio; AB2/ABD2 use 2/3 speaker references. prompt = speech, alt_prompt = default emotion; inline cues override emotion per segment. Select Language: EN/ZH/ZHEN/JA/ES/AR. Speech Speed 1 is normal, higher faster. Max duration caps output.",
    "deepy_prompt_infos": "### Speech, Emotion and Pronunciation\n\nWrite exact speech; dialogue uses Speaker N: labels in sample order. Inline [happy] / [calm] cues persist until replaced; alt_prompt supplies default emotion. Pronunciation: Chinese <行|XING2>, English <minute|M IH1 . N AH0 T>, Japanese <上手|じょうず>. Select matching language. Keep unrelated directions out of speech.",
    "specialities": specialities("voice cloning", "speech dialogue"),
}
