fixes capcut branches (works for me, but no garantuees)

adds new setting use_capcut (todo: make sure i have converted to that everywhere)

TODO: remove old my old attempts at better subtitles, and make capcut the default
TODO: make capcut.py close stuff that blocks clicks
TODO: make mememode shows memes for longer
TODO: make mememode require all the other settings and/or stuff
pull/2070/head
cyteon 1 year ago
parent e4c5f9bc6c
commit 27e324633a

@ -111,7 +111,8 @@ class TTSEngine:
else: # If the comment is not too long, just call the tts engine
self.call_tts(f"{idx}", process_text(comment["comment_body"]))
if settings.config["settings"]["storymodemethod"] != 0:
# TODO: Maybe move this somewhere better?
if not settings.config["settings"]["use_capcut"]:
comment_image_maker((0, 0, 0, 0), self.reddit_object, comments, (255, 255, 255), transparent=True)
print_substep("Saved Text to MP3 files successfully.", style="bold green")

@ -3,7 +3,10 @@ client_id = { optional = false, nmin = 12, nmax = 30, explanation = "The ID of y
client_secret = { optional = false, nmin = 20, nmax = 40, explanation = "The SECRET of your Reddit app of SCRIPT type", example = "fFAGRNJru1FTz70BzhT3Zg", regex = "^[-a-zA-Z0-9._~+/]+=*$", input_error = "The client ID can only contain printable characters.", oob_error = "The secret should be over 20 and under 40 characters, double check your input." }
username = { optional = false, nmin = 3, nmax = 20, explanation = "The username of your reddit account", example = "JasonLovesDoggo", regex = "^[-_0-9a-zA-Z]+$", oob_error = "A username HAS to be between 3 and 20 characters" }
password = { optional = false, nmin = 8, explanation = "The password of your reddit account", example = "fFAGRNJru1FTz70BzhT3Zg", oob_error = "Password too short" }
2fa = { optional = true, type = "bool", options = [true, false, ], default = false, explanation = "Whether you have Reddit 2FA enabled, Valid options are True and False", example = true }
2fa = { optional = true, type = "bool", options = [
true,
false,
], default = false, explanation = "Whether you have Reddit 2FA enabled, Valid options are True and False", example = true }
[capcut]
email = { optional = false, nmin = 3, nmax = 50, explanation = "The email of your CapCut account", example = "" }
@ -12,27 +15,189 @@ cloud_id = { optional = false, nmin = 8, type="int", explanation = "The cloud id
preset_number = { optional = true, default = 18, type = "int", explanation = "The preset number of your CapCut account", example = 1 }
[reddit.thread]
random = { optional = true, options = [true, false, ], default = false, type = "bool", explanation = "If set to no, it will ask you a thread link to extract the thread, if yes it will randomize it. Default: 'False'", example = "True" }
random = { optional = true, options = [
true,
false,
], default = false, type = "bool", explanation = "If set to no, it will ask you a thread link to extract the thread, if yes it will randomize it. Default: 'False'", example = "True" }
subreddit = { optional = false, regex = "[_0-9a-zA-Z\\+]+$", nmin = 3, explanation = "What subreddit to pull posts from, the name of the sub, not the URL. You can have multiple subreddits, add an + with no spaces.", example = "AskReddit+Redditdev", oob_error = "A subreddit name HAS to be between 3 and 20 characters" }
post_id = { optional = true, default = "", regex = "^((?!://|://)[+a-zA-Z0-9])*$", explanation = "Used if you want to use a specific post.", example = "urdtfx" }
max_comment_length = { default = 500, optional = false, nmin = 10, nmax = 10000, type = "int", explanation = "max number of characters a comment can have. default is 500", example = 500, oob_error = "the max comment length should be between 10 and 10000" }
min_comment_length = { default = 1, optional = true, nmin = 0, nmax = 10000, type = "int", explanation = "min_comment_length number of characters a comment can have. default is 0", example = 50, oob_error = "the max comment length should be between 1 and 100" }
post_lang = { default = "", optional = true, explanation = "The language you would like to translate to.", example = "es-cr", options = ['','af', 'ak', 'am', 'ar', 'as', 'ay', 'az', 'be', 'bg', 'bho', 'bm', 'bn', 'bs', 'ca', 'ceb', 'ckb', 'co', 'cs', 'cy', 'da', 'de', 'doi', 'dv', 'ee', 'el', 'en', 'en-US', 'eo', 'es', 'et', 'eu', 'fa', 'fi', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gom', 'gu', 'ha', 'haw', 'hi', 'hmn', 'hr', 'ht', 'hu', 'hy', 'id', 'ig', 'ilo', 'is', 'it', 'iw', 'ja', 'jw', 'ka', 'kk', 'km', 'kn', 'ko', 'kri', 'ku', 'ky', 'la', 'lb', 'lg', 'ln', 'lo', 'lt', 'lus', 'lv', 'mai', 'mg', 'mi', 'mk', 'ml', 'mn', 'mni-Mtei', 'mr', 'ms', 'mt', 'my', 'ne', 'nl', 'no', 'nso', 'ny', 'om', 'or', 'pa', 'pl', 'ps', 'pt', 'qu', 'ro', 'ru', 'rw', 'sa', 'sd', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tr', 'ts', 'tt', 'ug', 'uk', 'ur', 'uz', 'vi', 'xh', 'yi', 'yo', 'zh-CN', 'zh-TW', 'zu'] }
post_lang = { default = "", optional = true, explanation = "The language you would like to translate to.", example = "es-cr", options = [
'',
'af',
'ak',
'am',
'ar',
'as',
'ay',
'az',
'be',
'bg',
'bho',
'bm',
'bn',
'bs',
'ca',
'ceb',
'ckb',
'co',
'cs',
'cy',
'da',
'de',
'doi',
'dv',
'ee',
'el',
'en',
'en-US',
'eo',
'es',
'et',
'eu',
'fa',
'fi',
'fr',
'fy',
'ga',
'gd',
'gl',
'gn',
'gom',
'gu',
'ha',
'haw',
'hi',
'hmn',
'hr',
'ht',
'hu',
'hy',
'id',
'ig',
'ilo',
'is',
'it',
'iw',
'ja',
'jw',
'ka',
'kk',
'km',
'kn',
'ko',
'kri',
'ku',
'ky',
'la',
'lb',
'lg',
'ln',
'lo',
'lt',
'lus',
'lv',
'mai',
'mg',
'mi',
'mk',
'ml',
'mn',
'mni-Mtei',
'mr',
'ms',
'mt',
'my',
'ne',
'nl',
'no',
'nso',
'ny',
'om',
'or',
'pa',
'pl',
'ps',
'pt',
'qu',
'ro',
'ru',
'rw',
'sa',
'sd',
'si',
'sk',
'sl',
'sm',
'sn',
'so',
'sq',
'sr',
'st',
'su',
'sv',
'sw',
'ta',
'te',
'tg',
'th',
'ti',
'tk',
'tl',
'tr',
'ts',
'tt',
'ug',
'uk',
'ur',
'uz',
'vi',
'xh',
'yi',
'yo',
'zh-CN',
'zh-TW',
'zu',
] }
min_comments = { default = 20, optional = false, nmin = 10, type = "int", explanation = "The minimum number of comments a post should have to be included. default is 20", example = 29, oob_error = "the minimum number of comments should be between 15 and 999999" }
[ai]
ai_similarity_enabled = {optional = true, option = [true, false], default = false, type = "bool", explanation = "Threads read from Reddit are sorted based on their similarity to the keywords given below"}
ai_similarity_enabled = { optional = true, option = [
true,
false,
], default = false, type = "bool", explanation = "Threads read from Reddit are sorted based on their similarity to the keywords given below" }
ai_similarity_keywords = { optional = true, type = "str", example = 'Elon Musk, Twitter, Stocks', explanation = "Every keyword or even sentence, seperated with comma, is used to sort the reddit threads based on similarity" }
[settings]
allow_nsfw = { optional = false, type = "bool", default = false, example = false, options = [true, false, ], explanation = "Whether to allow NSFW content, True or False" }
theme = { optional = false, default = "dark", example = "light", options = ["dark", "light", "transparent", ], explanation = "Sets the Reddit theme, either LIGHT or DARK. For story mode you can also use a transparent background." }
allow_nsfw = { optional = false, type = "bool", default = false, example = false, options = [
true,
false,
], explanation = "Whether to allow NSFW content, True or False" }
theme = { optional = false, default = "dark", example = "light", options = [
"dark",
"light",
"transparent",
], explanation = "Sets the Reddit theme, either LIGHT or DARK. For story mode you can also use a transparent background." }
times_to_run = { optional = false, default = 1, example = 2, explanation = "Used if you want to run multiple times. Set to an int e.g. 4 or 29 or 1", type = "int", nmin = 1, oob_error = "It's very hard to run something less than once." }
opacity = { optional = false, default = 0.9, example = 0.8, explanation = "Sets the opacity of the comments when overlayed over the background", type = "float", nmin = 0, nmax = 1, oob_error = "The opacity HAS to be between 0 and 1", input_error = "The opacity HAS to be a decimal number between 0 and 1" }
#transition = { optional = true, default = 0.2, example = 0.2, explanation = "Sets the transition time (in seconds) between the comments. Set to 0 if you want to disable it.", type = "float", nmin = 0, nmax = 2, oob_error = "The transition HAS to be between 0 and 2", input_error = "The opacity HAS to be a decimal number between 0 and 2" }
mememode = { optional = true, type = "bool", default = false, example = false, options = [true, false,], explanation = "Only show post content, and multipile of them (no comments)" }
storymode = { optional = true, type = "bool", default = false, example = false, options = [true, false,], explanation = "Only read out title and post content, great for subreddits with stories" }
storymodemethod= { optional = true, default = 1, example = 1, explanation = "Style that's used for the storymode. Set to 0 for single picture display in whole video, set to 1 for fancy looking video ", type = "int", nmin = 0, oob_error = "It's very hard to run something less than once.", options = [0, 1] }
mememode = { optional = true, type = "bool", default = false, example = false, options = [
true,
false,
], explanation = "Only show post content, and multipile of them (no comments)" }
use_capcut = { optional = true, type = "bool", default = false, example = true, options = [
true,
false,
], explanation = "Use capcut to generate subtitles" }
storymode = { optional = true, type = "bool", default = false, example = false, options = [
true,
false,
], explanation = "Only read out title and post content, great for subreddits with stories" }
storymodemethod = { optional = true, default = 1, example = 1, explanation = "Style that's used for the storymode. Set to 0 for single picture display in whole video, set to 1 for fancy looking video ", type = "int", nmin = 0, oob_error = "It's very hard to run something less than once.", options = [
0,
1,
] }
storymode_max_length = { optional = true, default = 1000, example = 1000, explanation = "Max length of the storymode video in characters. 200 characters are approximately 50 seconds.", type = "int", nmin = 1, oob_error = "It's very hard to make a video under a second." }
resolution_w = { optional = false, default = 1080, example = 1440, explantation = "Sets the width in pixels of the final video" }
resolution_h = { optional = false, default = 1920, example = 2560, explantation = "Sets the height in pixels of the final video" }
@ -41,19 +206,60 @@ channel_name = { optional = true, default = "Reddit Tales", example = "Reddit St
words_on_screen = { optional = true, default = 10, example = 1, type = "int", explanation = "Sets how many words should be shown on screen" }
[settings.background]
background_video = { optional = true, default = "minecraft", example = "rocket-league", options = ["minecraft", "gta", "rocket-league", "motor-gta", "csgo-surf", "cluster-truck", "minecraft-2","multiversus","fall-guys","steep", ""], explanation = "Sets the background for the video based on game name" }
background_audio = { optional = true, default = "lofi", example = "chill-summer", options = ["lofi","lofi-2","chill-summer",""], explanation = "Sets the background audio for the video" }
background_video = { optional = true, default = "minecraft", example = "rocket-league", options = [
"satisfying",
"minecraft",
"gta",
"rocket-league",
"motor-gta",
"csgo-surf",
"cluster-truck",
"minecraft-2",
"multiversus",
"fall-guys",
"steep",
"",
], explanation = "Sets the background for the video based on game name" }
background_audio = { optional = true, default = "lofi", example = "chill-summer", options = [
"lofi",
"lofi-2",
"chill-summer",
"",
], explanation = "Sets the background audio for the video" }
background_audio_volume = { optional = true, type = "float", nmin = 0, nmax = 1, default = 0.15, example = 0.05, explanation = "Sets the volume of the background audio. If you don't want background audio, set it to 0.", oob_error = "The volume HAS to be between 0 and 1", input_error = "The volume HAS to be a float number between 0 and 1" }
enable_extra_audio = { optional = true, type = "bool", default = false, example = false, explanation = "Used if you want to render another video without background audio in a separate folder", input_error = "The value HAS to be true or false" }
background_thumbnail = { optional = true, type = "bool", default = false, example = false, options = [true, false,], explanation = "Generate a thumbnail for the video (put a thumbnail.png file in the assets/backgrounds directory.)" }
background_thumbnail = { optional = true, type = "bool", default = false, example = false, options = [
true,
false,
], explanation = "Generate a thumbnail for the video (put a thumbnail.png file in the assets/backgrounds directory.)" }
background_thumbnail_font_family = { optional = true, default = "arial", example = "arial", explanation = "Font family for the thumbnail text" }
background_thumbnail_font_size = { optional = true, type = "int", default = 96, example = 96, explanation = "Font size in pixels for the thumbnail text" }
background_thumbnail_font_color = { optional = true, default = "255,255,255", example = "255,255,255", explanation = "Font color in RGB format for the thumbnail text" }
[settings.tts]
voice_choice = { optional = false, default = "tiktok", options = ["elevenlabs", "streamlabspolly", "tiktok", "googletranslate", "awspolly", "pyttsx", ], example = "tiktok", explanation = "The voice platform used for TTS generation. " }
random_voice = { optional = false, type = "bool", default = true, example = true, options = [true, false,], explanation = "Randomizes the voice used for each comment" }
elevenlabs_voice_name = { optional = false, default = "Bella", example = "Bella", explanation = "The voice used for elevenlabs", options = ["Adam", "Antoni", "Arnold", "Bella", "Domi", "Elli", "Josh", "Rachel", "Sam", ] }
voice_choice = { optional = false, default = "tiktok", options = [
"elevenlabs",
"streamlabspolly",
"tiktok",
"googletranslate",
"awspolly",
"pyttsx",
], example = "tiktok", explanation = "The voice platform used for TTS generation. " }
random_voice = { optional = false, type = "bool", default = true, example = true, options = [
true,
false,
], explanation = "Randomizes the voice used for each comment" }
elevenlabs_voice_name = { optional = false, default = "Bella", example = "Bella", explanation = "The voice used for elevenlabs", options = [
"Adam",
"Antoni",
"Arnold",
"Bella",
"Domi",
"Elli",
"Josh",
"Rachel",
"Sam",
] }
elevenlabs_api_key = { optional = true, example = "21f13f91f54d741e2ae27d2ab1b99d59", explanation = "Elevenlabs API key" }
aws_polly_voice = { optional = false, default = "Matthew", example = "Matthew", explanation = "The voice used for AWS Polly" }
streamlabs_polly_voice = { optional = false, default = "Matthew", example = "Matthew", explanation = "The voice used for Streamlabs Polly" }
@ -62,4 +268,7 @@ tiktok_voice = { optional = true, default = "en_us_001", example = "en_us_006",
python_voice = { optional = false, default = "1", example = "1", explanation = "The index of the system tts voices (can be downloaded externally, run ptt.py to find value, start from zero)" }
py_voice_num = { optional = false, default = "2", example = "2", explanation = "The number of system voices (2 are pre-installed in Windows)" }
silence_duration = { optional = true, example = "0.1", explanation = "Time in seconds between TTS comments", default = 0.3, type = "float" }
no_emojis = { optional = false, type = "bool", default = false, example = false, options = [true, false,], explanation = "Whether to remove emojis from the comments" }
no_emojis = { optional = false, type = "bool", default = false, example = false, options = [
true,
false,
], explanation = "Whether to remove emojis from the comments" }

@ -100,6 +100,12 @@ def generate_captions(file_path, title):
if page.is_visible("//div[@class='guide-close-icon-Gtxdju']"):
page.click("//div[@class='guide-close-icon-Gtxdju']")
if page.is_visible("//div[@class='guide-close-icon-Gtxdju'][1]"):
page.click("//div[@class='guide-close-icon-Gtxdju'][1]")
if page.is_visible("//div[@class='guide-close-icon-OwPlMC']"):
page.click("//div[@class='guide-close-icon-OwPlMC']")
page.set_input_files("(//input[@type='file'])[1]", file_path)
time.sleep(2)

@ -496,7 +496,7 @@ def make_final_video(
pbar.close()
if settings.config["settings"]["storymodemethod"] == 0:
if settings.config["settings"]["use_capcut"]:
print_step("Adding CapCut captions 📝")
file_path = os.getcwd() + f"/results/{subreddit}/{filename}.mp4"
capcut.generate_captions(file_path, filename)

Loading…
Cancel
Save