File size: 4,062 Bytes
ce1e73e
 
 
b6df1e5
ce1e73e
 
 
 
 
 
 
b6df1e5
 
 
 
 
ce1e73e
 
 
 
 
 
 
 
 
 
 
 
 
 
b6df1e5
 
 
 
ce1e73e
 
 
 
 
 
 
 
b6df1e5
 
 
ce1e73e
 
 
 
 
 
 
b6df1e5
 
 
 
ce1e73e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b6df1e5
 
 
 
ce1e73e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# 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("OPENAI_API_KEY")



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="Creative Content Generator"

    # About the WebApp
    description='An AI platform capable of generating creative content such as articles, stories, short reel script for content creators.\n\n How does it works?\n\n Provide one YouTube link and type, type could be articles, stories, and script for short video and wait for the result'

    webapp = gr.Interface(
        fn = get_result,
        inputs=[gr.Textbox(placeholder="Provide the 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()