From 3b01e710d9356d6cfa00a9f6bd30c58f69b074e5 Mon Sep 17 00:00:00 2001 From: zm Date: Sun, 5 Jan 2025 13:34:02 -0800 Subject: [PATCH] convert badge image to rgba in-memory, also chunk out the stacktrace --- charts/agimus/Chart.yaml | 4 ++-- tasks/wrapped_generation.py | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/charts/agimus/Chart.yaml b/charts/agimus/Chart.yaml index 948dcbf3..5f487bcc 100644 --- a/charts/agimus/Chart.yaml +++ b/charts/agimus/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: agimus description: A helm chart for a discord bot that also runs a mysql db type: application -version: v2.12.8 -appVersion: v2.12.8 +version: v2.12.11 +appVersion: v2.12.11 diff --git a/tasks/wrapped_generation.py b/tasks/wrapped_generation.py index 89afcf01..db7cc1bc 100644 --- a/tasks/wrapped_generation.py +++ b/tasks/wrapped_generation.py @@ -2,11 +2,14 @@ from utils.thread_utils import to_thread +import io +import textwrap from moviepy import * from moviepy.video.fx.FadeIn import FadeIn from moviepy.video.fx.FadeOut import FadeOut from moviepy.video.fx.Resize import Resize + wrapped_year = datetime.utcnow().year - 1 def wrapped_generation_task(bot): @@ -45,6 +48,11 @@ async def wrapped_generation(): stacktrace = traceback.format_exc() error_message = str(e) await maintainer_user.send(f"Error processing Wrapped video for {user.display_name}:") + # Split the stacktrace into chunks of 1994 characters + stacktrace_chunks = textwrap.wrap(stacktrace, width=1994) + + for chunk in stacktrace_chunks: + await maintainer_user.send(f"```{chunk}```") await maintainer_user.send(f"```{stacktrace}```") await db_update_wrapped_job_status(job['job_id'], 'error', error_message=error_message) @@ -311,8 +319,17 @@ def _generate_wrapped_mp4(user_discord_id, user_display_name, wrapped_data): if not os.path.exists(rarest_badge_filepath): raise FileNotFoundError(f"Rarest Badge file not found at {rarest_badge_filepath}") - rarest_badge_image = ImageClip(rarest_badge_filepath) - rarest_badge_image = ImageClip(rarest_badge_filepath) + rarest_badge_image = Image.open(io.BytesIO(rarest_badge_filepath)) + + # Convert to RGBA in memory + rarest_badge_image = rarest_badge_image.convert("RGBA") + + # Convert the PIL image to a format MoviePy can use + rarest_badge_image_buffer = io.BytesIO() + rarest_badge_image.save(rarest_badge_image_buffer, format="PNG") + rarest_badge_image_buffer.seek(0) + + rarest_badge_image = ImageClip(rarest_badge_image_buffer, format="PNG") if rarest_badge_image: rarest_badge_image = rarest_badge_image.with_effects([Resize(width=500)])