Files
ALwrity/ToBeMigrated/ai_writers/youtube_writers/youtube_ai_writer.py
ajaysi 3c58fd555b Add AI marketing and writing tools from PRs #220, #310
New tools added to ToBeMigrated/ directory:

ai_marketing_tools/:
- ai_backlinker: AI-powered backlink generation
- ai_google_ads_generator: Google Ads generation with templates

ai_writers/:
- ai_blog_faqs_writer: FAQ generation for blogs
- ai_copywriter: Multiple copywriter frameworks (AIDA, PAS, 4C, 4R, etc.)
- ai_finance_report_generator: Financial report generation
- ai_story_illustrator: Story illustration
- ai_story_video_generator: Story video generation
- ai_story_writer: AI story writing
- github_blogs: GitHub blog integration
- speech_to_blog: Audio to blog conversion
- twitter_writers: Twitter/X content generation
- youtube_writers: YouTube content generation

These tools are in ToBeMigrated/ for future migration to the main backend.
2026-03-22 12:47:23 +05:30

237 lines
10 KiB
Python

"""
YouTube AI Writer
This module provides a comprehensive suite of tools for generating YouTube content.
"""
import streamlit as st
import importlib
import sys
import os
from pathlib import Path
from .modules.title_generator import write_yt_title
from .modules.description_generator import write_yt_description
from .modules.script_generator import write_yt_script
from .modules.thumbnail_generator import write_yt_thumbnail
from .modules.end_screen_generator import write_yt_end_screen
from .modules.tags_generator import write_yt_tags
from .modules.shorts_script_generator import write_yt_shorts
from .modules.community_post_generator import write_yt_community_post
from .modules.shorts_video_generator import write_yt_shorts_video
from .modules.channel_trailer_generator import write_yt_channel_trailer
def youtube_main_menu():
"""Main function for the YouTube AI Writer."""
# Initialize session state for selected tool if it doesn't exist
if "selected_tool" not in st.session_state:
st.session_state.selected_tool = None
# Define the YouTube tools with their details
youtube_tools = [
# Content Creation Tools
{
"name": "YT Title Generator",
"icon": "📝",
"description": "Create engaging YouTube video titles that drive clicks and views.",
"color": "#FF0000", # YouTube red
"category": "Content Creation",
"function": write_yt_title,
"status": "active"
},
{
"name": "YT Description Generator",
"icon": "📄",
"description": "Generate SEO-optimized descriptions for your YouTube videos.",
"color": "#FF0000", # YouTube red
"category": "Content Creation",
"function": write_yt_description,
"status": "active"
},
{
"name": "YT Script Generator",
"icon": "🎬",
"description": "Create professional YouTube scripts with optimized structures for engagement.",
"color": "#FF0000", # YouTube red
"category": "Content Creation",
"function": write_yt_script,
"status": "active"
},
{
"name": "YT Shorts Script Generator",
"icon": "📱",
"description": "Create engaging scripts optimized for YouTube Shorts format with vertical framing and hooks.",
"color": "#FF0000", # YouTube red
"category": "Content Creation",
"function": write_yt_shorts,
"status": "active"
},
{
"name": "YT Shorts Video Generator",
"icon": "🎥",
"description": "Generate complete YouTube Shorts videos with AI-generated images, narration, and music.",
"color": "#FF0000", # YouTube red
"category": "Content Creation",
"function": write_yt_shorts_video,
"status": "active"
},
{
"name": "Channel Trailer Generator",
"icon": "🎥",
"description": "Create compelling channel trailers that convert visitors into subscribers.",
"color": "#FF0000", # YouTube red
"category": "Content Creation",
"function": write_yt_channel_trailer,
"status": "active"
},
# Optimization Tools
{
"name": "Thumbnail Generator",
"icon": "🎨",
"description": "Create engaging thumbnail ideas and descriptions with color scheme suggestions based on your brand.",
"color": "#FF0000", # YouTube red
"category": "Optimization",
"function": write_yt_thumbnail,
"status": "active"
},
{
"name": "YouTube Tags Generator",
"icon": "🏷️",
"description": "Generate optimized tags for your videos with trending tag suggestions to improve discoverability.",
"color": "#FF0000", # YouTube red
"category": "Optimization",
"function": write_yt_tags,
"status": "active"
},
# Engagement Tools
{
"name": "End Screen Generator",
"icon": "🎬",
"description": "Create effective end screen content and CTAs with template suggestions based on video type.",
"color": "#FF0000", # YouTube red
"category": "Engagement",
"function": write_yt_end_screen,
"status": "active"
},
{
"name": "Community Post Generator",
"icon": "💬",
"description": "Generate engaging community posts with AI-powered content suggestions and timing optimization.",
"color": "#FF0000", # YouTube red
"category": "Engagement",
"function": write_yt_community_post,
"status": "active"
},
{
"name": "Playlist Description Generator",
"icon": "📚",
"description": "Generate SEO-optimized descriptions for your playlists with organization suggestions.",
"color": "#CC0000", # Darker red for coming soon
"category": "Engagement",
"function": None,
"status": "coming_soon"
},
# Future Tools
{
"name": "Analytics Insights",
"icon": "📊",
"description": "Get AI-powered insights and recommendations based on your channel analytics.",
"color": "#990000", # Even darker red for future
"category": "Future Tools",
"function": None,
"status": "future"
},
{
"name": "Video Series Planner",
"icon": "📅",
"description": "Plan and organize your video series with content calendars and topic ideas.",
"color": "#990000", # Even darker red for future
"category": "Future Tools",
"function": None,
"status": "future"
}
]
# Create a container for the dashboard
dashboard_container = st.container()
# Create a container for the tool input section
tool_container = st.container()
# If a tool is selected, show its input section
if st.session_state.selected_tool is not None:
with tool_container:
# Display the selected tool's input section
st.markdown("---")
st.markdown(f"# {st.session_state.selected_tool['icon']} {st.session_state.selected_tool['name']}")
# Add a back button
if st.button("← Back to Dashboard", key="back_to_dashboard"):
# Clear the selected tool from session state
st.session_state.selected_tool = None
st.rerun()
# Call the function for the selected tool
if st.session_state.selected_tool["function"]:
# Directly call the function instead of using it as a reference
st.session_state.selected_tool["function"]()
else:
# Display coming soon or future tool information
st.info(f"**{st.session_state.selected_tool['status'].replace('_', ' ').title()}!**")
st.write(st.session_state.selected_tool["description"])
st.image(f"https://via.placeholder.com/600x300?text={st.session_state.selected_tool['name']}+Coming+Soon", use_column_width=True)
else:
with dashboard_container:
# Display the dashboard
# Header
st.markdown("""
<div style='background-color: #f0f2f6; padding: 10px; border-radius: 5px; margin-bottom: 10px;'>
<h1 style='color: #FF0000; text-align: center;'>🎥 YouTube AI Writer</h1>
<p style='text-align: center;'>Generate professional YouTube content with ALwrity's AI-powered tools</p>
</div>
""", unsafe_allow_html=True)
# Group tools by category
categories = {}
for tool in youtube_tools:
category = tool["category"]
if category not in categories:
categories[category] = []
categories[category].append(tool)
# Display tools by category
for category, tools in categories.items():
st.markdown(f"## {category}")
# Create a 3-column layout for the tool cards
cols = st.columns(3)
# Display the tool cards
for i, tool in enumerate(tools):
# Determine which column to use
col = cols[i % 3]
with col:
# Create a card for each tool
status_badge = ""
if tool["status"] == "coming_soon":
status_badge = "<span style='background-color: #FFA500; color: white; padding: 2px 8px; border-radius: 10px; font-size: 0.8em;'>Coming Soon</span>"
elif tool["status"] == "future":
status_badge = "<span style='background-color: #808080; color: white; padding: 2px 8px; border-radius: 10px; font-size: 0.8em;'>Future</span>"
st.markdown(f"""
<div style='background-color: {tool["color"]}; padding: 20px; border-radius: 10px; margin-bottom: 20px; color: white;'>
<h2 style='color: white;'>{tool["icon"]} {tool["name"]} {status_badge}</h2>
<p>{tool["description"]}</p>
</div>
""", unsafe_allow_html=True)
# Add a button to access the tool
if st.button(f"Use {tool['name']}", key=f"btn_{tool['name']}"):
# Store the selected tool in session state
st.session_state.selected_tool = tool
st.rerun()