Added text replacer

pull/1873/head
KyleBoyer 2 years ago
parent 99de32e65e
commit b47334f4c6

@ -1,11 +1,30 @@
import re import re
import textwrap import textwrap
import os import os
import json
from PIL import Image, ImageDraw, ImageFont 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 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( def draw_multiple_line_text(
image, text, font, text_color, padding, wrap=50, transparent=False 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 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"] texts = reddit_obj["thread_post"]
id = re.sub(r"[^\w\s-]", "", reddit_obj["thread_id"]) 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"): for idx, text in track(enumerate(texts), "Rendering Image"):
image = Image.new("RGBA", size, theme) image = Image.new("RGBA", size, theme)
text = process_text(text, False) 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") image.save(f"assets/temp/{id}/png/img{idx}.png")
text_replacements = load_text_replacements()

@ -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"]
]
}

@ -1,5 +1,6 @@
import re import re
import sys import sys
import json
import time as pytime import time as pytime
from datetime import datetime from datetime import datetime
from time import sleep from time import sleep
@ -12,6 +13,23 @@ from cleantext import clean
if sys.version_info[0] >= 3: if sys.version_info[0] >= 3:
from datetime import timezone 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: def check_ratelimit(response: Response) -> bool:
""" """
@ -92,5 +110,9 @@ def sanitize_text(text: str) -> str:
if settings.config["settings"]["tts"]["no_emojis"]: if settings.config["settings"]["tts"]["no_emojis"]:
result = clean(result, no_emoji=True) result = clean(result, no_emoji=True)
result = perform_text_replacements(result)
# remove extra whitespace # remove extra whitespace
return " ".join(result.split()) return " ".join(result.split())
text_replacements = load_text_replacements()
Loading…
Cancel
Save