              if self._saver is not None:
                  face.image = extractor_output.image
                  self._save(frame, idx, face)
  
      def _save(self, frame, idx, detected_face):
          """ Build the mask preview image and save
  
          Parameters
          ----------
          frame: str
 
</s> remove     def _update_frames(self, extractor_output):
 </s> add     def _update_frames(self, extractor_output: ExtractMedia) -> None: </s> remove     def _check_for_missing(self, frame, idx, alignment):
 </s> add     def _check_for_missing(self, frame: str, idx: int, alignment: "AlignmentFileDict") -> bool: </s> remove         extractor_output: dict
 </s> add         extractor_output: :class:`plugins.extract.pipeline.ExtractMedia` </s> remove                             source=extractor_output.mask_tool_face_info)
 </s> add                             source=extractor_output.frame_metadata) </s> remove             logger.trace("filename: '%s', image_shape: %s", filename, image.shape)
 </s> add             logger.trace("filename: '%s', image_shape: %s", filename, image.shape)  # type: ignore
    def _save(self, frame: str, idx: int, detected_face: DetectedFace) -> None:
              if self._saver is not None:
                  face.image = extractor_output.image
                  self._save(frame, idx, face)
  
    def _save(self, frame: str, idx: int, detected_face: DetectedFace) -> None:
          """ Build the mask preview image and save
  
          Parameters
          ----------
          frame: str
keep keep keep keep replace keep keep keep keep keep
 Minor updates and fixups
  - Mask Tool - Typing + BiSeNet mask update fix
  - Alignments Tool - Auto search for alignments file 
tools/mask/mask.py