Merge pull request #1477 from elebumm/develop

Version 3.0.1
pull/1491/head 3.0.1
Jason 2 years ago committed by GitHub
commit 8990cba59d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -79,6 +79,8 @@ vocals: Final[tuple] = (
class TikTok: class TikTok:
"""TikTok Text-to-Speech Wrapper""" """TikTok Text-to-Speech Wrapper"""
def __init__(self): def __init__(self):
if not settings.config['settings']['tts']['tiktok_sessionid']:
raise TikTokTTSException(5)
headers = { headers = {
"User-Agent": "com.zhiliaoapp.musically/2022600030 (Linux; U; Android 7.1.2; es_ES; SM-G988N; " "User-Agent": "com.zhiliaoapp.musically/2022600030 (Linux; U; Android 7.1.2; es_ES; SM-G988N; "
"Build/NRD90M;tt-ok/3.12.13.1)", "Build/NRD90M;tt-ok/3.12.13.1)",
@ -140,7 +142,7 @@ class TikTok:
return response.json() return response.json()
@staticmethod @staticmethod
def random_voice(): def random_voice() -> str:
return random.choice(eng_voices) return random.choice(eng_voices)
@ -159,4 +161,7 @@ class TikTokTTSException(Exception):
if self._code == 4: if self._code == 4:
return f"Code: {self._code}, reason: the speaker doesn't exist, message: {self._message}" return f"Code: {self._code}, reason: the speaker doesn't exist, message: {self._message}"
if self._code == 5:
return f"You have to add session id in config to use titok TTS"
return f"Code: {self._message}, reason: unknown, message: {self._message}" return f"Code: {self._message}, reason: unknown, message: {self._message}"

@ -51,11 +51,18 @@ class TTSEngine:
self.length = 0 self.length = 0
self.last_clip_length = last_clip_length self.last_clip_length = last_clip_length
def add_periods(self): # adds periods to the end of paragraphs (where people often forget to put them) so tts doesn't blend sentences
for comment in self.reddit_object["comments"]:
comment["comment_body"] = comment["comment_body"].replace('\n', '. ')
if comment["comment_body"][-1] != '.':
comment["comment_body"] += '.'
def run(self) -> Tuple[int, int]: def run(self) -> Tuple[int, int]:
Path(self.path).mkdir(parents=True, exist_ok=True) Path(self.path).mkdir(parents=True, exist_ok=True)
print_step("Saving Text to MP3 files...") print_step("Saving Text to MP3 files...")
self.add_periods()
self.call_tts("title", process_text(self.reddit_object["thread_title"])) self.call_tts("title", process_text(self.reddit_object["thread_title"]))
# processed_text = ##self.reddit_object["thread_post"] != "" # processed_text = ##self.reddit_object["thread_post"] != ""
idx = None idx = None

@ -23,7 +23,7 @@ from video_creation.final_video import make_final_video
from video_creation.screenshot_downloader import get_screenshots_of_reddit_posts from video_creation.screenshot_downloader import get_screenshots_of_reddit_posts
from video_creation.voices import save_text_to_mp3 from video_creation.voices import save_text_to_mp3
__VERSION__ = "3.0" __VERSION__ = "3.0.1"
print( print(
""" """
@ -42,7 +42,7 @@ print_markdown(
checkversion(__VERSION__) checkversion(__VERSION__)
def main(POST_ID=None): def main(POST_ID=None) -> None:
global redditid ,reddit_object global redditid ,reddit_object
reddit_object = get_subreddit_threads(POST_ID) reddit_object = get_subreddit_threads(POST_ID)
redditid = id(reddit_object) redditid = id(reddit_object)
@ -55,7 +55,7 @@ def main(POST_ID=None):
make_final_video(number_of_comments, length, reddit_object, bg_config) make_final_video(number_of_comments, length, reddit_object, bg_config)
def run_many(times): def run_many(times) -> None:
for x in range(1, times + 1): for x in range(1, times + 1):
print_step( print_step(
f'on the {x}{("th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th")[x % 10]} iteration of {times}' f'on the {x}{("th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th")[x % 10]} iteration of {times}'
@ -108,11 +108,8 @@ if __name__ == "__main__":
shutdown() shutdown()
except Exception as err: except Exception as err:
print_step(f''' print_step(f'Sorry, something went wrong with this version! Try again, and feel free to report this issue at GitHub or the Discord community.\n'
Sorry, something went wrong with this version! Try again, and feel free to report this issue at GitHub or the Discord community.\n f'Version: {__VERSION__},Story mode: {str(config["settings"]["storymode"])}, Story mode method: {str(config["settings"]["storymodemethod"])},\n'
Version: {__VERSION__} \n f'Postid : {str(config["settings"])},allownsfw :{config["settings"]["allow_nsfw"]},is_nsfw : {str(reddit_object["is_nsfw"])}'
Story mode: {str(config["settings"]["storymode"])} \n )
Story mode method: {str(config["settings"]["storymodemethod"])}
''')
raise err raise err
# todo error

@ -134,6 +134,7 @@ def get_subreddit_threads(POST_ID: str):
content["thread_url"] = threadurl content["thread_url"] = threadurl
content["thread_title"] = submission.title content["thread_title"] = submission.title
content["thread_id"] = submission.id content["thread_id"] = submission.id
content["is_nsfw"] = submission.over_18
content["comments"] = [] content["comments"] = []
if settings.config["settings"]["storymode"]: if settings.config["settings"]["storymode"]:
if settings.config["settings"]["storymodemethod"] == 1: if settings.config["settings"]["storymodemethod"] == 1:

@ -7,7 +7,7 @@ praw==7.6.1
prawcore~=2.3.0 prawcore~=2.3.0
pytube==12.1.0 pytube==12.1.0
requests==2.28.1 requests==2.28.1
rich==12.5.1 rich==13.3.1
toml==0.10.2 toml==0.10.2
translators==5.3.1 translators==5.3.1
pyttsx3==2.90 pyttsx3==2.90

@ -4,13 +4,13 @@
"https://www.youtube.com/watch?v=vw5L4xCPy9Q", "https://www.youtube.com/watch?v=vw5L4xCPy9Q",
"bike-parkour-gta.mp4", "bike-parkour-gta.mp4",
"Achy Gaming", "Achy Gaming",
480 "center"
], ],
"rocket-league": [ "rocket-league": [
"https://www.youtube.com/watch?v=2X9QGY__0II", "https://www.youtube.com/watch?v=2X9QGY__0II",
"rocket_league.mp4", "rocket_league.mp4",
"Orbital Gameplay", "Orbital Gameplay",
200 "center"
], ],
"minecraft": [ "minecraft": [
"https://www.youtube.com/watch?v=n_Dv4JMiwK8", "https://www.youtube.com/watch?v=n_Dv4JMiwK8",
@ -22,7 +22,7 @@
"https://www.youtube.com/watch?v=qGa9kWREOnE", "https://www.youtube.com/watch?v=qGa9kWREOnE",
"gta-stunt-race.mp4", "gta-stunt-race.mp4",
"Achy Gaming", "Achy Gaming",
480 "center"
], ],
"csgo-surf": [ "csgo-surf": [
"https://www.youtube.com/watch?v=E-8JlyO59Io", "https://www.youtube.com/watch?v=E-8JlyO59Io",
@ -34,7 +34,7 @@
"https://www.youtube.com/watch?v=uVKxtdMgJVU", "https://www.youtube.com/watch?v=uVKxtdMgJVU",
"cluster_truck.mp4", "cluster_truck.mp4",
"No Copyright Gameplay", "No Copyright Gameplay",
480 "center"
], ],
"minecraft-2": [ "minecraft-2": [
"https://www.youtube.com/watch?v=Pt5_GSKIWQM", "https://www.youtube.com/watch?v=Pt5_GSKIWQM",

@ -10,28 +10,28 @@ from rich.text import Text
console = Console() console = Console()
def print_markdown(text): def print_markdown(text) -> None:
"""Prints a rich info message. Support Markdown syntax.""" """Prints a rich info message. Support Markdown syntax."""
md = Padding(Markdown(text), 2) md = Padding(Markdown(text), 2)
console.print(md) console.print(md)
def print_step(text): def print_step(text) -> None:
"""Prints a rich info message.""" """Prints a rich info message."""
panel = Panel(Text(text, justify="left")) panel = Panel(Text(text, justify="left"))
console.print(panel) console.print(panel)
def print_table(items): def print_table(items) -> None:
"""Prints items in a table.""" """Prints items in a table."""
console.print(Columns([Panel(f"[yellow]{item}", expand=True) for item in items])) console.print(Columns([Panel(f"[yellow]{item}", expand=True) for item in items]))
def print_substep(text, style=""): def print_substep(text, style="") -> None:
"""Prints a rich info message without the panelling.""" """Prints a rich colored info message without the panelling."""
console.print(text, style=style) console.print(text, style=style)

@ -6,7 +6,7 @@ from PIL import Image, ImageDraw, ImageFont
from rich.progress import track from rich.progress import track
from TTS.engine_wrapper import process_text from TTS.engine_wrapper import process_text
def draw_multiple_line_text(image, text, font, text_color, padding, wrap=50): def draw_multiple_line_text(image, text, font, text_color, padding, wrap=50) -> None:
""" """
Draw multiline text over given image Draw multiline text over given image
""" """
@ -24,7 +24,7 @@ def draw_multiple_line_text(image, text, font, text_color, padding, wrap=50):
# theme=bgcolor,reddit_obj=reddit_object,txtclr=txtcolor # theme=bgcolor,reddit_obj=reddit_object,txtclr=txtcolor
def imagemaker(theme, reddit_obj: dict, txtclr, padding=5): def imagemaker(theme, reddit_obj: dict, txtclr, padding=5) -> None:
""" """
Render Images for video Render Images for video
""" """

@ -13,7 +13,7 @@ if sys.version_info[0] >= 3:
from datetime import timezone from datetime import timezone
def check_ratelimit(response: Response): def check_ratelimit(response: Response) -> bool:
""" """
Checks if the response is a ratelimit response. Checks if the response is a ratelimit response.
If it is, it sleeps for the time specified in the response. If it is, it sleeps for the time specified in the response.
@ -30,7 +30,7 @@ def check_ratelimit(response: Response):
return True return True
def sleep_until(time): def sleep_until(time) -> None:
""" """
Pause your program until a specific end time. Pause your program until a specific end time.
'time' is either a valid datetime object or unix timestamp in seconds (i.e. seconds since Unix epoch) 'time' is either a valid datetime object or unix timestamp in seconds (i.e. seconds since Unix epoch)

@ -12,9 +12,11 @@ from utils import settings
from utils.console import print_step, print_substep from utils.console import print_step, print_substep
from utils.imagenarator import imagemaker from utils.imagenarator import imagemaker
from utils.videos import save_data
__all__ = ["download_screenshots_of_reddit_posts"] __all__ = ["download_screenshots_of_reddit_posts"]
def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int): def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
"""Downloads screenshots of reddit posts as seen on the web. Downloads to assets/temp/png """Downloads screenshots of reddit posts as seen on the web. Downloads to assets/temp/png
@ -37,7 +39,7 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
with sync_playwright() as p: with sync_playwright() as p:
print_substep("Launching Headless Browser...") print_substep("Launching Headless Browser...")
browser = p.chromium.launch() # headless=False #to check for chrome view browser = p.chromium.launch(headless=True) # headless=False will show the browser for debugging purposes
context = browser.new_context() context = browser.new_context()
# Device scale factor (or dsf for short) allows us to increase the resolution of the screenshots # Device scale factor (or dsf for short) allows us to increase the resolution of the screenshots
# When the dsf is 1, the width of the screenshot is 600 pixels # When the dsf is 1, the width of the screenshot is 600 pixels
@ -71,6 +73,20 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
context.add_cookies(cookies) # load preference cookies context.add_cookies(cookies) # load preference cookies
# Login to Reddit
print_substep("Logging in to Reddit...")
page = context.new_page()
page.goto("https://www.reddit.com/login", timeout=0)
page.set_viewport_size(ViewportSize(width=1920, height=1080))
page.wait_for_load_state()
page.locator('[name="username"]').fill(settings.config["reddit"]["creds"]["username"])
page.locator('[name="password"]').fill(settings.config["reddit"]["creds"]["password"])
page.locator("button:has-text('Log In')").click()
page.wait_for_load_state() # Wait for page to fully load and add 5 seconds
page.wait_for_timeout(5000)
# Get the thread screenshot # Get the thread screenshot
page = context.new_page() page = context.new_page()
page.goto(reddit_object["thread_url"], timeout=0) page.goto(reddit_object["thread_url"], timeout=0)
@ -105,7 +121,21 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
print_substep("Skipping translation...") print_substep("Skipping translation...")
postcontentpath = f"assets/temp/{reddit_id}/png/title.png" postcontentpath = f"assets/temp/{reddit_id}/png/title.png"
page.locator('[data-test-id="post-content"]').screenshot(path=postcontentpath) try:
page.locator('[data-test-id="post-content"]').screenshot(path=postcontentpath)
except Exception as e:
print_substep("Something went wrong!",style="red")
resp = input("Something went wrong with making the screenshots! Do you want to skip the post? (y/n) ")
if resp.casefold().startswith("y"):
save_data("", "", "skipped", reddit_id, "")
print_substep("The post is successfully skipped! You can now restart the program and this post will skipped.","green")
resp = input("Do you want the error traceback for debugging purposes? (y/n)")
if not resp.casefold().startswith("y"):
exit()
raise e
if storymode: if storymode:
page.locator('[data-click-id="text"]').first.screenshot( page.locator('[data-click-id="text"]').first.screenshot(
@ -151,6 +181,4 @@ def get_screenshots_of_reddit_posts(reddit_object: dict, screenshot_num: int):
# close browser instance when we are done using it # close browser instance when we are done using it
browser.close() browser.close()
print_substep("Screenshots downloaded Successfully.", style="bold green") print_substep("Screenshots downloaded Successfully.", style="bold green")
Loading…
Cancel
Save