ShortGPT / gui /asset_components.py
HashScripts's picture
Upload 167 files
b293d47 verified
import os
import platform
import subprocess
import gradio as gr
from shortGPT.api_utils.eleven_api import ElevenLabsAPI
from shortGPT.config.api_db import ApiKeyManager
from shortGPT.config.asset_db import AssetDatabase
class AssetComponentsUtils:
EDGE_TTS = "Free EdgeTTS (lower quality)"
COQUI_TTS = "Free CoquiTTS (needs a powerful GPU)"
ELEVEN_TTS = "ElevenLabs(Very High Quality)"
COQUI_TTS_VOICES = [
"Claribel Dervla",
"Daisy Studious",
"Gracie Wise",
"Tammie Ema",
"Alison Dietlinde",
"Ana Florence",
"Annmarie Nele",
"Asya Anara",
"Brenda Stern",
"Gitta Nikolina",
"Henriette Usha",
"Sofia Hellen",
"Tammy Grit",
"Tanja Adelina",
"Vjollca Johnnie",
"Andrew Chipper",
"Badr Odhiambo",
"Dionisio Schuyler",
"Royston Min",
"Viktor Eka",
"Abrahan Mack",
"Adde Michal",
"Baldur Sanjin",
"Craig Gutsy",
"Damien Black",
"Gilberto Mathias",
"Ilkin Urbano",
"Kazuhiko Atallah",
"Ludvig Milivoj",
"Suad Qasim",
"Torcull Diarmuid",
"Viktor Menelaos",
"Zacharie Aimilios",
"Nova Hogarth",
"Maja Ruoho",
"Uta Obando",
"Lidiya Szekeres",
"Chandra MacFarland",
"Szofi Granger",
"Camilla Holmström",
"Lilya Stainthorpe",
"Zofija Kendrick",
"Narelle Moon",
"Barbora MacLean",
"Alexandra Hisakawa",
"Alma María",
"Rosemary Okafor",
"Ige Behringer",
"Filip Traverse",
"Damjan Chapman",
"Wulf Carlevaro",
"Aaron Dreschner",
"Kumar Dahl",
"Eugenio Mataracı",
"Ferran Simen",
"Xavier Hayasaka",
"Luis Moray",
"Marcos Rudaski",
]
instance_background_video_checkbox = None
instance_background_music_checkbox = None
instance_voiceChoice: dict[gr.Radio] = {}
instance_voiceChoiceTranslation: dict[gr.Radio] = {}
@classmethod
def getBackgroundVideoChoices(cls):
df = AssetDatabase.get_df()
choices = list(df.loc["background video" == df["type"]]["name"])[:20]
return choices
@classmethod
def getBackgroundMusicChoices(cls):
df = AssetDatabase.get_df()
choices = list(df.loc["background music" == df["type"]]["name"])[:20]
return choices
@classmethod
def getElevenlabsVoices(cls):
api_key = ApiKeyManager.get_api_key("ELEVEN LABS")
voices = list(reversed(ElevenLabsAPI(api_key).get_voices().keys()))
return voices
@classmethod
def start_file(cls, path):
if platform.system() == "Windows":
os.startfile(path)
elif platform.system() == "Darwin":
subprocess.Popen(["open", path])
else:
subprocess.Popen(["xdg-open", path])
@classmethod
def background_video_checkbox(cls):
if cls.instance_background_video_checkbox is None:
cls.instance_background_video_checkbox = gr.CheckboxGroup(
choices=cls.getBackgroundVideoChoices(),
interactive=True,
label="Choose background video",
)
return cls.instance_background_video_checkbox
@classmethod
def background_music_checkbox(cls):
if cls.instance_background_music_checkbox is None:
cls.instance_background_music_checkbox = gr.CheckboxGroup(
choices=cls.getBackgroundMusicChoices(),
interactive=True,
label="Choose background music",
)
return cls.instance_background_music_checkbox
@classmethod
def voiceChoice(cls, provider: str = None):
if provider == None:
provider = cls.ELEVEN_TTS
if cls.instance_voiceChoice.get(provider, None) is None:
if provider == cls.ELEVEN_TTS:
print("getting eleven voices")
cls.instance_voiceChoice[provider] = gr.Radio(
cls.getElevenlabsVoices(),
label="Elevenlabs voice",
value="Antoni",
interactive=True,
)
elif provider == cls.COQUI_TTS:
print("getting coqui voices")
cls.instance_voiceChoice[provider] = gr.Dropdown(
cls.COQUI_TTS_VOICES,
label="CoquiTTS voice",
value="Ana Florence",
interactive=True,
)
return cls.instance_voiceChoice[provider]
@classmethod
def voiceChoiceTranslation(cls, provider: str = None):
if provider == None:
provider = cls.ELEVEN_TTS
if cls.instance_voiceChoiceTranslation.get(provider, None) is None:
if provider == cls.ELEVEN_TTS:
cls.instance_voiceChoiceTranslation[provider] = gr.Radio(
cls.getElevenlabsVoices(),
label="Elevenlabs voice",
value="Antoni",
interactive=True,
)
elif provider == cls.COQUI_TTS:
cls.instance_voiceChoiceTranslation[provider] = gr.Radio(
cls.COQUI_TTS_VOICES,
label="CoquiTTS voice",
value="Ana Florence",
interactive=True,
)
return cls.instance_voiceChoiceTranslation[provider]