pick random frame from gifs

This commit is contained in:
2025-07-20 18:54:37 +00:00
parent a5bf821186
commit 28cc8b2ed1

View File

@@ -6,9 +6,7 @@ import random
import requests import requests
import os import os
import pyszuru import pyszuru
from PIL import Image, ImageSequence, UnidentifiedImageError
from PIL import Image
from epd.epd_config import palArr, epdArr, EPD_TYPES from epd.epd_config import palArr, epdArr, EPD_TYPES
@@ -57,7 +55,7 @@ while not image_downloaded:
img.close() img.close()
image_downloaded = True image_downloaded = True
print("[DEBUG] Image successfully verified.") print("[DEBUG] Image successfully verified.")
except (PIL.UnidentifiedImageError, requests.exceptions.RequestException) as e: except (UnidentifiedImageError, requests.exceptions.RequestException) as e:
print( print(
f"[ERROR] Failed to process downloaded file (Error: {e}). Retrying with a new post..." f"[ERROR] Failed to process downloaded file (Error: {e}). Retrying with a new post..."
) )
@@ -81,6 +79,13 @@ while not image_downloaded:
# Process and upload # Process and upload
img = Image.open("image.jpg") img = Image.open("image.jpg")
if post.mime == "image/gif":
# Seek to a random frame
random_frame_index = random.randint(0, img.n_frames - 1)
print(f"[DEBUG] Detected GIF, selecting frame: {random_frame_index}")
img.seek(random_frame_index)
# Convert the frame to an RGB image to discard GIF palette and alpha for processing
img = img.convert("RGB")
# Get configuration from environment variables # Get configuration from environment variables
try: try: