Streamlit UI, Porting CLI - WIP
This commit is contained in:
257
lib/ai_writers/youtube_ai_writer.py
Normal file
257
lib/ai_writers/youtube_ai_writer.py
Normal file
@@ -0,0 +1,257 @@
|
||||
import time #Iwish
|
||||
import os
|
||||
import json
|
||||
import streamlit as st
|
||||
|
||||
|
||||
def write_yt_description():
|
||||
st.title("📽️ YT Description Writer")
|
||||
col1, col2 = st.columns([1, 1])
|
||||
with col1:
|
||||
keywords = st.text_input('**Describe Your YT video Keywords (comma-separated)**',
|
||||
help="Enter keywords separated by commas.").split(',')
|
||||
target_audience = st.multiselect('**Select Your Target Audience**',
|
||||
['Beginners', 'Marketers', 'Gamers', 'Foodies', 'Entrepreneurs', 'Students', 'Parents',
|
||||
'Tech Enthusiasts', 'General Audience', 'News Readers', 'Finance Enthusiasts'],
|
||||
help="Select the target audience for your video.")
|
||||
|
||||
with col2:
|
||||
tone_style = st.selectbox('**Select Tone and Style of YT Description**',
|
||||
['Casual', 'Professional', 'Humorous', 'Formal', 'Informal', 'Inspirational'],
|
||||
help="Select the tone and style of your video.")
|
||||
language = st.selectbox('**Select YT description Language**',
|
||||
['English', 'Spanish', 'Chinese', 'Hindi', 'Arabic'],
|
||||
help="Select the language for the video description.")
|
||||
|
||||
if st.button('**Generate YT Description**'):
|
||||
with st.spinner():
|
||||
if not keywords:
|
||||
st.error("🚫 Please provide all required inputs.")
|
||||
else:
|
||||
response = generate_youtube_description(keywords, target_audience, tone_style, language)
|
||||
if response:
|
||||
st.subheader(f'**🧕👩: Your Final youtube Description !**')
|
||||
st.write(response)
|
||||
st.write("\n\n\n\n\n\n")
|
||||
else:
|
||||
st.error("💥**Failed to write YT Description. Please try again!**")
|
||||
|
||||
|
||||
def generate_youtube_description(keywords, target_audience, tone_style, language):
|
||||
""" Generate youtube script generator """
|
||||
|
||||
prompt = f"""
|
||||
Please write a descriptive YouTube description in {language} for a video about {keywords} based on the following information:
|
||||
|
||||
Keywords: {', '.join(keywords)}
|
||||
|
||||
Target Audience: {', '.join(target_audience)}
|
||||
|
||||
Language for description: {', '.join(language)}
|
||||
|
||||
Tone and Style: {tone_style}
|
||||
|
||||
Specific Instructions:
|
||||
|
||||
- Include Primary Keywords Early: Place the most important keywords at the beginning to enhance SEO.
|
||||
- Write a Compelling Hook: Start with an engaging sentence to grab attention and entice viewers to watch the video.
|
||||
- Provide a Brief Overview: Summarize the video's content and what viewers can expect to learn or experience.
|
||||
- Use Relevant Keywords: Integrate additional keywords naturally to improve searchability.
|
||||
- Add Timestamps: Include timestamps for different sections of the video, if applicable.
|
||||
- Include Links: Add links to related videos, playlists, or external resources.
|
||||
- Encourage Engagement: Ask viewers to like, comment, and subscribe, and include a clear call to action.
|
||||
- Provide Contact Information: Include relevant social media handles, website links, or contact information.
|
||||
- Use Clear and Concise Language: Avoid jargon and keep sentences straightforward and easy to understand.
|
||||
- Include Hashtags: Use relevant hashtags to increase discoverability, placing them at the end of the description.
|
||||
- Tailor the Language and Tone: Adjust to suit the target audience.
|
||||
- Engage and Describe: Use descriptive language to make the video sound interesting.
|
||||
- Be Concise but Informative: Provide enough context about the video.
|
||||
- Highlight Unique Details: Mention any important details or highlights that make the video unique.
|
||||
- Ensure Proper Grammar and Spelling: Maintain a high standard of writing.
|
||||
|
||||
Generate a detailed YouTube description that adheres to the above guidelines and includes a compelling hook, a brief overview, relevant keywords, a call to action, hashtags, and any other relevant information. Ensure proper formatting and a clear structure.
|
||||
"""
|
||||
|
||||
try:
|
||||
response = generate_text_with_exception_handling(prompt)
|
||||
return response
|
||||
except Exception as err:
|
||||
st.error(f"Exit: Failed to get response from LLM: {err}")
|
||||
exit(1)
|
||||
|
||||
def write_yt_title():
|
||||
""" Generat YT Titles UI """
|
||||
st.title("🎬 Write YT Video Titles")
|
||||
with st.expander("**PRO-TIP** - Read the instructions below.", expanded=True):
|
||||
col1, col2 = st.columns([5, 5])
|
||||
with col1:
|
||||
main_points = st.text_area('**What is your video about ?**',
|
||||
placeholder='Write few words on your video for title ? (e.g., "New trek, Latest in news, Finance, Tech...")')
|
||||
tone_style = st.selectbox('**Select Tone & Style**', ['Casual', 'Professional', 'Humorous', 'Formal', 'Informal', 'Inspirational'])
|
||||
with col2:
|
||||
target_audience = st.multiselect('**Select Video Target Audience(One Or Multiple)**', [
|
||||
'Beginners',
|
||||
'Marketers',
|
||||
'Gamers',
|
||||
'Foodies',
|
||||
'Entrepreneurs',
|
||||
'Students',
|
||||
'Parents',
|
||||
'Tech Enthusiasts',
|
||||
'General Audience',
|
||||
'News article',
|
||||
'Finance Article'])
|
||||
|
||||
use_case = st.selectbox('**Youtube Title Use Case**', [
|
||||
'Tutorials',
|
||||
'Product Reviews',
|
||||
'Explainer Videos',
|
||||
'Vlogs',
|
||||
'Motivational Speeches',
|
||||
'Comedy Skits',
|
||||
'Educational Content'
|
||||
])
|
||||
if st.button('**Write YT Titles**'):
|
||||
with st.status("Assigning AI professional to write your YT Titles..", expanded=True) as status:
|
||||
if not main_points:
|
||||
st.error("🚫 Please provide all required inputs.")
|
||||
else:
|
||||
response = generate_youtube_title(target_audience, main_points, tone_style, use_case)
|
||||
if response:
|
||||
st.subheader(f'**🧕👩: Your Final youtube Titles !**')
|
||||
st.markdown(response)
|
||||
st.write("\n\n\n")
|
||||
else:
|
||||
st.error("💥**Failed to write Letter. Please try again!**")
|
||||
|
||||
|
||||
def generate_youtube_title(target_audience, main_points, tone_style, use_case):
|
||||
""" Generate youtube script generator """
|
||||
|
||||
prompt = f"""
|
||||
**Instructions:**
|
||||
|
||||
Please generate 5 YouTube title options for a video about **{main_points}** based on the following information:
|
||||
|
||||
|
||||
**Target Audience:** {target_audience}
|
||||
|
||||
**Tone and Style:** {tone_style}
|
||||
|
||||
**Use Case:** {use_case}
|
||||
|
||||
**Specific Instructions:**
|
||||
|
||||
* Make the titles catchy and attention-grabbing.
|
||||
* Use relevant keywords to improve SEO.
|
||||
* Tailor the language and tone to the target audience.
|
||||
* Ensure the title reflects the content and use case of the video.
|
||||
"""
|
||||
|
||||
try:
|
||||
response = generate_text_with_exception_handling(prompt)
|
||||
return response
|
||||
except Exception as err:
|
||||
st.error(f"Exit: Failed to get response from LLM: {err}")
|
||||
exit(1)
|
||||
|
||||
|
||||
def write_yt_script():
|
||||
""" Generate youtube scripts """
|
||||
with st.expander("**PRO-TIP** - Read the instructions below.", expanded=True):
|
||||
col1, col2 = st.columns([5, 5])
|
||||
with col1:
|
||||
main_points = st.text_area('**What is your video about ?**',
|
||||
placeholder='Write few lines on Video idea for transcript ? (e.g., "New trek, Latest in news, Finance, Tech...")')
|
||||
tone_style = st.selectbox('**Select Tone & Style**', ['Casual', 'Professional', 'Humorous', 'Formal', 'Informal', 'Inspirational'])
|
||||
target_audience = st.multiselect('**Select Video Target Audience(One Or Multiple)**', [
|
||||
'Beginners',
|
||||
'Marketers',
|
||||
'Gamers',
|
||||
'Foodies',
|
||||
'Entrepreneurs',
|
||||
'Students',
|
||||
'Parents',
|
||||
'Tech Enthusiasts',
|
||||
'General Audience',
|
||||
'News article',
|
||||
'Finance Article'
|
||||
])
|
||||
with col2:
|
||||
# Selectbox for Video Length
|
||||
video_length = st.selectbox('**Select Video Length**', [
|
||||
'Short (1-3 minutes)',
|
||||
'Medium (3-5 minutes)',
|
||||
'Long (5-10 minutes)',
|
||||
'Very Long (10+ minutes)'
|
||||
])
|
||||
|
||||
# Selectbox for Script Structure
|
||||
script_structure = st.selectbox('**Script Structure**', [
|
||||
'Linear',
|
||||
'Storytelling',
|
||||
'Q&A'
|
||||
])
|
||||
|
||||
use_case = st.selectbox('**Youtube Script Use Case**', [
|
||||
'Tutorials',
|
||||
'Product Reviews',
|
||||
'Explainer Videos',
|
||||
'Vlogs',
|
||||
'Motivational Speeches',
|
||||
'Comedy Skits',
|
||||
'Educational Content'
|
||||
])
|
||||
if st.button('**Write YT Script**'):
|
||||
with st.status("Assigning AI professional to write your YT script..", expanded=True) as status:
|
||||
if not main_points:
|
||||
st.error("🚫 Please provide all required inputs.")
|
||||
else:
|
||||
response = generate_youtube_script(target_audience, main_points, tone_style, video_length, use_case, script_structure)
|
||||
if response:
|
||||
st.subheader(f'**🧕👩: Your Final youtube script!**')
|
||||
st.write(response)
|
||||
st.write("\n\n\n\n\n\n")
|
||||
else:
|
||||
st.error("💥**Failed to write Letter. Please try again!**")
|
||||
|
||||
|
||||
def generate_youtube_script(target_audience, main_points, tone_style, video_length, use_case, script_structure):
|
||||
""" Generate youtube script generator """
|
||||
prompt = f"""
|
||||
Please write a YouTube script for a video about {main_points} based on the following information:
|
||||
|
||||
Target Audience: {', '.join(target_audience)}
|
||||
|
||||
Main Points: {', '.join(main_points)}
|
||||
|
||||
Tone and Style: {tone_style}
|
||||
|
||||
Video Length: {video_length}
|
||||
|
||||
Script Structure: {script_structure}
|
||||
|
||||
Specific Instructions:
|
||||
* Include a strong hook to grab attention at the start.
|
||||
* Structure the script with clear sections and headings.
|
||||
* Provide engaging introductions and conclusions for each section.
|
||||
* Use clear and concise language, avoiding jargon or overly technical terms.
|
||||
* Tailor the language and tone to the target audience.
|
||||
* Include relevant examples, anecdotes, and stories to make the video more engaging.
|
||||
* Add questions to encourage viewer interaction and participation.
|
||||
* End the script with a strong call to action, encouraging viewers to subscribe, like the video, or visit your website.
|
||||
|
||||
Use Case: {use_case}
|
||||
|
||||
Output Format:
|
||||
|
||||
Please provide the script in a clear and easy-to-read format.
|
||||
Include clear headings for each section and ensure that all instructions are followed.
|
||||
"""
|
||||
|
||||
try:
|
||||
response = generate_text_with_exception_handling(prompt)
|
||||
return response
|
||||
except Exception as err:
|
||||
st.error(f"Exit: Failed to get response from LLM: {err}")
|
||||
exit(1)
|
||||
Reference in New Issue
Block a user