Spaces:
Running
Running
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.") | |