diff --git a/utils/imagenarator.py b/utils/imagenarator.py index 9356540..48e15b8 100644 --- a/utils/imagenarator.py +++ b/utils/imagenarator.py @@ -1,11 +1,30 @@ import re import textwrap import os +import json from PIL import Image, ImageDraw, ImageFont from rich.progress import track from TTS.engine_wrapper import process_text +def load_text_replacements(): + text_replacements = {} + # Load background videos + with open("./utils/text_replacements.json") as json_file: + text_replacements = json.load(json_file) + del text_replacements["__comment"] + return text_replacements + +def perform_text_replacements(text): + updated_text = text + for replacement in text_replacements['text-and-audio']: + compiled = re.compile(re.escape(replacement[0]), re.IGNORECASE) + updated_text = compiled.sub(replacement[1], updated_text) + for replacement in text_replacements['text-only']: + compiled = re.compile(re.escape(replacement[0]), re.IGNORECASE) + updated_text = compiled.sub(replacement[1], updated_text) + return updated_text + def draw_multiple_line_text( image, text, font, text_color, padding, wrap=50, transparent=False @@ -55,7 +74,7 @@ def imagemaker(theme, reddit_obj: dict, txtclr, padding=5, transparent=False) -> """ Render Images for video """ - title = process_text(reddit_obj["thread_title"], False) + title = process_text(perform_text_replacements(reddit_obj["thread_title"]), False) texts = reddit_obj["thread_post"] id = re.sub(r"[^\w\s-]", "", reddit_obj["thread_id"]) @@ -77,5 +96,7 @@ def imagemaker(theme, reddit_obj: dict, txtclr, padding=5, transparent=False) -> for idx, text in track(enumerate(texts), "Rendering Image"): image = Image.new("RGBA", size, theme) text = process_text(text, False) - draw_multiple_line_text(image, text, font, txtclr, padding, wrap=30, transparent=transparent) + draw_multiple_line_text(image, perform_text_replacements(text), font, txtclr, padding, wrap=30, transparent=transparent) image.save(f"assets/temp/{id}/png/img{idx}.png") + +text_replacements = load_text_replacements() \ No newline at end of file diff --git a/utils/text_replacements.json b/utils/text_replacements.json new file mode 100644 index 0000000..a020c2f --- /dev/null +++ b/utils/text_replacements.json @@ -0,0 +1,22 @@ +{ + "__comment": "Input words to replace in the video", + "text-and-audio": [ + ["killed", "unalived"], + ["killing", "unaliving"], + ["kill", "unalive"], + ["dead", "unalive"], + ["drug", "substance"], + ["gun", "boom stick"], + ["nude", "without clothes"], + ["naked", "without clothes"], + ["fuck", "fork"], + ["shit", "poo"], + ["weed", "oui'd"], + ["shoot", "hit"], + ["shot", "hit"] + ], + "text-only": [], + "audio-only": [ + ["mic", "mike"] + ] +} diff --git a/utils/voice.py b/utils/voice.py index 37933ae..880cf10 100644 --- a/utils/voice.py +++ b/utils/voice.py @@ -1,5 +1,6 @@ import re import sys +import json import time as pytime from datetime import datetime from time import sleep @@ -12,6 +13,23 @@ from cleantext import clean if sys.version_info[0] >= 3: from datetime import timezone +def load_text_replacements(): + text_replacements = {} + # Load background videos + with open("./utils/text_replacements.json") as json_file: + text_replacements = json.load(json_file) + del text_replacements["__comment"] + return text_replacements + +def perform_text_replacements(text): + updated_text = text + for replacement in text_replacements['text-and-audio']: + compiled = re.compile(re.escape(replacement[0]), re.IGNORECASE) + updated_text = compiled.sub(replacement[1], updated_text) + for replacement in text_replacements['audio-only']: + compiled = re.compile(re.escape(replacement[0]), re.IGNORECASE) + updated_text = compiled.sub(replacement[1], updated_text) + return updated_text def check_ratelimit(response: Response) -> bool: """ @@ -92,5 +110,9 @@ def sanitize_text(text: str) -> str: if settings.config["settings"]["tts"]["no_emojis"]: result = clean(result, no_emoji=True) + result = perform_text_replacements(result) + # remove extra whitespace return " ".join(result.split()) + +text_replacements = load_text_replacements() \ No newline at end of file