Added text replacer

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

@ -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()

@ -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 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()
Loading…
Cancel
Save