                              and item.name.endswith(".py")
                              and item.name != "manual.py")
          return extractors
  
      @staticmethod
      def get_available_models():
 
</s> remove     def get_available_extractors(extractor_type):
 </s> add     def get_available_extractors(extractor_type, add_none=False): </s> remove     def _load_mask(masker, configfile):
 </s> add     def _load_mask(masker, image_is_aligned, configfile): </s> remove         """ numpy.ndarray: The mask at the size of :attr:`stored_size` """
        return np.frombuffer(decompress(self._mask),
                             dtype="uint8").reshape((self.stored_size, self.stored_size, 1))
 </s> add         """ numpy.ndarray: The mask at the size of :attr:`stored_size` with any requested blurring
        and threshold amount applied."""
        dims = (self.stored_size, self.stored_size, 1)
        mask = np.frombuffer(decompress(self._mask), dtype="uint8").reshape(dims)
        if self._threshold != 0.0:
            mask[mask < self._threshold] = 0.0
            mask[mask > 255.0 - self._threshold] = 255.0
        if self._blur_kernel != 0:
            mask = cv2.GaussianBlur(mask, (self._blur_kernel, self._blur_kernel), 0)[..., None]
        logger.trace("mask shape: %s", mask.shape)
        return mask
        if add_none:
            extractors.insert(0, "none")
                              and item.name.endswith(".py")
                              and item.name != "manual.py")
        if add_none:
            extractors.insert(0, "none")
          return extractors
  
      @staticmethod
      def get_available_models():
keep add keep keep keep keep
 Extract - Mask updates

- Remove none mask plugin
- Make pipeline more flexible
- Add support for pre-aligned faces to masker plugin
- Migrate blur and threshold settings to mask output 
plugins/plugin_loader.py