  
          for i in range(var_a.shape[0]):
              pt_x, pt_y = int(var_c[i, 0]), int(var_c[i, 1])
              if pt_x > 0 and pt_x < 63 and pt_y > 0 and pt_y < 63:
                  diff = np.array([var_a[i, pt_y, pt_x+1]
                                   - var_a[i, pt_y, pt_x-1],
                                   var_a[i, pt_y+1, pt_x]
                                   - var_a[i, pt_y-1, pt_x]])
  
                  var_c[i] += np.sign(diff)*0.25
  
          var_c += 0.5
          retval = [self.transform(var_c[i], center, scale, var_a.shape[2])
 
</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         #  Path to model if required
        self.model_path = self.set_model_path()
 </s> add         #  Get model if required
        self.model_path = self.get_model(model_filename) </s> remove         except Exception:  # pylint: disable=broad-except
 </s> add         except Exception:  # pylint:disable=broad-except </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     def __init__(self, loglevel):
        logger.debug("Initializing %s", self.__class__.__name__)
 </s> add     def __init__(self, loglevel, model_filename=None, colorspace="BGR", input_size=256):
        logger.debug("Initializing %s: (model_filename: '%s', colorspace: '%s'. input_size: %s)",
                     self.__class__.__name__, model_filename, colorspace, input_size)
                diff = np.array([prediction[i, pt_y, pt_x+1]
                                 - prediction[i, pt_y, pt_x-1],
                                 prediction[i, pt_y+1, pt_x]
                                 - prediction[i, pt_y-1, pt_x]])
  
          for i in range(var_a.shape[0]):
              pt_x, pt_y = int(var_c[i, 0]), int(var_c[i, 1])
              if pt_x > 0 and pt_x < 63 and pt_y > 0 and pt_y < 63:
                diff = np.array([prediction[i, pt_y, pt_x+1]
                                 - prediction[i, pt_y, pt_x-1],
                                 prediction[i, pt_y+1, pt_x]
                                 - prediction[i, pt_y-1, pt_x]])
                diff = np.array([prediction[i, pt_y, pt_x+1]
                                 - prediction[i, pt_y, pt_x-1],
                                 prediction[i, pt_y+1, pt_x]
                                 - prediction[i, pt_y-1, pt_x]])
                diff = np.array([prediction[i, pt_y, pt_x+1]
                                 - prediction[i, pt_y, pt_x-1],
                                 prediction[i, pt_y+1, pt_x]
                                 - prediction[i, pt_y-1, pt_x]])
                diff = np.array([prediction[i, pt_y, pt_x+1]
                                 - prediction[i, pt_y, pt_x-1],
                                 prediction[i, pt_y+1, pt_x]
                                 - prediction[i, pt_y-1, pt_x]])
  
                  var_c[i] += np.sign(diff)*0.25
  
          var_c += 0.5
          retval = [self.transform(var_c[i], center, scale, var_a.shape[2])
keep keep keep keep replace replace 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/fan.py