      def _skip_num(self):
          """ int: Number of frames to skip if extract_every_n has been provided """
          return self._args.extract_every_n if hasattr(self._args, "extract_every_n") else 1
  
      def _set_skip_list(self):
          """ Add the skip list to the image loader
  
          Checks against `extract_every_n` and the existence of alignments data (can exist if
          `skip_existing` or `skip_existing_faces` has been provided) and compiles a list of frame
          indices that should not be processed, providing these to :class:`lib.image.ImagesLoader`.
 
</s> remove     def _skip_num(self):
 </s> add     def _skip_num(self) -> int: </s> remove     def _save_interval(self):
 </s> add     def _save_interval(self) -> Optional[int]: </s> remove     def _output_faces(self, saver, extract_media):
 </s> add     def _output_faces(self, saver: ImagesSaver, extract_media: ExtractMedia) -> None: </s> remove     def process(self):
 </s> add     def process(self) -> None: </s> remove         func = getattr(self, "_{}".format(task))
 </s> add         func = getattr(self, f"_{task}")
    def _set_skip_list(self) -> None:
      def _skip_num(self):
          """ int: Number of frames to skip if extract_every_n has been provided """
          return self._args.extract_every_n if hasattr(self._args, "extract_every_n") else 1
  
    def _set_skip_list(self) -> None:
          """ Add the skip list to the image loader
  
          Checks against `extract_every_n` and the existence of alignments data (can exist if
          `skip_existing` or `skip_existing_faces` has been provided) and compiles a list of frame
          indices that should not be processed, providing these to :class:`lib.image.ImagesLoader`.
keep keep keep keep replace keep keep keep keep keep
 bugfix: extract - stop progress bar from going over max value 
scripts/extract.py