docs: def dump(self, dest_pattern="{id}.jpg", override=True, mask=False, alpha=False, bits=8,
               zoom=None, max_size=None, increase_area=None, contrast=None, gamma=None, colormap=None, inverse=None):
          """
          Download the annotation crop, with optional image modifications.
  
          Parameters
          ----------
          dest_pattern : str, optional
              Destination path for the downloaded image. "{X}" patterns are replaced by the value of X attribute
              if it exists.
          override : bool, optional
              True if a file with same name can be overrided by the new file.
          mask : bool, optional
              True if a binary mask based on given annotations must be returned, False otherwise.
          alpha : bool, optional
              True if image background (outside annotations) must be transparent, False otherwise.
          zoom : int, optional
              Optional image zoom number
          bits : int (8,16,32) or str ("max"), optional
              Bit depth (bit per channel) of returned image. "max" returns the original image bit depth
          max_size : int, tuple, optional
              Maximum size (width or height) of returned image. None to get original size.
          increase_area : float, optional
              Increase the crop size. For example, an annotation whose bounding box size is (w,h) will have
              a crop dimension of (w*increase_area, h*increase_area).
          contrast : float, optional
              Optional contrast applied on returned image.
          gamma : float, optional
              Optional gamma applied on returned image.
          colormap : int, optional
              Cytomine identifier of a colormap to apply on returned image.
          inverse : bool, optional
              True to inverse color mapping, False otherwise.
  
          Returns
          -------
          downloaded : bool
              True if everything happens correctly, False otherwise. As a side effect, object attribute "filename"
              is filled with downloaded file path.
          """
          if self.id is None:
              raise ValueError("Cannot dump an annotation with no ID.")
  
          pattern = re.compile("{(.*?)}")
          dest_pattern = re.sub(pattern, lambda m: str(getattr(self, str(m.group(0))[1:-1], "_")), dest_pattern)
  
          destination = os.path.dirname(dest_pattern)
          filename, extension = os.path.splitext(os.path.basename(dest_pattern))
          extension = extension[1:]
  
          if extension not in ("jpg", "png", "tif", "tiff"):
              extension = "jpg"
  
          if not os.path.exists(destination):
              os.makedirs(destination)
  
          parameters = {
              "zoom": zoom,
              "maxSize": max_size,
              "increaseArea": increase_area,
              "contrast": contrast,
              "gamma": gamma,
              "colormap": colormap,
              "inverse": inverse,
              "bits": bits
          }
  
          if mask and alpha:
              image = "alphamask"
              if extension == "jpg":
                  extension = "png"
          elif mask:
              image = "mask"
          else:
              image = "crop"
  
          file_path = os.path.join(destination, "{}.{}".format(filename, extension))
  
          url = self.cropURL.replace("crop.jpg", "{}.{}".format(image, extension))
          result = Cytomine.get_instance().download_file(url, file_path, override, parameters)
          if result:
              self.filename = file_path
          return result