# 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()