Formatting

This commit is contained in:
2024-02-20 14:47:54 +01:00
parent 3c3761ba7b
commit 280df1dd67
8 changed files with 58 additions and 31 deletions

View File

@@ -2,6 +2,8 @@ import json
from ...utils.prompting import get_prompt from ...utils.prompting import get_prompt
from ...chore import GenerationContext from ...chore import GenerationContext
class AssetsEngineSelector: class AssetsEngineSelector:
def __init__(self): def __init__(self):
self.ctx: GenerationContext self.ctx: GenerationContext
@@ -9,12 +11,16 @@ class AssetsEngineSelector:
def get_assets(self): def get_assets(self):
system_prompt, chat_prompt = get_prompt("assets", by_file_location=__file__) system_prompt, chat_prompt = get_prompt("assets", by_file_location=__file__)
engines_descriptors = "" engines_descriptors = ""
for engine in self.ctx.assetsengine: for engine in self.ctx.assetsengine:
engines_descriptors += f"name: '{engine.name}'\n{json.dumps(engine.specification)}\n" engines_descriptors += (
f"name: '{engine.name}'\n{json.dumps(engine.specification)}\n"
)
system_prompt = system_prompt.replace("{engines}", engines_descriptors) system_prompt = system_prompt.replace("{engines}", engines_descriptors)
chat_prompt = chat_prompt.replace("{caption}", json.dumps(self.ctx.timed_script)) chat_prompt = chat_prompt.replace(
"{caption}", json.dumps(self.ctx.timed_script)
)
assets = self.ctx.powerfulllmengine.generate( assets = self.ctx.powerfulllmengine.generate(
system_prompt=system_prompt, system_prompt=system_prompt,
@@ -27,4 +33,4 @@ class AssetsEngineSelector:
assets_opts = [asset for asset in assets if asset["engine"] == engine.name] assets_opts = [asset for asset in assets if asset["engine"] == engine.name]
assets_opts = [asset["args"] for asset in assets_opts] assets_opts = [asset["args"] for asset in assets_opts]
clips.extend(engine.get_assets(assets_opts)) clips.extend(engine.get_assets(assets_opts))
return clips return clips

View File

@@ -4,7 +4,6 @@ from typing import TypedDict
from moviepy.editor import ImageClip, VideoFileClip from moviepy.editor import ImageClip, VideoFileClip
class BaseAssetsEngine(BaseEngine): class BaseAssetsEngine(BaseEngine):
""" """
The base class for all assets engines. The base class for all assets engines.

View File

@@ -1,3 +1,3 @@
from .BaseAssetsEngine import BaseAssetsEngine from .BaseAssetsEngine import BaseAssetsEngine
from .DallEAssetsEngine import DallEAssetsEngine from .DallEAssetsEngine import DallEAssetsEngine
from .AssetsEngineSelector import AssetsEngineSelector from .AssetsEngineSelector import AssetsEngineSelector

View File

@@ -17,23 +17,30 @@ class SimpleCaptioningEngine(BaseCaptioningEngine):
self.stroke_color = options[4] self.stroke_color = options[4]
super().__init__() super().__init__()
def build_caption_object(self, text: str, start: float, end: float) -> TextClip: def build_caption_object(self, text: str, start: float, end: float) -> TextClip:
return TextClip( return (
text, TextClip(
fontsize=self.font_size, text,
color=self.font_color, fontsize=self.font_size,
font=self.font, color=self.font_color,
stroke_color=self.stroke_color, font=self.font,
stroke_width=self.stroke_width, stroke_color=self.stroke_color,
method="caption", stroke_width=self.stroke_width,
size=(self.ctx.width /3 * 2, None), method="caption",
).set_position(('center', 0.65), relative=True).set_start(start).set_duration(end - start) size=(self.ctx.width / 3 * 2, None),
)
.set_position(("center", 0.65), relative=True)
.set_start(start)
.set_duration(end - start)
)
def ends_with_punctuation(self, text: str) -> bool: def ends_with_punctuation(self, text: str) -> bool:
punctuations = (".", "?", "!", ",", ":", ";") punctuations = (".", "?", "!", ",", ":", ";")
return text.strip().endswith(tuple(punctuations)) return text.strip().endswith(tuple(punctuations))
def get_captions(self) -> list[TextClip]: def get_captions(self) -> list[TextClip]:
#3 words per 1000 px, we do the math # 3 words per 1000 px, we do the math
max_words = int(self.ctx.width / 1000 * 3) max_words = int(self.ctx.width / 1000 * 3)
clips = [] clips = []
@@ -51,7 +58,11 @@ class SimpleCaptioningEngine(BaseCaptioningEngine):
pause = self.ends_with_punctuation(current_line.strip()) pause = self.ends_with_punctuation(current_line.strip())
if len(line_with_new_word.split(" ")) > max_words or pause: if len(line_with_new_word.split(" ")) > max_words or pause:
clips.append(self.build_caption_object(current_line.strip(), current_start, current_end)) clips.append(
self.build_caption_object(
current_line.strip(), current_start, current_end
)
)
current_line = word["text"] # Start a new line with the current word current_line = word["text"] # Start a new line with the current word
current_start = word["start"] current_start = word["start"]
current_end = word["end"] current_end = word["end"]
@@ -62,7 +73,9 @@ class SimpleCaptioningEngine(BaseCaptioningEngine):
# Don't forget to add the last line if it exists # Don't forget to add the last line if it exists
if current_line: if current_line:
clips.append( clips.append(
self.build_caption_object(current_line.strip(), current_start, words[-1]["end"]) self.build_caption_object(
current_line.strip(), current_start, words[-1]["end"]
)
) )
return clips return clips
@@ -73,7 +86,7 @@ class SimpleCaptioningEngine(BaseCaptioningEngine):
with gr.Group(): with gr.Group():
font = gr.Dropdown( font = gr.Dropdown(
label="Font", label="Font",
choices=TextClip.list('font'), choices=TextClip.list("font"),
value="Arial", value="Arial",
) )
font_size = gr.Number( font_size = gr.Number(
@@ -93,5 +106,7 @@ class SimpleCaptioningEngine(BaseCaptioningEngine):
step=1, step=1,
value=6, value=6,
) )
font_stroke_color = gr.ColorPicker(label="Stroke Color", value="#000000") font_stroke_color = gr.ColorPicker(
label="Stroke Color", value="#000000"
)
return [font, font_size, font_stroke_width, font_color, font_stroke_color] return [font, font_size, font_stroke_width, font_color, font_stroke_color]

View File

@@ -16,10 +16,13 @@ class SettingsEngine(BaseEngine):
def load(self): def load(self):
self.ctx.width = self.width self.ctx.width = self.width
self.ctx.height = self.height self.ctx.height = self.height
@classmethod @classmethod
def get_options(cls): def get_options(cls):
#minimum is 720p, maximum is 4k, default is portrait hd # minimum is 720p, maximum is 4k, default is portrait hd
width = gr.Number(value=1080, minimum=720, maximum=3840, label="Width", step=1) width = gr.Number(value=1080, minimum=720, maximum=3840, label="Width", step=1)
height = gr.Number(value=1920, minimum=720, maximum=3840, label="Height", step=1) height = gr.Number(
value=1920, minimum=720, maximum=3840, label="Height", step=1
)
return [width, height] return [width, height]

View File

@@ -1 +1 @@
from .SettingsEngine import SettingsEngine from .SettingsEngine import SettingsEngine

View File

@@ -18,7 +18,7 @@ class BaseTTSEngine(BaseEngine):
@abstractmethod @abstractmethod
def synthesize(self, text: str, path: str) -> list[Word]: def synthesize(self, text: str, path: str) -> list[Word]:
pass pass
def remove_punctuation(self, text: str) -> str: def remove_punctuation(self, text: str) -> str:
return text.translate(str.maketrans("", "", ".,!?;:")) return text.translate(str.maketrans("", "", ".,!?;:"))
@@ -31,7 +31,7 @@ class BaseTTSEngine(BaseEngine):
if stt_word in original_word: if stt_word in original_word:
captions[i]["text"] = word captions[i]["text"] = word
new_captions.append(captions[i]) new_captions.append(captions[i])
#elif there is a word more in the stt than in the original, we # elif there is a word more in the stt than in the original, we
def time_with_whisper(self, path: str) -> list[Word]: def time_with_whisper(self, path: str) -> list[Word]:
""" """

View File

@@ -8,11 +8,15 @@ class Prompt(TypedDict):
chat: str chat: str
def get_prompt(name, *, location: str="src/chore/prompts", by_file_location: str = None) -> tuple[str, str]: def get_prompt(
name, *, location: str = "src/chore/prompts", by_file_location: str = None
) -> tuple[str, str]:
if by_file_location: if by_file_location:
path = os.path.join( path = os.path.join(
os.path.dirname(os.path.abspath(by_file_location)), "prompts", f"{name}.yaml" os.path.dirname(os.path.abspath(by_file_location)),
) "prompts",
f"{name}.yaml",
)
else: else:
path = os.path.join(os.getcwd(), location, f"{name}.yaml") path = os.path.join(os.getcwd(), location, f"{name}.yaml")
if not os.path.exists(path): if not os.path.exists(path):