diff --git a/src/PIL/ImageSequence.py b/src/PIL/ImageSequence.py
--- a/src/PIL/ImageSequence.py
+++ b/src/PIL/ImageSequence.py
@@ -54,3 +54,25 @@ def __next__(self):
 
     def next(self):
         return self.__next__()
+
+
+def all_frames(im, func=None):
+    """
+    Applies a given function to all frames in an image or a list of images.
+    The frames are returned as a list of separate images.
+
+    :param im: An image, or a list of images.
+    :param func: The function to apply to all of the image frames.
+    :returns: A list of images.
+    """
+    if not isinstance(im, list):
+        im = [im]
+
+    ims = []
+    for imSequence in im:
+        current = imSequence.tell()
+
+        ims += [im_frame.copy() for im_frame in Iterator(imSequence)]
+
+        imSequence.seek(current)
+    return [func(im) for im in ims] if func else ims

diff --git a/Tests/test_imagesequence.py b/Tests/test_imagesequence.py
--- a/Tests/test_imagesequence.py
+++ b/Tests/test_imagesequence.py
@@ -74,3 +74,25 @@ def test_palette_mmap(self):
         im.seek(0)
         color2 = im.getpalette()[0:3]
         self.assertEqual(color1, color2)
+
+    def test_all_frames(self):
+        # Test a single image
+        im = Image.open("Tests/images/iss634.gif")
+        ims = ImageSequence.all_frames(im)
+
+        self.assertEqual(len(ims), 42)
+        for i, im_frame in enumerate(ims):
+            self.assertFalse(im_frame is im)
+
+            im.seek(i)
+            self.assert_image_equal(im, im_frame)
+
+        # Test a series of images
+        ims = ImageSequence.all_frames([im, hopper(), im])
+        self.assertEqual(len(ims), 85)
+
+        # Test an operation
+        ims = ImageSequence.all_frames(im, lambda im_frame: im_frame.rotate(90))
+        for i, im_frame in enumerate(ims):
+            im.seek(i)
+            self.assert_image_equal(im.rotate(90), im_frame)

Transforms and enhancements across all frames
It would be nice if transforms and enhancements could be applied on animations.

What sort of transforms and enhancements?
for example.
https://pillow.readthedocs.io/en/stable/handbook/tutorial.html#geometrical-transforms

https://pillow.readthedocs.io/en/stable/handbook/tutorial.html#image-enhancement
So when you say that you'd like them to be applied on animations, what you mean is that you'd like to be able to apply them across all frames of an image at once?
yes. It seems to me that a lot of application would want a functionality like that.
Okay. What about a generic way to apply a method to all frames of an image?

So, for example -

```python
from PIL import Image, ImageSequence
im = Image.open('Tests/images/g4-multi.tiff')
ims = ImageSequence.all_frames(im, lambda im_frame: im_frame.rotate(180))
ims[0].save('out.tiff', save_all=True, append_images=ims[1:])
```

I've created this in PR #3778
lol, i was expecting a solution to this in....~5-10 years XD
@radarhere is that good 😄 