      @property
      def _active_plugins(self):
          """ Return the plugins that are currently active based on pass """
          if self.passes == 1:
              retval = [self._detector, self._aligner, self._masker]
          elif self.passes == 3 and self.phase == 'detect':
              retval = [self._detector]
          elif self.passes == 3 and self.phase == 'align':
              retval = [self._aligner]
          elif self.passes == 3 and self.phase == 'mask':
              retval = [self._masker]
          else:
              retval = [None]
          logger.trace("Active plugins: %s", retval)
          return retval
  
 
</s> remove             retval = [None]
 </s> add             retval = [getattr(self, "_{}".format(self.phase))] </s> remove     elif extension == ".p":
 </s> add     elif extension in (".p", ".pickle"): </s> remove         retval = self._is_parallel or self.phase == "mask"
 </s> add         retval = self._is_parallel or self.phase == self._final_phase </s> remove             self._launch_detector()
            self._launch_aligner()
            self._launch_masker()
        elif self.phase == "detect":
            self._launch_detector()
        elif self.phase == "align":
            self._launch_aligner()
        elif self.phase == "mask":
            self._launch_masker()
 </s> add             for phase in self._flow:
                self._launch_plugin(phase)
        else:
            self._launch_plugin(self.phase)
            retval = self._all_plugins
      @property
      def _active_plugins(self):
          """ Return the plugins that are currently active based on pass """
          if self.passes == 1:
            retval = self._all_plugins
            retval = self._all_plugins
            retval = self._all_plugins
            retval = self._all_plugins
            retval = self._all_plugins
            retval = self._all_plugins
            retval = self._all_plugins
          else:
              retval = [None]
          logger.trace("Active plugins: %s", retval)
          return retval
  
keep keep keep keep replace replace replace replace replace 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