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("
🔊 Transcription Delight
")
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()