          self.skip = self.config.get("type", None) is None
          logger.debug("Initialized %s", self.__class__.__name__)
  
      @staticmethod
      def get_mask_type(mask_type, predicted_available):
          """ Return the requested mask type. Return default mask if
              predicted requested but not available """
          logger.debug("Requested mask_type: %s", mask_type)
          if mask_type == "predicted" and not predicted_available:
 
</s> remove     def __init__(self, mask_type, output_size, predicted_available):
        super().__init__(mask_type, output_size, predicted_available)
 </s> add     def __init__(self, mask_type, output_size, predicted_available, config=None):
        super().__init__(mask_type, output_size, predicted_available, config) </s> remove                      "predicted_available: %s)",
                     self.__class__.__name__, mask_type, output_size, predicted_available)
        self.config = get_config(".".join(self.__module__.split(".")[-2:]))
 </s> add                      "predicted_available: %s, config: %s)",
                     self.__class__.__name__, mask_type, output_size, predicted_available, config)
        self.config = self.set_config(config) </s> remove     def __init__(self, mask_type, output_size, predicted_available=False):
        super().__init__(mask_type, output_size, predicted_available)
 </s> add     def __init__(self, mask_type, output_size, predicted_available=False, config=None):
        super().__init__(mask_type, output_size, predicted_available, config) </s> remove         return PluginLoader._import("extract.detect", name)
 </s> add         return PluginLoader._import("extract.detect", name, disable_logging)
 </s> remove     def get_aligner(name):
 </s> add     def get_aligner(name, disable_logging=False):

    def set_config(self, config):
        """ Set the config to either global config or passed in config """
        section = ".".join(self.__module__.split(".")[-2:])
        if config is None:
            retval = get_config(section)
        else:
            config.section = section
            retval = config.config_dict
            config.section = None
        logger.debug("Config: %s", retval)
        return retval

          self.skip = self.config.get("type", None) is None
          logger.debug("Initialized %s", self.__class__.__name__)
  
    def set_config(self, config):
        """ Set the config to either global config or passed in config """
        section = ".".join(self.__module__.split(".")[-2:])
        if config is None:
            retval = get_config(section)
        else:
            config.section = section
            retval = config.config_dict
            config.section = None
        logger.debug("Config: %s", retval)
        return retval

      @staticmethod
      def get_mask_type(mask_type, predicted_available):
          """ Return the requested mask type. Return default mask if
              predicted requested but not available """
          logger.debug("Requested mask_type: %s", mask_type)
          if mask_type == "predicted" and not predicted_available:
keep keep add keep keep keep keep keep keep
 Convert settings tool (#737)

* Initial prediction pipeline and display

* Patch faces from convert pipeline. Load configs

* Add tkinter canvas for image display

* Radio buttons to config gui. Standardise config gui. Remove dssim loss from realface

* Add action frame

* Live update cli options

* Live update config changes

* Quicker frame loading. Refresh faces button callback

* remove debug code

* Add saving and reloading config buttons

* Reduce lag with threading

* Busy indicator + geometry updates

* Fix options canvas resizing

* Add global config saving and resetting

* tools to own tab

* Rename tool to 'preview'

* geometry tweak

* pep8 fixes 
plugins/convert/mask/_base.py