          sample_filename = next(fname for fname in self._alignments.data)
          vidname = sample_filename[:sample_filename.rfind("_")]
          for idx, frame in enumerate(reader):
              frame_idx = idx + start_index
              filename = "{}_{:06d}.png".format(vidname, frame_idx + 1)
              self._set_thumbail(filename, frame[..., ::-1], frame_idx)
              if idx == segment_count - 1:
                  # Sometimes extra frames are picked up at the end of a segment, so stop
                  # processing when segment frame count has been hit.
                  break
 
</s> remove             key = "{}_{:06d}.png".format(basename, idx + 1)
 </s> add             key = f"{basename}_{idx + 1:06d}.png" </s> remove                     self._hashes_to_frame.setdefault(face["hash"], dict())[frame_name] = idx
 </s> add                     self._hashes_to_frame.setdefault(face["hash"], {})[frame_name] = idx </s> remove         batch = dict()
 </s> add         batch = {} </s> remove         face.landmarks_xy = ((face.landmarks_xy - center) * scale) + center
 </s> add         face._landmarks_xy = ((face.landmarks_xy - center) * scale) + center </s> remove                 "alignments file for your requested video.".format(len(pts_time), len(self.data)))
 </s> add                 "alignments file for your requested video.")
            filename = f"{vidname}_{frame_idx + 1:06d}.png"
          sample_filename = next(fname for fname in self._alignments.data)
          vidname = sample_filename[:sample_filename.rfind("_")]
          for idx, frame in enumerate(reader):
              frame_idx = idx + start_index
            filename = f"{vidname}_{frame_idx + 1:06d}.png"
              self._set_thumbail(filename, frame[..., ::-1], frame_idx)
              if idx == segment_count - 1:
                  # Sometimes extra frames are picked up at the end of a segment, so stop
                  # processing when segment frame count has been hit.
                  break
keep keep keep keep replace keep keep keep keep keep
 lib.align updates:
  - alignments.py
    - Add typed dicts for imported alignments
    - Explicitly check for presence of thumb value in alignments dict
    - linting
  - detected_face.py
    - Typing
    - Linting
    - Legacy support for pre-aligned face
    - Update dependencies to new property names 
tools/manual/detected_faces.py