      """ Update legacy alignments:
  
          - Add frame dimensions
          - Rotate landmarks and bounding boxes on legacy alignments
          and remove the 'r' parameter """
  
      def __init__(self, alignments, arguments,
                   frames=None, child_process=False):
          self.alignments = alignments
          self.child_process = child_process
 
</s> remove     def __init__(self, alignments, arguments,
                 frames=None, child_process=False):
 </s> add     def __init__(self, alignments, arguments, frames=None, faces=None, child_process=False):
        logger.debug("Initializing %s: (arguments: %s, child_process: %s)",
                     self.__class__.__name__, arguments, child_process) </s> remove         and remove the 'r' parameter """
    def __init__(self, alignments, frames):
 </s> add         and remove the 'r' parameter
        - Add face hashes to alignments file
        """
    def __init__(self, alignments, frames, faces_dir): </s> remove         self.child_process = child_process
        self.frames = frames
        if not frames:
 </s> add         if child_process:
            self.frames = frames
            self.faces = faces
        else: </s> remove     def check_skipface(self, filename, face_idx):
        """ Check whether face is to be skipped """
        if self.faces_to_swap is None:
            return False
        face_name = "{}_{}{}".format(Path(filename).stem,
                                     face_idx,
                                     Path(filename).suffix)
        face_file = Path(self.args.input_aligned_dir) / Path(face_name)
        skip_face = face_file not in self.faces_to_swap
        if skip_face:
            logger.info("face %s for frame '%s' was deleted, skipping",
                        face_idx, os.path.basename(filename))
        return skip_face

 </s> add  </s> remove                     "\n'legacy': This updates legacy alignments to the latest "
                    "\n\tformat by adding frame dimensions and rotating "
                    "\n\tthe landmarks and bounding boxes" + frames_dir +
 </s> add                     "\n'legacy': This updates legacy alignments to the latest"
                    "\n\tformat by adding frame dimensions, rotating the"
                    "\n\tlandmarks and bounding boxes and adding face_hashes" +
                    frames_and_faces_dir +
          and remove the 'r' parameter
        - Add face hashes to alignments file
    """
      """ Update legacy alignments:
  
          - Add frame dimensions
          - Rotate landmarks and bounding boxes on legacy alignments
          and remove the 'r' parameter
        - Add face hashes to alignments file
    """
  
      def __init__(self, alignments, arguments,
                   frames=None, child_process=False):
          self.alignments = alignments
          self.child_process = child_process
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 
tools/lib_alignments/jobs.py