              desc = f"Running pass {phase + 1} of {self._extractor.passes}: {ph_desc}"
              for idx, extract_media in enumerate(tqdm(self._extractor.detected_faces(),
                                                       total=self._images.process_count,
                                                       file=sys.stdout,
                                                       desc=desc)):
                  self._check_thread_error()
                  if is_final:
                      self._output_processing(extract_media, size)
                      self._output_faces(saver, extract_media)
                      if self._save_interval and (idx + 1) % self._save_interval == 0:
 
</s> remove                 batch.setdefault("image", []).append(converted_image)
                batch.setdefault("detected_faces", []).append(face)
                batch.setdefault("filename", []).append(item.filename)
 </s> add                 batch.image.append(converted_image)
                batch.detected_faces.append(face)
                batch.filename.append(item.filename) </s> remove         upper_left = self.transform(matrix_ones, batch["center_scale"], resolutions)
        bot_right = self.transform(matrix_size, batch["center_scale"], resolutions)
 </s> add         upper_left = self.transform(matrix_ones, center_scale, resolutions)
        bot_right = self.transform(matrix_size, center_scale, resolutions) </s> remove             x_center = (face.left + face.right) / 2.0
            y_center = (face.top + face.bottom) / 2.0 - face.height * 0.12
            scale = (face.width + face.height) * self.reference_scale
 </s> add             x_center = (cast(int, face.left) + face.right) / 2.0
            y_center = (cast(int, face.top) + face.bottom) / 2.0 - cast(int, face.height) * 0.12
            scale = (cast(int, face.width) + cast(int, face.height)) * self.reference_scale </s> remove     def get_center_scale(self, detected_faces):
        """ Get the center and set scale of bounding box """
 </s> add         Parameters
        ----------
        detected_faces: list
            List of :class:`~lib.align.DetectedFace` objects for the batch

        Returns
        -------
        :class:`numpy.ndarray`
            The center and scale of the bounding box
        """ </s> remove                         logger.trace("Rolled over %s faces of %s to next batch for '%s'",
                                     len(self._rollover.detected_faces), frame_faces,
 </s> add                         logger.trace("Rolled over %s faces of %s to next batch "  # type:ignore
                                     "for '%s'", len(self._rollover.detected_faces), frame_faces,
                                                     desc=desc,
                                                     leave=False)):
              desc = f"Running pass {phase + 1} of {self._extractor.passes}: {ph_desc}"
              for idx, extract_media in enumerate(tqdm(self._extractor.detected_faces(),
                                                       total=self._images.process_count,
                                                       file=sys.stdout,
                                                     desc=desc,
                                                     leave=False)):
                  self._check_thread_error()
                  if is_final:
                      self._output_processing(extract_media, size)
                      self._output_faces(saver, extract_media)
                      if self._save_interval and (idx + 1) % self._save_interval == 0:
keep keep keep keep replace keep keep keep keep keep
 Extract updates:
  - Default CPU detector to MTCNN
  - add basic Aligner false positive filters
  - Typing: align + plugins
  - Use specific AlignerBatch class for alignment
  - 
scripts/extract.py