          tasks = ["extract_detect_in", "extract_align_in", "extract_mask_in", "extract_mask_out"]
          for task in tasks:
              # Limit queue size to avoid stacking ram
              self._queue_size = 32
              if task == "extract_detect_in" or (not self._is_parallel
                                                 and task == "extract_align_in"):
                  self._queue_size = 64
              queue_manager.add_queue(task, maxsize=self._queue_size)
              queues[task] = queue_manager.get_queue(task)
          logger.debug("Queues: %s", queues)
          return queues
 
</s> remove         tasks = ["extract_detect_in", "extract_align_in", "extract_mask_in", "extract_mask_out"]
 </s> add         tasks = ["extract_{}_in".format(phase) for phase in self._flow]
        tasks.append("extract_{}_out".format(self._final_phase)) </s> remove         self._detector = self._load_detector(detector, rotate_images, min_size, configfile)
        self._aligner = self._load_aligner(aligner, configfile, normalize_method)
        self._masker = self._load_masker(masker, configfile)
 </s> add         self._detect = self._load_detect(detector, rotate_images, min_size, configfile)
        self._align = self._load_align(aligner, configfile, normalize_method)
        self._mask = self._load_mask(masker, configfile) </s> remove             retval = [None]
 </s> add             retval = [getattr(self, "_{}".format(self.phase))] </s> remove         self.phase = "detect"
 </s> add         self._flow = ["detect", "align", "mask"]
        self.phase = self._flow[0] </s> remove         retval = self._is_parallel or self.phase == "mask"
 </s> add         retval = self._is_parallel or self.phase == self._final_phase
            if task == "extract_{}_in".format(self._flow[0]) or (not self._is_parallel
                                                                 and not task.endswith("_out")):
          tasks = ["extract_detect_in", "extract_align_in", "extract_mask_in", "extract_mask_out"]
          for task in tasks:
              # Limit queue size to avoid stacking ram
              self._queue_size = 32
            if task == "extract_{}_in".format(self._flow[0]) or (not self._is_parallel
                                                                 and not task.endswith("_out")):
            if task == "extract_{}_in".format(self._flow[0]) or (not self._is_parallel
                                                                 and not task.endswith("_out")):
                  self._queue_size = 64
              queue_manager.add_queue(task, maxsize=self._queue_size)
              queues[task] = queue_manager.get_queue(task)
          logger.debug("Queues: %s", queues)
          return queues
keep keep keep keep replace replace keep keep keep keep keep
 Smart Mask - Extract code review

- Lint simple_tests.py
- Only reformat alignments file if it exists otherwise change filename
- Update legacy alignments to new format at all stages
- faces_detect.Mask.from_dict - logging format fix
- convert.py fix otf for new pipeline
- cli.py - Add note that masks not used. Revert convert masks
- faces_detect.py - Revert non-extract code
- Add .p and .pickle extensions for serializer
- plugins/extract revert some changes
- scripts/fsmedia - Revert code changes
- Pipeline - cleanup
- Consistant alpha channel stripping (fixes single-process)
- Store landmarks as numpy array
- Code attribution
- Normalize feed face and reference face to 0.0 - 1.0 in convert
- Lock in mask VRAM sized
- Add documentation to plugin_loader
- Update alignments tool to work with new format 
plugins/extract/pipeline.py