          if self.job == "missing-frames" and self.output == "move":
              logger.warning("Missing_frames was selected with move output, but there will "
                             "be nothing to move. Defaulting to output: console")
              self.output = "console"
          elif self.type == "faces" and self.job not in ("multi-faces",
                                                         "leftover-faces"):
              logger.warning("The selected folder is not valid. Only folder set with '-fc' is "
                             "supported for 'multi-faces' and 'leftover-faces'")
              exit(0)
  
      def compile_output(self):
 
</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 </s> remove                     "\n'spatial' - Perform spatial and temporal filtering to "
 </s> add                     "\n'spatial' - Perform spatial and temporal filtering to" </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             print("\n" + output_message)
 </s> add             for line in output_message.splitlines():
                logger.info(line)
        elif self.type == "faces" and self.job not in ("multi-faces", "leftover-faces"):
          if self.job == "missing-frames" and self.output == "move":
              logger.warning("Missing_frames was selected with move output, but there will "
                             "be nothing to move. Defaulting to output: console")
              self.output = "console"
        elif self.type == "faces" and self.job not in ("multi-faces", "leftover-faces"):
        elif self.type == "faces" and self.job not in ("multi-faces", "leftover-faces"):
              logger.warning("The selected folder is not valid. Only folder set with '-fc' is "
                             "supported for 'multi-faces' and 'leftover-faces'")
              exit(0)
  
      def compile_output(self):
keep keep keep keep replace 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 
tools/lib_alignments/jobs.py