from PIL import Image import random # Load the GIF gif_path = "./garfield-garfield-meme-ezgif.com-added-text.gif" gif = Image.open(gif_path) # Function to randomize the palette def randomize_palette(palette): # Convert palette (a flat list) to a list of (R, G, B) tuples colors = [(palette[i], palette[i + 1], palette[i + 2]) for i in range(0, len(palette), 3)] # Shuffle the colors random.shuffle(colors) # Flatten the list back to the original format randomized_palette = [val for color in colors for val in color] return randomized_palette # Extract frames and modify frame 21 frames = [] for i in range(gif.n_frames): gif.seek(i) new_frame = gif.convert("P", palette=Image.ADAPTIVE) # Convert to palette mode if i == 20: # Get the palette of the frame and randomize it palette = new_frame.getpalette() randomized_palette = randomize_palette(palette) # Apply the randomized palette to the frame new_frame.putpalette(randomized_palette) # Append the modified (or unmodified) frame frames.append(new_frame) # Save the modified GIF output_path = "./randomized_palette_gif.gif" frames[0].save(output_path, save_all=True, append_images=frames[1:], loop=0, duration=gif.info['duration']) print(f"Modified GIF with randomized palette saved as {output_path}")