                                        left_eye=(42, 48),
                                        nose=(27, 36),
                                        jaw=(0, 17),
                                        chin=(8, 11))
          self._landmarks = dict()
          self._tk_faces = dict()
          self._objects = VisibleObjects(self)
          self._hoverbox = HoverBox(self)
          self._active_frame = ActiveFrame(self, tk_edited_variable)
          self._tk_selected_editor.trace(
              "w", lambda *e: self._active_frame.reload_annotations())
 
</s> remove         self._landmarks = dict()
        self._tk_faces = dict()
 </s> add         self._landmarks = {}
        self._tk_faces = {} </s> remove         self._hashes_to_frame = dict()
        self._hashes_to_alignment = dict()
 </s> add         self._hashes_to_frame = {}
        self._hashes_to_alignment = {} </s> remove         self._mask = None
        self._affine_matrix = None
        self._interpolator = None
 </s> add         self._mask: Optional[bytes] = None
        self._affine_matrix: Optional[np.ndarray] = None
        self._interpolator: Optional[int] = None </s> remove         self._blur = dict()
        self._blur_kernel = 0
 </s> add         self._blur_type: Optional[Literal["gaussian", "normalized"]] = None
        self._blur_passes: int = 0
        self._blur_kernel: Union[float, int] = 0 </s> remove         batch = dict()
 </s> add         batch = {}
        self._landmarks = {}
        self._tk_faces = {}
                                        left_eye=(42, 48),
                                        nose=(27, 36),
                                        jaw=(0, 17),
                                        chin=(8, 11))
        self._landmarks = {}
        self._tk_faces = {}
        self._landmarks = {}
        self._tk_faces = {}
          self._objects = VisibleObjects(self)
          self._hoverbox = HoverBox(self)
          self._active_frame = ActiveFrame(self, tk_edited_variable)
          self._tk_selected_editor.trace(
              "w", lambda *e: self._active_frame.reload_annotations())
keep keep keep keep replace replace keep keep keep keep keep
 lib.align updates:
  - alignments.py
    - Add typed dicts for imported alignments
    - Explicitly check for presence of thumb value in alignments dict
    - linting
  - detected_face.py
    - Typing
    - Linting
    - Legacy support for pre-aligned face
    - Update dependencies to new property names 
tools/manual/faceviewer/viewport.py