          self._image_shape = cast(Tuple[int, int, int], image.shape)
          self._detected_faces: List["DetectedFace"] = ([] if detected_faces is None
                                                        else detected_faces)
          self._frame_metadata: Dict[str, Any] = {}
  
      @property
      def filename(self) -> str:
          """ str: The base name of the :attr:`image` filename. """
          return self._filename
  
 
</s> remove                                      distance=self.config["aligner_distance"])
 </s> add                                      distance=self.config["aligner_distance"],
                                     save_output=self.config["save_filtered"]) </s> remove         filename = os.path.join(self.location, os.path.basename(filename))
 </s> add         location = os.path.join(self.location, sub_folder) if sub_folder else self._location
        if sub_folder and not os.path.exists(location):
            os.makedirs(location)

        filename = os.path.join(location, os.path.basename(filename)) </s> remove             return faces
 </s> add             return faces, sub_folders
        self._sub_folders: List[Optional[str]] = []
          self._image_shape = cast(Tuple[int, int, int], image.shape)
          self._detected_faces: List["DetectedFace"] = ([] if detected_faces is None
                                                        else detected_faces)
          self._frame_metadata: Dict[str, Any] = {}
        self._sub_folders: List[Optional[str]] = []
  
      @property
      def filename(self) -> str:
          """ str: The base name of the :attr:`image` filename. """
          return self._filename
  
keep keep keep add keep keep keep keep keep keep
 Extract filter: Allow saving of filtered images 
plugins/extract/pipeline.py