                                                                        as_bytes=True)
          exception = False
  
          for phase in range(self._extractor.passes):
              if exception:
                  break
              is_final = self._extractor.final_pass
              detected_faces = {}
              self._extractor.launch()
              self._check_thread_error()
              ph_desc = "Extraction" if self._extractor.passes == 1 else self._extractor.phase_text
 
</s> remove             detected_faces = {}
 </s> add             detected_faces: Dict[str, ExtractMedia] = {} </s> remove             self._check_thread_error()
 </s> add             self._loader.check_thread_error() </s> remove         exception = False

 </s> add  </s> remove                                                      total=self._images.process_count,
 </s> add                                                      total=self._loader.process_count, </s> remove         self._frame_metadata: Dict[str, Any] = {}
 </s> add         self._is_aligned = is_aligned
        self._frame_metadata: Optional["PNGHeaderSourceDict"] = None
                                                                        as_bytes=True)
          exception = False
  
          for phase in range(self._extractor.passes):


              is_final = self._extractor.final_pass
              detected_faces = {}
              self._extractor.launch()
              self._check_thread_error()
              ph_desc = "Extraction" if self._extractor.passes == 1 else self._extractor.phase_text
keep keep keep keep replace replace keep keep keep keep keep
 Update Face Filter
  - Remove old face filter
  - plugins.extract.pipeline: Expose plugins directly
  - Change `is_aligned` from plugin level to ExtractMedia level
  - Allow extract pipeline to take faceswap aligned images
  - Add ability for recognition plugins to accept aligned faces as input
  - Add face filter to recognition plugin
  - Move extractor pipeline IO ops to own class 
scripts/extract.py