              if not item.detected_faces:
                  self._queues["out"].put(item)
                  continue
              for f_idx, face in enumerate(item.detected_faces):
                  face.load_feed_face(item.get_image_copy(self.color_format),
                                      size=self.input_size,
                                      coverage_ratio=1.0,
                                      dtype="float32",
                                      is_aligned_face=self._image_is_aligned)
  
                  batch.setdefault("detected_faces", []).append(face)
                  batch.setdefault("filename", []).append(item.filename)
                  idx += 1
                  if idx == self.batchsize:
                      frame_faces = len(item.detected_faces)
 
</s> remove             if not self.alignments.frame_has_multiple_faces(frame_name):
 </s> add             if not self._alignments.frame_has_multiple_faces(frame_name): </s> remove                         if self.check_exists(frame, alignment, idx):
 </s> add                         if self._check_exists(frame, alignment, idx): </s> remove                 self.alignments.add_face_hashes(frame, hashes)
 </s> add                 self._alignments.add_face_hashes(frame, hashes) </s> remove             if not self.alignments.frame_exists(frame_name):
 </s> add             if not self._alignments.frame_exists(frame_name):
                feed_face = AlignedFace(face.landmarks_xy,
                                        image=item.get_image_copy(self.color_format),
                                        centering="face",
                                        size=self.input_size,
                                        coverage_ratio=self.coverage_ratio,
                                        dtype="float32",
                                        is_aligned=self._image_is_aligned)
              if not item.detected_faces:
                  self._queues["out"].put(item)
                  continue
              for f_idx, face in enumerate(item.detected_faces):
                feed_face = AlignedFace(face.landmarks_xy,
                                        image=item.get_image_copy(self.color_format),
                                        centering="face",
                                        size=self.input_size,
                                        coverage_ratio=self.coverage_ratio,
                                        dtype="float32",
                                        is_aligned=self._image_is_aligned)
                feed_face = AlignedFace(face.landmarks_xy,
                                        image=item.get_image_copy(self.color_format),
                                        centering="face",
                                        size=self.input_size,
                                        coverage_ratio=self.coverage_ratio,
                                        dtype="float32",
                                        is_aligned=self._image_is_aligned)
                feed_face = AlignedFace(face.landmarks_xy,
                                        image=item.get_image_copy(self.color_format),
                                        centering="face",
                                        size=self.input_size,
                                        coverage_ratio=self.coverage_ratio,
                                        dtype="float32",
                                        is_aligned=self._image_is_aligned)
                feed_face = AlignedFace(face.landmarks_xy,
                                        image=item.get_image_copy(self.color_format),
                                        centering="face",
                                        size=self.input_size,
                                        coverage_ratio=self.coverage_ratio,
                                        dtype="float32",
                                        is_aligned=self._image_is_aligned)
                feed_face = AlignedFace(face.landmarks_xy,
                                        image=item.get_image_copy(self.color_format),
                                        centering="face",
                                        size=self.input_size,
                                        coverage_ratio=self.coverage_ratio,
                                        dtype="float32",
                                        is_aligned=self._image_is_aligned)
                feed_face = AlignedFace(face.landmarks_xy,
                                        image=item.get_image_copy(self.color_format),
                                        centering="face",
                                        size=self.input_size,
                                        coverage_ratio=self.coverage_ratio,
                                        dtype="float32",
                                        is_aligned=self._image_is_aligned)
                  batch.setdefault("detected_faces", []).append(face)
                  batch.setdefault("filename", []).append(item.filename)
                  idx += 1
                  if idx == self.batchsize:
                      frame_faces = len(item.detected_faces)
keep keep keep keep replace replace replace replace replace replace keep keep keep keep keep
 Extract - Increase area and move centering (#1095)

* Extract
  - Implement aligner re-feeding
  - Add extract type to pipeline.ExtractMedia
  - Add pose annotation to debug
* Convert
  - implement centering
  - remove usage of feed and reference face properties
  - Remove distributed option from convert
  - Force update of alignments file on legacy receive
* Train
  - Resize preview image to model output size
  - Force legacy centering if centering does not exist in model's state file
  - Enable training on legacy face sets

* Alignments Tool
  - Update draw to include head/pose
  - Remove DFL drop + linting
  - Remove remove-frames job
  - remove align-eyes option
  - Update legacy masks to new extract type
  - Exit if attempting to merge version 1.0 alignments files with version 2.0 alignments files
  - Re-generate thumbnails on legacy upgrade
* Mask Tool
  - Update for new extract + bugfix full frame
* Manual Tool
  - Update to new extraction method
   - Disable legacy alignments,
   - extract box bugfix
   - extract faces - size to 512 and center on head
* Preview Tool
  - Display based on model centering
* Sort Tool
  - Use alignments for sort by face

* lib.aligner
  - Add Pose Class
  - Add AlignedFace Class
  - center _MEAN_FACE on x
  - Add meta information with versioning to alignments file
  - lib.aligner.get_align_matrix to use landmarks not face
  - Refactor aligned faces in lib.faces_detect
* lib.logger
  - larger file log padding
* lib.config
  - Fix global changeable_items
* lib.face_filter
  - Use new extracted face images
* lib.image
  - bump thumbnail default size to 96px 
plugins/extract/mask/_base.py