                  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
              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,
 
</s> remove             detected_faces = {}
 </s> add             detected_faces: Dict[str, ExtractMedia] = {} </s> remove                                                      total=self._images.process_count,
 </s> add                                                      total=self._loader.process_count, </s> remove             if exception:
                break
 </s> add  </s> remove         exception = False

 </s> add  </s> remove                 self._check_thread_error()
 </s> add                 self._loader.check_thread_error()
            self._loader.check_thread_error()
                  break
              is_final = self._extractor.final_pass
              detected_faces = {}
              self._extractor.launch()
            self._loader.check_thread_error()
              ph_desc = "Extraction" if self._extractor.passes == 1 else self._extractor.phase_text
              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,
keep keep keep keep 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