File size: 3,550 Bytes
8cd194c
fd90156
fe8d4db
fd90156
407cc22
7e3eef4
 
 
 
 
 
 
 
add165b
 
2243ed6
 
a200654
add165b
 
 
 
 
 
 
 
 
 
88322f7
fe8d4db
 
 
 
 
2243ed6
 
 
 
fe8d4db
 
 
 
2243ed6
 
 
fe8d4db
2243ed6
 
 
 
 
 
fe8d4db
88322f7
fe8d4db
 
2243ed6
 
 
 
 
add165b
 
 
2243ed6
 
 
 
 
 
 
 
 
 
 
 
d8a7b6b
 
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
import gradio as gr
import utils
import clean
import transcribe

css = """
.cursive-text {
    font-family: 'Brush Script MT', cursive;
}
"""

with gr.Blocks(theme="base", css=css) as demo:
    gr.Markdown("<center><h1> πŸ”Š Transcription <span class='cursive-text'>Delight</span> </h1></center>")
    with gr.Row():
        with gr.Column():
            with gr.Row():
                source = gr.Radio(label="Source type", choices=[ ("YouTube URL", "youtube"), ("Audio", "audio"), ("Video", "video")], value="youtube")
                cleanup_options = gr.CheckboxGroup(label="Cleanup Transcript with LLM", choices=["Remove typos", "Separate into paragraphs"])
            @gr.render(inputs=source)
            def show_source(s):
                if s == "audio":
                    source_component = gr.Audio(type="filepath")
                elif s == "video":
                    source_component = gr.Video()
                else:
                    source_component = gr.Textbox(placeholder="https://www.youtube.com/watch?v=44vi31hehw4")
                    preview = gr.HTML(label="Video preview")
                    source_component.change(utils.convert_to_embed_url, source_component, preview)

                    transcribe_btn.click(
                        utils.generate_audio,
                        [source, source_component],
                        [download_audio],
                        show_progress="minimal"
                    ).success(
                        lambda : gr.Accordion(open=True),
                        None,
                        raw_accordion
                    ).then(
                        transcribe.transcribe,
                        [download_audio],
                        [preliminary_transcript],
                        show_progress="minimal"
                    ).success(
                        lambda : (gr.Accordion(open=False), gr.Accordion(open=True)),
                        None,
                        [raw_accordion, final_accordion]
                    ).then(
                        clean.clean_transcript,
                        [download_audio, cleanup_options, llm_prompt, preliminary_transcript],
                        [final_transcript, download_md],
                        show_progress="minimal"
                    )

        with gr.Column():
            with gr.Row():
                transcribe_btn = gr.Button("Transcribe πŸ“œ", variant="primary")
            with gr.Accordion("Raw transcript", open=False) as raw_accordion:
                preliminary_transcript = gr.Markdown("*Raw transcript will appear here*", show_label=False, height=400)
            with gr.Accordion("Final transcript", open=False) as final_accordion:
                final_transcript = gr.Markdown("*Final transcript will appear here*", height=400)

    source.change(utils.transcribe_button, source, transcribe_btn)

    with gr.Accordion("βš™οΈ Settings and Files", open=False) as settings_accordion:
        with gr.Row():
            with gr.Column():
                llm_prompt = gr.Textbox(label="LLM Prompt", visible=False, lines=3)
                cleanup_options.change(
                    utils.generate_prompt,
                    cleanup_options,
                    [llm_prompt, settings_accordion]
                )
                with gr.Row():
                    download_audio = gr.DownloadButton("Download .mp3 File πŸ“₯", interactive=False)
                    download_md = gr.DownloadButton("Download .md πŸ“₯", interactive=False)
    
demo.launch()