mohammednouman's picture
Update app.py
fdeba6c verified
# importing the required libraries and classes
import os
import gradio as gr
from dotenv import load_dotenv
from langchain_openai import OpenAI
from langchain.prompts import PromptTemplate
from pytube import YouTube
from youtube_transcript_api import YouTubeTranscriptApi
from langchain.chains import LLMChain
from langchain_openai import ChatOpenAI
# Load environment variables from .env file
load_dotenv()
# Access the API key
openai_api_key = os.getenv("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")
def get_transcript(youtube_url):
""" This Function will return the transcript of the given YouTube URL """
try:
# Extract the video ID from the YouTube URL
video_id = youtube_url.split("?v=")[1]
# Get the transcript
transcript = YouTubeTranscriptApi.get_transcript(video_id)
transcript_text = " ".join([entry["text"] for entry in transcript])
return transcript_text
# returning -1, if the URL is not valid
except:
return -1
def get_title(youtube_url):
""" This function will return the Title of the given YouTube URL """
try:
# getting the title of the Youtube video
yt_video = YouTube(youtube_url)
return yt_video.title
# returning -1, if the URL is not valid
except:
return -1
def get_result(url,content):
""" This function will return the content(type of content provided by the user)"""
# getting the title and transcript of the Youtube URL
title,transcript = get_title(url) , get_transcript(url)
# if the URL is not valid
if title == -1 and transcript == -1:
return f'The provided url: "{url}" is not valid. Please provide a valid URL.'
# this template is for the Article or Stories
basic_template = "Imagine you're a content creator. Your task is to create {user_input} by leveraging the provided title and transcript creatively. Craft a compelling {user_input} that engages the audience and leverages the information from the video in an about 800-1000 words. Your output should be creative. Specifics: The YouTube video is titled '{title}', and you have access to its transcript: {transcript}"
# this template is for the Short Video Script
reel_template = "Imagine you're a content writer. Your task is to produce a concise and engaging Short Video Script. You can leverage the provided video title and transcript creatively. Create a concise and powerful script for a 1-minute short video, tailored for the user's use in crafting their own video. Specifics: The YouTube video is titled '{title}', and you have access to its transcript: {transcript}"
if content == 'Shorts/Reel Script':
prompt = PromptTemplate(
template = reel_template,
input_variables = ['title','transcript','user_input']
)
else:
prompt = PromptTemplate(
template = basic_template,
input_variables=['title','transcript','user_input']
)
chain = LLMChain(
prompt = prompt,
llm = ChatOpenAI(temperature=0.7, model = 'gpt-3.5-turbo-16k')
)
# invoking the chain and return the output i.e. content
try:
return chain.invoke({'title':title,'transcript':transcript,'user_input':content})['text']
except Exception as e:
return f'Error: {e}'
if __name__ == "__main__":
# name of the WebApp
title="πŸ€– YOUTUBE-SUMMARIZER πŸ€–"
# About the WebApp
description='πŸ€” CREATIVE CONTENT GENERATION FOR CONTENT CREATORS 🧠.\n\n WORKING βš™οΈ\n\n πŸ’» GIVE THE YOUTUBE LINK OF YOUR CHOICE AND SELECT THE OUTPUT TYPE AND YOUR RESULT IS READY !!!!!! 🎯'
webapp = gr.Interface(
fn = get_result,
inputs=[gr.Textbox(placeholder="Enter your URL here...."),gr.Dropdown(["Stories",'Article','Shorts/Reel Script'],label="Choose the type of Content!")],
outputs=gr.TextArea(label='Content'),
title=title,
description=description
)
webapp.launch()