File size: 7,034 Bytes
63ab978
f7d7f08
3fde2e0
63ab978
3fde2e0
63ab978
 
a049b95
94dc4dc
63ab978
 
 
 
 
a049b95
579e8cb
736206b
579e8cb
736206b
579e8cb
736206b
579e8cb
a049b95
f9abd83
3fde2e0
63ab978
 
 
 
 
736206b
63ab978
736206b
63ab978
21c25c6
63ab978
736206b
 
 
 
63ab978
736206b
63ab978
736206b
63ab978
 
 
 
736206b
 
9f11092
736206b
 
 
63ab978
736206b
63ab978
 
 
 
 
736206b
63ab978
736206b
 
 
 
63ab978
736206b
63ab978
736206b
63ab978
 
 
 
736206b
 
 
 
 
9f11092
736206b
63ab978
736206b
63ab978
736206b
63ab978
736206b
 
 
 
63ab978
736206b
63ab978
736206b
63ab978
 
 
 
736206b
 
9f11092
736206b
63ab978
3fde2e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a70c074
3fde2e0
 
736206b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import gradio as gr
from modules.whisper_Inference import WhisperInference
from modules.nllb_inference import NLLBInference
import os
from ui.htmls import *
from modules.youtube_manager import get_ytmetas


def open_folder(folder_path):
    if os.path.exists(folder_path):
        os.system(f"start {folder_path}")
    else:
        print(f"The folder {folder_path} does not exist.")


def on_change_models(model_size):
    translatable_model = ["large", "large-v1", "large-v2"]
    if model_size not in translatable_model:
        return gr.Checkbox.update(visible=False, value=False, interactive=False)
    else:
        return gr.Checkbox.update(visible=True, value=False, label="Translate to English?", interactive=True)


whisper_inf = WhisperInference()
nllb_inf = NLLBInference()
block = gr.Blocks(css=CSS).queue(api_open=False)

