# from utils.subtitles import getSubs # subs = getSubs("G8gEos8F9R0") # print(subs) # import json # with open("subs.json", "w") as f: # json.dump(subs, f) import datetime import gradio as gr def greet(name): pass def run_model(video_id, outname, chunk_size): CHUNK_SIZE = chunk_size OUT_PPT_NAME = outname from rich.progress import track from utils.subtitles import getSubsText from models.distilbart_cnn_12_6 import summarize from models.t5_small_medium_title_generation import t5model as generate_title from utils.marp_wrapper import marp import utils.markdown as md # from utils.chunk import LangChainChunker as chunker from utils.subtitles import subs as chunker from utils.ppt import generate_ppt from utils.video import video import os # check for marp command if os.system("command -v marp >> /dev/null"): print("Marp not found. Please install marp-cli.") os.system("sudo bash setup.sh") # Intermediary Markdown file print("Creating Markdown file...") ppt = marp("summary.md") ppt.add_header( theme="uncover", background="", _class="invert", ) # smaller font size (1.5rem) ppt.add_body("") # Generate video vid = video(f"https://youtu.be/{video_id}", f"out/vid-{video_id}") vid.download() # Get the Subtitles from the YouTube video print("Getting subtitles...") chunker_init = chunker(video_id) chunks = chunker_init.getSubsList(size=CHUNK_SIZE) chunk_len = len(chunks) print(f"subtitles divided to {chunk_len} chunks") chunk_num = 1 for chunk in track(chunks, description="Processing chunks"): print(f"processing Chunk: {chunk_num}/{chunk_len}") timestamp = str(datetime.timedelta(seconds=chunk[1])) # TODO: better file path img_path = f"out/vid-{video_id}_{timestamp}.png" summary = summarize(chunk[0]) vid.getframe(timestamp) title = generate_title(summary) ppt.add_page( md.h2(title), summary ) if os.path.exists(img_path): ppt.add_body(md.image( img_path, align="left", setAsBackground=True, size="contain")) ppt.marp_end() chunk_num += 1 continue print(f"Generating {OUT_PPT_NAME}..") ppt.close_file() generate_ppt("summary.md", OUT_PPT_NAME) # return full path to the ppt file return os.path.abspath(OUT_PPT_NAME) demo = gr.Interface(fn=run_model, inputs=["text", "text", gr.Slider(200, 1000)], outputs="file") demo.launch()