      ".bmp", ".jpeg", ".jpg", ".png", ".tif", ".tiff"]
  _video_extensions = [  # pylint:disable=invalid-name
      ".avi", ".flv", ".mkv", ".mov", ".mp4", ".mpeg", ".mpg", ".webm", ".wmv",
      ".ts", ".vob"]
  _TF_VERS = None
  ValidBackends = Literal["amd", "nvidia", "cpu", "apple_silicon"]
  
  
  class _Backend():  # pylint:disable=too-few-public-methods
      """ Return the backend from config/.faceswap of from the `FACESWAP_BACKEND` Environment
 
</s> remove logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
 </s> add logger = logging.getLogger(__name__) </s> remove         faces = self.crop(batch, center_scale)
        logger.trace("Aligned image around center")  # type:ignore
        faces = self._normalize_faces(faces)
 </s> add         batch.feed = np.array(self.crop(batch, center_scale))[..., :3] </s> remove         batch.feed = np.array(faces, dtype="float32")[..., :3] / 255.0
 </s> add         logger.trace("Aligned image around center")  # type:ignore
_TF_VERS: Optional[float] = None
      ".bmp", ".jpeg", ".jpg", ".png", ".tif", ".tiff"]
  _video_extensions = [  # pylint:disable=invalid-name
      ".avi", ".flv", ".mkv", ".mov", ".mp4", ".mpeg", ".mpg", ".webm", ".wmv",
      ".ts", ".vob"]
_TF_VERS: Optional[float] = None
  ValidBackends = Literal["amd", "nvidia", "cpu", "apple_silicon"]
  
  
  class _Backend():  # pylint:disable=too-few-public-methods
      """ Return the backend from config/.faceswap of from the `FACESWAP_BACKEND` Environment
keep keep keep keep replace keep keep keep keep keep
 Extract: Implement re-align/2nd pass
   - implement configurable re-align function in extract
  - update locales + documentation
  - re-factor align._base and split to separate modules
  - move normalization method to plugin parent
  - bugfix: FAN use zeros for pre-processing crop
  - lint AlignedFilter 
lib/utils.py