      def iterate_frame(self, *args):
          """ Iterate frame up or down, stopping at either end """
          iteration = args[1]
          max_frame = self.state["navigation"]["max_frame"]
          if iteration in ("first", "last"):
              next_frame = 0 if iteration == "first" else max_frame
              self.state["navigation"]["frame_idx"] = next_frame
              self.state["navigation"]["last_request"] = 0
 
</s> remove         iterator = self.alignments.yield_faces
 </s> add 
        logger.debug("Iterating frame: (args: %s)", args)
      def iterate_frame(self, *args):
          """ Iterate frame up or down, stopping at either end """
        logger.debug("Iterating frame: (args: %s)", args)
          iteration = args[1]
          max_frame = self.state["navigation"]["max_frame"]
          if iteration in ("first", "last"):
              next_frame = 0 if iteration == "first" else max_frame
              self.state["navigation"]["frame_idx"] = next_frame
              self.state["navigation"]["last_request"] = 0
keep add keep 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_manual.py