          self._faces_dir = arguments.faces_dir
          self._filelist = self._get_filenames()
          logger.debug("Initialized %s", self.__class__.__name__)
  
      def _get_filenames(self) -> List[str]:
          """ Obtain the full path to all filenames in the specified faces folder.
  
          Only png files will be returned, any other files will be ignored. An error is output if
          the returned filelist is not valid
  
          Returns
          -------
          list
              Full path list to face png files
          """
          err = None
          if not self._faces_dir:
              err = "A faces folder must be provided."
          elif not os.path.isdir(self._faces_dir):
              err = f"The Faces location '{self._faces_dir}' does not exit"
          else:
              filelist = [os.path.join(self._faces_dir, fname)
                          for fname in os.listdir(self._faces_dir)
                          if os.path.splitext(fname.lower())[1] == ".png"]
          if not err and not filelist:
              err = "Faces folder should contain Faceswap extracted PNG files"
          if err:
              logger.error(err)
              sys.exit(0)
          logger.debug("Collected %s png images from folder '%s'", len(filelist), self._faces_dir)
          return filelist
  
      def process(self) -> None:
          """ Run the job to read faces from a folder to create alignments file(s). """
          logger.info("[CREATE ALIGNMENTS FROM FACES]")  # Tidy up cli output
          skip_count = 0
          d_align: Dict[str, Dict[str, List[Tuple[int, "AlignmentFileDict", str, dict]]]] = {}
 
</s> remove         for filename, meta in tqdm(read_image_meta_batch(self._filelist),
 </s> add         filelist = cast(List[Tuple[str, "PNGHeaderDict"]], self._faces.file_list_sorted)
        for filename, meta in tqdm(filelist, </s> remove         skip_count = 0
 </s> add         all_versions: Dict[str, List[float]] = {} </s> remove         self._filelist = self._get_filenames()
 </s> add         self._faces = Faces(arguments.faces_dir, with_alignments=True) </s> remove         self._save_alignments(alignments)
        if skip_count > 1:
            logger.warning("%s of %s files skipped that do not contain valid alignment data",
                           skip_count, len(self._filelist))
            logger.warning("Run the process in verbose mode to see which files were skipped")
 </s> add         self._save_alignments(alignments, versions) </s> remove                          ) -> Dict[str, Dict[str, List["AlignmentFileDict"]]]:
 </s> add                          ) -> Dict[str, Dict[str, "AlignmentDict"]]:
          self._faces_dir = arguments.faces_dir
          self._filelist = self._get_filenames()
          logger.debug("Initialized %s", self.__class__.__name__)
  




























      def process(self) -> None:
          """ Run the job to read faces from a folder to create alignments file(s). """
          logger.info("[CREATE ALIGNMENTS FROM FACES]")  # Tidy up cli output
          skip_count = 0
          d_align: Dict[str, Dict[str, List[Tuple[int, "AlignmentFileDict", str, dict]]]] = {}
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 alignments tool - Remove-face - Minor update 
tools/alignments/jobs_faces.py