          and can be accessed from:
              Extractor.input_queue
      """
      def __init__(self, detector, aligner, loglevel,
                   multiprocess=False, rotate_images=None, min_size=20):
          logger.debug("Initializing %s: (detector: %s, aligner: %s, loglevel: %s, multiprocess: %s"
                       ", rotate_images: %s, min_size: %s)", self.__class__.__name__, detector,
                       aligner, loglevel, multiprocess, rotate_images, min_size)
          self.phase = "detect"
          self.detector = self.load_detector(detector, loglevel, rotate_images, min_size)
          self.aligner = self.load_aligner(aligner, loglevel)
          self.is_parallel = self.set_parallel_processing(multiprocess)
          self.processes = list()
 
</s> remove         self.detector = self.load_detector(detector, loglevel, rotate_images, min_size)
        self.aligner = self.load_aligner(aligner, loglevel)
 </s> add         self.detector = self.load_detector(detector, loglevel, rotate_images, min_size, configfile)
        self.aligner = self.load_aligner(aligner, loglevel, configfile) </s> remove         logger.debug("Initializing %s: (loglevel: %s, git_model_id: %s, model_filename: %s, "
                     "rotation: %s, min_size: %s)", self.__class__.__name__, loglevel,
                     git_model_id, model_filename, rotation, min_size)
        self.config = get_config(".".join(self.__module__.split(".")[-2:]))
 </s> add         logger.debug("Initializing %s: (loglevel: %s, configfile: %s, git_model_id: %s, "
                     "model_filename: %s, rotation: %s, min_size: %s)",
                     self.__class__.__name__, loglevel, configfile, git_model_id,
                     model_filename, rotation, min_size)
        self.config = get_config(".".join(self.__module__.split(".")[-2:]), configfile=configfile) </s> remove     def __init__(self, loglevel,
 </s> add     def __init__(self, loglevel, configfile=None, </s> remove         logger.debug("Initializing %s: (loglevel: %s, git_model_id: %s, model_filename: '%s', "
                     "colorspace: '%s'. input_size: %s)", self.__class__.__name__, loglevel,
                     git_model_id, model_filename, colorspace, input_size)
 </s> add         logger.debug("Initializing %s: (loglevel: %s, configfile: %s, git_model_id: %s, "
                     "model_filename: '%s', colorspace: '%s'. input_size: %s)",
                     self.__class__.__name__, loglevel, configfile, git_model_id, model_filename,
                     colorspace, input_size) </s> remove     def __init__(self, loglevel,
 </s> add     def __init__(self, loglevel, configfile=None,
                 configfile=None, multiprocess=False, rotate_images=None, min_size=20):
        logger.debug("Initializing %s: (detector: %s, aligner: %s, loglevel: %s, configfile: %s, "
                     "multiprocess: %s, rotate_images: %s, min_size: %s)", self.__class__.__name__,
                     detector, aligner, loglevel, configfile, multiprocess, rotate_images,
                     min_size)
          and can be accessed from:
              Extractor.input_queue
      """
      def __init__(self, detector, aligner, loglevel,
                 configfile=None, multiprocess=False, rotate_images=None, min_size=20):
        logger.debug("Initializing %s: (detector: %s, aligner: %s, loglevel: %s, configfile: %s, "
                     "multiprocess: %s, rotate_images: %s, min_size: %s)", self.__class__.__name__,
                     detector, aligner, loglevel, configfile, multiprocess, rotate_images,
                     min_size)
                 configfile=None, multiprocess=False, rotate_images=None, min_size=20):
        logger.debug("Initializing %s: (detector: %s, aligner: %s, loglevel: %s, configfile: %s, "
                     "multiprocess: %s, rotate_images: %s, min_size: %s)", self.__class__.__name__,
                     detector, aligner, loglevel, configfile, multiprocess, rotate_images,
                     min_size)
                 configfile=None, multiprocess=False, rotate_images=None, min_size=20):
        logger.debug("Initializing %s: (detector: %s, aligner: %s, loglevel: %s, configfile: %s, "
                     "multiprocess: %s, rotate_images: %s, min_size: %s)", self.__class__.__name__,
                     detector, aligner, loglevel, configfile, multiprocess, rotate_images,
                     min_size)
                 configfile=None, multiprocess=False, rotate_images=None, min_size=20):
        logger.debug("Initializing %s: (detector: %s, aligner: %s, loglevel: %s, configfile: %s, "
                     "multiprocess: %s, rotate_images: %s, min_size: %s)", self.__class__.__name__,
                     detector, aligner, loglevel, configfile, multiprocess, rotate_images,
                     min_size)
          self.phase = "detect"
          self.detector = self.load_detector(detector, loglevel, rotate_images, min_size)
          self.aligner = self.load_aligner(aligner, loglevel)
          self.is_parallel = self.set_parallel_processing(multiprocess)
          self.processes = list()
keep keep keep keep replace replace replace replace keep keep keep keep keep
 Config Changes + Bugfixes

Bugfix: Fully disable keypress monitor for GUI
Bugfix: Preview - Handle missing alignments file
Config changes:
    - Separate plugin defaults into their own files
    - Move mask_type to global training config
    - Add ability to pass in custom config files 
plugins/extract/pipeline.py