code: def _write(self, filename, frames, fps, loop=0, palette=256):
          
  
          from PIL import Image
          images = []
          for f in frames:
              data = open(f, 'rb').read()
              images.append(Image.open(io.BytesIO(data)))
  
          # GIF duration is only measured to a hundredth of a second
          duration = round(1 / fps, 2)
          im = images.pop(0)
          im.save(filename,
                  save_all=True,
                  append_images=images,
                  duration=duration,
                  loop=loop,
                  palette=palette)
docs: Write a series of frames as a single animated GIF.
  
          :param str filename: the name of the GIF file to write
  
          :param list frames: a list of filenames, each of which represents a single
              frame of the animation.  Each frame must have exactly the same
              dimensions, and the code has only been tested with .gif files.
  
          :param float fps:
              The number of frames per second.
  
          :param int loop:
              The number of iterations. Default 0 (meaning loop indefinitely).
  
          :param int palette:
              The number of colors to quantize the image to. Is rounded to
              the nearest power of two. Default 256.