          self.frame_ranges = self.get_frame_ranges()
          self.imageidxre = re.compile(r"[^(mp4)](\d+)(?!.*\d)")
  
      # SKIP FACES #
      def get_aligned_directory(self):
          """ Check for the existence of an aligned directory for identifying
              which faces in the target frames should be swapped """
          faces_to_swap = None
          input_aligned_dir = self.args.input_aligned_dir
  
 
</s> remove             which faces in the target frames should be swapped """
        faces_to_swap = None
 </s> add             which faces in the target frames should be swapped.
            If it exists, obtain the hashes of the faces in the folder """
        face_hashes = list() </s> remove 
        self.faces_to_swap = self.get_aligned_directory()

 </s> add         self.alignments = alignments </s> remove             logger.info("Aligned directory not specified. All faces listed in the "
                        "alignments file will be converted")
 </s> add             logger.verbose("Aligned directory not specified. All faces listed in the "
                           "alignments file will be converted") </s> remove             faces_to_swap = [Path(path)
                             for path in get_image_paths(input_aligned_dir)]
            if not faces_to_swap:
                logger.warning("Aligned directory is empty, no faces will be converted!")
            elif len(faces_to_swap) <= len(self.input_images) / 3:
                logger.warning("Aligned directory contains an amount of images much less than "
                               "the input, are you sure this is the right directory?")
        return faces_to_swap
 </s> add             file_list = [path for path in get_image_paths(input_aligned_dir)]
            logger.info("Getting Face Hashes for selected Aligned Images")
            for face in tqdm(file_list, desc="Hashing Faces"):
                face_hashes.append(hash_image_file(face))
            logger.debug("Face Hashes: %s", (len(face_hashes)))
            if not face_hashes:
                logger.error("Aligned directory is empty, no faces will be converted!")
                exit(1)
            elif len(face_hashes) <= len(self.input_images) / 3:
                logger.warning("Aligned directory contains far fewer images than the input "
                               "directory, are you sure this is the right folder?")
        return face_hashes
    def remove_skipped_faces(self):
        """ Remove deleted faces from the loaded alignments """
        logger.debug("Filtering Faces")
        face_hashes = self.get_face_hashes()
        if not face_hashes:
            logger.debug("No face hashes. Not skipping any faces")
            return
        pre_face_count = self.alignments.faces_count
        self.alignments.filter_hashes(face_hashes, filter_out=False)
        logger.info("Faces filtered out: %s", pre_face_count - self.alignments.faces_count)

    def get_face_hashes(self):
          self.frame_ranges = self.get_frame_ranges()
          self.imageidxre = re.compile(r"[^(mp4)](\d+)(?!.*\d)")
  
      # SKIP FACES #
    def remove_skipped_faces(self):
        """ Remove deleted faces from the loaded alignments """
        logger.debug("Filtering Faces")
        face_hashes = self.get_face_hashes()
        if not face_hashes:
            logger.debug("No face hashes. Not skipping any faces")
            return
        pre_face_count = self.alignments.faces_count
        self.alignments.filter_hashes(face_hashes, filter_out=False)
        logger.info("Faces filtered out: %s", pre_face_count - self.alignments.faces_count)

    def get_face_hashes(self):
          """ Check for the existence of an aligned directory for identifying
              which faces in the target frames should be swapped """
          faces_to_swap = None
          input_aligned_dir = self.args.input_aligned_dir
  
keep keep keep keep replace keep keep keep keep keep
 Add Face Hashes to Alignments (#550)

* Convert main scripts to use face hashes

* Alignment tool: Use hashes, add logging, add face rename function

* More logging. Update Manual tool to work with hashing 
scripts/convert.py