with block:
    with gr.Row():
        with gr.Column():
            gr.Markdown(MARKDOWN, elem_id="md_project")
    with gr.Tabs():
        with gr.TabItem("File"):  # tab1
            with gr.Row():
                input_file = gr.Files(type="file", label="Upload File here")
            with gr.Row():
                dd_model = gr.Dropdown(choices=whisper_inf.available_models, value="large-v2", label="Model")
                dd_lang = gr.Dropdown(choices=["Automatic Detection"] + whisper_inf.available_langs,
                                      value="Automatic Detection", label="Language")
                dd_subformat = gr.Dropdown(["SRT", "WebVTT"], value="SRT", label="Subtitle Format")
            with gr.Row():
                cb_translate = gr.Checkbox(value=False, label="Translate to English?", interactive=True)
            with gr.Row():
                btn_run = gr.Button("GENERATE SUBTITLE FILE", variant="primary")
            with gr.Row():
                tb_indicator = gr.Textbox(label="Output")
                btn_openfolder = gr.Button('πŸ“‚').style(full_width=False)

            btn_run.click(fn=whisper_inf.transcribe_file,
                          inputs=[input_file, dd_model, dd_lang, dd_subformat, cb_translate], outputs=[tb_indicator])
            btn_openfolder.click(fn=lambda: open_folder("outputs"), inputs=None, outputs=None)
            dd_model.change(fn=on_change_models, inputs=[dd_model], outputs=[cb_translate])

        with gr.TabItem("Youtube"):  # tab2
            with gr.Row():
                tb_youtubelink = gr.Textbox(label="Youtube Link")
            with gr.Row().style(equal_height=True):
                with gr.Column():
                    img_thumbnail = gr.Image(label="Youtube Thumbnail")
                with gr.Column():
                    tb_title = gr.Label(label="Youtube Title")
                    tb_description = gr.Textbox(label="Youtube Description", max_lines=15)
            with gr.Row():
                dd_model = gr.Dropdown(choices=whisper_inf.available_models, value="large-v2", label="Model")
                dd_lang = gr.Dropdown(choices=["Automatic Detection"] + whisper_inf.available_langs,
                                      value="Automatic Detection", label="Language")
                dd_subformat = gr.Dropdown(choices=["SRT", "WebVTT"], value="SRT", label="Subtitle Format")
            with gr.Row():
                cb_translate = gr.Checkbox(value=False, label="Translate to English?", interactive=True)
            with gr.Row():
                btn_run = gr.Button("GENERATE SUBTITLE FILE", variant="primary")
            with gr.Row():
                tb_indicator = gr.Textbox(label="Output")
                btn_openfolder = gr.Button('πŸ“‚').style(full_width=False)

            btn_run.click(fn=whisper_inf.transcribe_youtube,
                          inputs=[tb_youtubelink, dd_model, dd_lang, dd_subformat, cb_translate],
                          outputs=[tb_indicator])
            tb_youtubelink.change(get_ytmetas, inputs=[tb_youtubelink],
                                  outputs=[img_thumbnail, tb_title, tb_description])
            btn_openfolder.click(fn=lambda: open_folder("outputs"), inputs=None, outputs=None)
            dd_model.change(fn=on_change_models, inputs=[dd_model], outputs=[cb_translate])

        with gr.TabItem("Mic"):  # tab3
            with gr.Row():
                mic_input = gr.Microphone(label="Record with Mic", type="filepath", interactive=True)
            with gr.Row():
                dd_model = gr.Dropdown(choices=whisper_inf.available_models, value="large-v2", label="Model")
                dd_lang = gr.Dropdown(choices=["Automatic Detection"] + whisper_inf.available_langs,
                                      value="Automatic Detection", label="Language")
                dd_subformat = gr.Dropdown(["SRT", "WebVTT"], value="SRT", label="Subtitle Format")
            with gr.Row():
                cb_translate = gr.Checkbox(value=False, label="Translate to English?", interactive=True)
            with gr.Row():
                btn_run = gr.Button("GENERATE SUBTITLE FILE", variant="primary")
            with gr.Row():
                tb_indicator = gr.Textbox(label="Output")
                btn_openfolder = gr.Button('πŸ“‚').style(full_width=False)

            btn_run.click(fn=whisper_inf.transcribe_mic,
                          inputs=[mic_input, dd_model, dd_lang, dd_subformat, cb_translate], outputs=[tb_indicator])
            btn_openfolder.click(fn=lambda: open_folder("outputs"), inputs=None, outputs=None)
            dd_model.change(fn=on_change_models, inputs=[dd_model], outputs=[cb_translate])

        with gr.TabItem("T2T Translation"):  # tab 4
            with gr.Row():
                file_subs = gr.Files(type="file", label="Upload Subtitle Files to translate here",
                                     file_types=['.vtt', '.srt'])

            with gr.TabItem("NLLB"):  # sub tab1
                with gr.Row():
                    dd_nllb_model = gr.Dropdown(label="Model", value=nllb_inf.default_model_size,
                                                choices=nllb_inf.available_models)
                    dd_nllb_sourcelang = gr.Dropdown(label="Source Language", choices=nllb_inf.available_source_langs)
                    dd_nllb_targetlang = gr.Dropdown(label="Target Language", choices=nllb_inf.available_target_langs)
                with gr.Row():
                    btn_run = gr.Button("TRANSLATE SUBTITLE FILE", variant="primary")
                with gr.Row():
                    tb_indicator = gr.Textbox(label="Output")
                    btn_openfolder = gr.Button('πŸ“‚').style(full_width=False)
                with gr.Column():
                    md_vram_table = gr.HTML(NLLB_VRAM_TABLE, elem_id="md_nllb_vram_table")

            btn_run.click(fn=nllb_inf.translate_file,
                          inputs=[file_subs, dd_nllb_model, dd_nllb_sourcelang, dd_nllb_targetlang],
                          outputs=[tb_indicator])
            btn_openfolder.click(fn=lambda: open_folder(os.path.join("outputs", "translations")), inputs=None, outputs=None)


block.launch()