          # The input and output queues for the plugin.
          # See lib.queue_manager.QueueManager for getting queues
          self.queues = {"in": None, "out": None}
  
          #  Path to model if required
          self.model_path = self.set_model_path()
  
          # Approximate VRAM required for aligner. Used to calculate
          # how many parallel processes / batches can be run.
          # Be conservative to avoid OOM.
          self.vram = None
 
</s> remove         self.cachepath = os.path.join(os.path.dirname(__file__), ".cache")
 </s> add         self.colorspace = colorspace.upper()
        self.input_size = input_size </s> remove     def align(self, *args, **kwargs):
        """ Process landmarks
            Override for specific detector
            Must return a list of dlib rects"""
        if not self.init:
            self.initialize(*args, **kwargs)
        logger.debug("Launching Align: (args: %s kwargs: %s)", args, kwargs)
 </s> add     def align_image(self, detected_face, image):
        """ Align the incoming image for feeding into aligner
            Override for aligner specific processing """
        raise NotImplementedError

    def predict_landmarks(self, feed_dict):
        """ Predict the 68 point landmarks
            Override for aligner specific landmark prediction """
        raise NotImplementedError

    # <<< GET MODEL >>> #
    @staticmethod
    def get_model(model_filename):
        """ Check if model is available, if not, download and unzip it """
        cache_path = os.path.join(os.path.dirname(__file__), ".cache")
        model = GetModel(model_filename, cache_path)
        return model.model_path </s> remove     @staticmethod
    def set_model_path():
        """ path to data file/models
            override for specific detector """
        raise NotImplementedError()

 </s> add  </s> remove         except Exception:  # pylint: disable=broad-except
 </s> add         except Exception:  # pylint:disable=broad-except </s> remove     # <<< DETECTION WRAPPER >>> #
 </s> add     # <<< ALIGNMENT WRAPPER >>> #
        #  Get model if required
        self.model_path = self.get_model(model_filename)
          # The input and output queues for the plugin.
          # See lib.queue_manager.QueueManager for getting queues
          self.queues = {"in": None, "out": None}
  
        #  Get model if required
        self.model_path = self.get_model(model_filename)
        #  Get model if required
        self.model_path = self.get_model(model_filename)
  
          # Approximate VRAM required for aligner. Used to calculate
          # how many parallel processes / batches can be run.
          # Be conservative to avoid OOM.
          self.vram = None
keep keep keep keep replace replace keep keep keep keep keep
 Remove Dlib Aligner

Remove Dlib Aligner
Add CV2-DNN Aligner replacement for dlib
Remove aligner models from repo
Add download function to pull models from remote location
Minor FAN fixups 
plugins/extract/align/_base.py