          return getattr(module, ttl)
  
      @staticmethod
      def get_available_extractors(extractor_type):
          """ Return a list of available aligners/detectors """
          extractpath = os.path.join(os.path.dirname(__file__),
                                     "extract",
                                     extractor_type)
          extractors = sorted(item.name.replace(".py", "").replace("_", "-")
                              for item in os.scandir(extractpath)
 
</s> remove         """ Return a list of available models """
 </s> add         """ Return a list of available training models

        Returns
        -------
        list:
            A list of the available training model plugin names
        """ </s> remove         """ Return a list of available models """
 </s> add         """ Return a list of available converter plugins in the given category

        Parameters
        ----------
        convert_category: {'color', 'mask', 'scaling', 'writer'}
            The category of converter plugin to return the plugins for
        add_none: bool, optional
            Append "none" to the list of returned plugins. Default: True

        Returns
        -------
        list
            A list of the available converter plugin names in the given category
        """
 </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')
    """ </s> remove             cvt_image = image.copy()
 </s> add             cvt_image = image[..., :3].copy()
        """ Return a list of available extractors of the given type

        Parameters
        ----------
        extractor_type: {'aligner', 'detector', 'masker'}
            The type of extractor to return the plugins for

        Returns
        -------
        list:
            A list of the available extractor plugin names for the given type
        """
          return getattr(module, ttl)
  
      @staticmethod
      def get_available_extractors(extractor_type):
        """ Return a list of available extractors of the given type

        Parameters
        ----------
        extractor_type: {'aligner', 'detector', 'masker'}
            The type of extractor to return the plugins for

        Returns
        -------
        list:
            A list of the available extractor plugin names for the given type
        """
          extractpath = os.path.join(os.path.dirname(__file__),
                                     "extract",
                                     extractor_type)
          extractors = sorted(item.name.replace(".py", "").replace("_", "-")
                              for item in os.scandir(extractpath)
keep keep keep keep 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/plugin_loader.py