                                                              configfile=configfile)
          return detector
  
      @staticmethod
      def _load_aligner(aligner, configfile, normalize_method):
          """ Set global arguments and load aligner plugin """
          aligner_name = aligner.replace("-", "_").lower()
          logger.debug("Loading Aligner: '%s'", aligner_name)
          aligner = PluginLoader.get_aligner(aligner_name)(configfile=configfile,
                                                           normalize_method=normalize_method)
          return aligner
  
      @staticmethod
      def _load_masker(masker, configfile):
          """ Set global arguments and load masker plugin """
          masker_name = masker.replace("-", "_").lower()
          logger.debug("Loading Masker: '%s'", masker_name)
          masker = PluginLoader.get_masker(masker_name)(configfile=configfile)
          return masker
 
</s> remove     def _load_detector(detector, rotation, min_size, configfile):
 </s> add     def _load_align(aligner, configfile, normalize_method):
        """ Set global arguments and load aligner plugin """
        aligner_name = aligner.replace("-", "_").lower()
        logger.debug("Loading Aligner: '%s'", aligner_name)
        aligner = PluginLoader.get_aligner(aligner_name)(configfile=configfile,
                                                         normalize_method=normalize_method)
        return aligner

    @staticmethod
    def _load_detect(detector, rotation, min_size, configfile): </s> remove     def _launch_detector(self):
        """ Launch the face detector """
        logger.debug("Launching Detector")
        kwargs = dict(in_queue=self._queues["extract_detect_in"],
                      out_queue=self._queues["extract_align_in"])
        self._detector.initialize(**kwargs)
        self._detector.start()
        logger.debug("Launched Detector")

    def _launch_aligner(self):
        """ Launch the face aligner """
        logger.debug("Launching Aligner")
        kwargs = dict(in_queue=self._queues["extract_align_in"],
                      out_queue=self._queues["extract_mask_in"])
        self._aligner.initialize(**kwargs)
        self._aligner.start()
        logger.debug("Launched Aligner")

    def _launch_masker(self):
        """ Launch the face masker """
        logger.debug("Launching Masker")
        kwargs = dict(in_queue=self._queues["extract_mask_in"],
                      out_queue=self._queues["extract_mask_out"])
        self._masker.initialize(**kwargs)
        self._masker.start()
        logger.debug("Launched Masker")
 </s> add     def _launch_plugin(self, phase):
        """ Launch an extraction plugin """
        logger.debug("Launching %s plugin", phase)
        in_qname = "extract_{}_in".format(phase)
        if phase == self._final_phase:
            out_qname = "extract_{}_out".format(self._final_phase)
        else:
            next_phase = self._flow[self._flow.index(phase) + 1]
            out_qname = "extract_{}_in".format(next_phase)
        logger.debug("in_qname: %s, out_qname: %s", in_qname, out_qname)
        kwargs = dict(in_queue=self._queues[in_qname], out_queue=self._queues[out_qname])

        plugin = getattr(self, "_{}".format(phase))
        plugin.initialize(**kwargs)
        plugin.start()
        logger.debug("Launched %s plugin", phase) </s> remove         """ Return requested detector plugin """
 </s> add         """ Return requested masker plugin

        Parameters
        ----------
        name: str
            The name of the requested masker plugin
        disable_logging: bool, optional
            Whether to disable the INFO log message that the plugin is being imported.
            Default: `False`

        Returns
        -------
        :class:`plugins.extract.mask` object:
            An extraction masker plugin
        """ </s> remove         """ Return requested detector plugin """
 </s> add         """ Return requested aligner plugin

        Parameters
        ----------
        name: str
            The name of the requested aligner plugin
        disable_logging: bool, optional
            Whether to disable the INFO log message that the plugin is being imported.
            Default: `False`

        Returns
        -------
        :class:`plugins.extract.align` object:
            An extraction aligner plugin
        """ </s> remove     """ Plugin loader for extract, training and model tasks """
 </s> add     """ Retrieve, or get information on, Faceswap plugins

    Return a specific plugin, list available plugins, or get the default plugin for a
    task.

    Example
    -------
    >>> from plugins.plugin_loader import PluginLoader
    >>> align_plugins = PluginLoader.get_available_extractors('align')
    >>> aligner = PluginLoader.get_aligner('cv2-dnn')
    """
    def _load_mask(masker, configfile):
                                                              configfile=configfile)
          return detector
  
      @staticmethod
    def _load_mask(masker, configfile):
    def _load_mask(masker, configfile):
    def _load_mask(masker, configfile):
    def _load_mask(masker, configfile):
    def _load_mask(masker, configfile):
    def _load_mask(masker, configfile):
    def _load_mask(masker, configfile):
    def _load_mask(masker, configfile):
    def _load_mask(masker, configfile):
    def _load_mask(masker, configfile):
          """ Set global arguments and load masker plugin """
          masker_name = masker.replace("-", "_").lower()
          logger.debug("Loading Masker: '%s'", masker_name)
          masker = PluginLoader.get_masker(masker_name)(configfile=configfile)
          return masker
keep keep keep keep replace replace replace 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