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)" ELEVEN_TTS = "ElevenLabs(Very High Quality)" instance_background_video_checkbox = None instance_background_music_checkbox = None instance_voiceChoice = None instance_voiceChoiceTranslation = None @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): if cls.instance_voiceChoice is None: cls.instance_voiceChoice = gr.Radio( cls.getElevenlabsVoices(), label="Elevenlabs voice", value="Antoni", interactive=True, ) return cls.instance_voiceChoice @classmethod def voiceChoiceTranslation(cls): if cls.instance_voiceChoiceTranslation is None: cls.instance_voiceChoiceTranslation = gr.Radio( cls.getElevenlabsVoices(), label="Elevenlabs voice", value="Antoni", interactive=True, ) return cls.instance_voiceChoiceTranslation