isurulkh's picture
Upload 2 files
9c1e2b3 verified
raw
history blame contribute delete
No virus
3.13 kB
import streamlit as st
import google.generativeai as genai
from youtube_transcript_api import YouTubeTranscriptApi
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
import io
# Set Streamlit page configuration
st.set_page_config(page_title="YouTube Video Summarizer", layout="wide")
# Sidebar for user inputs
google_api_key = st.sidebar.text_input("Enter your Google API Key:", type="password")
youtube_link = st.sidebar.text_input("Enter YouTube Video Link:")
# Summary length customization
summary_length = st.sidebar.select_slider(
"Select Summary Length:", options=['Short', 'Medium', 'Long'], value='Medium'
)
# Define functions
def extract_transcript_details(youtube_video_url):
try:
video_id = youtube_video_url.split("=")[1]
transcript = YouTubeTranscriptApi.get_transcript(video_id)
return " ".join(segment["text"] for segment in transcript)
except Exception as e:
st.sidebar.error(f"An error occurred: {e}")
return None
def generate_gemini_content(transcript_text, prompt, api_key):
try:
genai.configure(api_key=api_key)
model = genai.GenerativeModel("gemini-pro")
response = model.generate_content(prompt + transcript_text)
return response.text
except Exception as e:
st.error(f"An error occurred: {e}")
return None
def create_pdf(summary_text):
buffer = io.BytesIO()
c = canvas.Canvas(buffer, pagesize=letter)
c.drawString(72, 800, "Summary")
text = c.beginText(40, 780)
text.setFont("Helvetica", 12)
for line in summary_text.split('\n'):
text.textLine(line)
c.drawText(text)
c.showPage()
c.save()
buffer.seek(0)
return buffer.getvalue()
# UI elements
st.title("YouTube Video Summarizer")
# Display video thumbnail
if youtube_link:
video_id = youtube_link.split("=")[1]
video_thumbnail = f"http://img.youtube.com/vi/{video_id}/0.jpg"
st.image(video_thumbnail, caption="Video Thumbnail", use_column_width=True)
# Process and display summary
if google_api_key and youtube_link and st.button("Get Detailed Notes"):
transcript_text = extract_transcript_details(youtube_link)
if transcript_text:
prompt = """You are a YouTube video summarizer. Summarize the video content into key points within 1500 words."""
customized_prompt = f"{prompt} Please generate a {summary_length.lower()} summary."
summary = generate_gemini_content(transcript_text, customized_prompt, google_api_key)
if summary:
st.success("Transcript extracted and summary generated successfully!")
st.subheader("Detailed Notes:")
st.write(summary)
# PDF download
pdf_bytes = create_pdf(summary)
st.download_button(label="Download Summary as PDF",
data=pdf_bytes,
file_name="YouTube_Summary.pdf",
mime="application/pdf")
else:
st.error("Failed to generate summary.")
else:
st.error("Failed to extract transcript.")