              detected_faces = dict()
              self._extractor.launch()
              self._check_thread_error()
              ph_desc = "Extraction" if self._extractor.passes == 1 else self._extractor.phase_text
              desc = "Running pass {} of {}: {}".format(phase + 1,
                                                        self._extractor.passes,
                                                        ph_desc)
              status_bar = tqdm(self._extractor.detected_faces(),
                                total=self._images.process_count,
                                file=sys.stdout,
                                desc=desc)
              for idx, extract_media in enumerate(status_bar):
                  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             detected_faces = dict()
 </s> add             detected_faces = {} </s> remove                 status_bar.update(1)
 </s> add  </s> remove             output_filename = "{}_{}{}".format(filename, str(idx), extension)
 </s> add             output_filename = f"{filename}_{idx}{extension}" </s> remove         final_faces = list()
 </s> add         final_faces = [] </s> remove     def _threaded_redirector(self, task, io_args=None):
 </s> add     def _threaded_redirector(self, task: str, io_args: Optional[tuple] = None) -> None:
            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)):
              detected_faces = dict()
              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,
                                                     desc=desc)):
            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)):
            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)):
            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)):
            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)):
            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)):
            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)):
            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:
keep keep keep keep replace replace replace replace replace replace replace replace keep keep keep keep keep
 bugfix: extract - stop progress bar from going over max value 
scripts/extract.py