      def faces_from_frames(self):
          """ Compile faces from the original images and return a row for each of source and dest """
          logger.debug("Extracting faces from frames: Number images: %s", len(self.source))
          if self.update_source:
              self.crop_source_faces()
          self.crop_destination_faces()
          logger.debug("Extracted faces from frames: %s", {k: len(v) for k, v in self.faces.items()})
  
      def crop_source_faces(self):
          """ Update the main faces dict with new source faces and matrices """
          logger.debug("Updating source faces")
          self.faces = dict()
          for image in self.source:
              detected_face = image["detected_faces"][0]
              src_img = image["image"]
 
</s> remove     def faces_from_frames(self):
        """ Compile faces from the original images and return a row for each of source and dest """
 </s> add     def _faces_from_frames(self):
        """ Extract the preview faces from the source frames and apply the requisite padding. """ </s> remove         self.faces = dict()
 </s> add         self._faces = dict() </s> remove                      self.faces_dest.shape, self.faces_source.shape)
 </s> add                      self._faces_dest.shape, self._faces_source.shape) </s> remove     def crop_destination_faces(self):
        """ Update the main faces dict with new destination faces based on source matrices """
 </s> add     def _crop_destination_faces(self):
        """ Extract the swapped faces from the swapped frames using the source face destination
        matrices. """ </s> remove             header = self.header_text()
            source = np.hstack([self.draw_rect(face) for face in self.faces["src"]])
            self.faces_source = np.vstack((header, source))
        self.faces_dest = np.hstack([self.draw_rect(face) for face in self.faces["dst"]])
 </s> add             header = self._header_text()
            source = np.hstack([self._draw_rect(face) for face in self._faces["src"]])
            self._faces_source = np.vstack((header, source))
        self._faces_dest = np.hstack([self._draw_rect(face) for face in self._faces["dst"]])
            self._crop_source_faces()
        self._crop_destination_faces()
        logger.debug("Extracted faces from frames: %s",
                     {k: len(v) for k, v in self._faces.items()})

    def _crop_source_faces(self):
        """ Extract the source faces from the source frames, along with their filenames and the
        transformation matrix used to extract the faces. """
      def faces_from_frames(self):
          """ Compile faces from the original images and return a row for each of source and dest """
          logger.debug("Extracting faces from frames: Number images: %s", len(self.source))
          if self.update_source:
            self._crop_source_faces()
        self._crop_destination_faces()
        logger.debug("Extracted faces from frames: %s",
                     {k: len(v) for k, v in self._faces.items()})

    def _crop_source_faces(self):
        """ Extract the source faces from the source frames, along with their filenames and the
        transformation matrix used to extract the faces. """
            self._crop_source_faces()
        self._crop_destination_faces()
        logger.debug("Extracted faces from frames: %s",
                     {k: len(v) for k, v in self._faces.items()})

    def _crop_source_faces(self):
        """ Extract the source faces from the source frames, along with their filenames and the
        transformation matrix used to extract the faces. """
            self._crop_source_faces()
        self._crop_destination_faces()
        logger.debug("Extracted faces from frames: %s",
                     {k: len(v) for k, v in self._faces.items()})

    def _crop_source_faces(self):
        """ Extract the source faces from the source frames, along with their filenames and the
        transformation matrix used to extract the faces. """
            self._crop_source_faces()
        self._crop_destination_faces()
        logger.debug("Extracted faces from frames: %s",
                     {k: len(v) for k, v in self._faces.items()})

    def _crop_source_faces(self):
        """ Extract the source faces from the source frames, along with their filenames and the
        transformation matrix used to extract the faces. """
            self._crop_source_faces()
        self._crop_destination_faces()
        logger.debug("Extracted faces from frames: %s",
                     {k: len(v) for k, v in self._faces.items()})

    def _crop_source_faces(self):
        """ Extract the source faces from the source frames, along with their filenames and the
        transformation matrix used to extract the faces. """
            self._crop_source_faces()
        self._crop_destination_faces()
        logger.debug("Extracted faces from frames: %s",
                     {k: len(v) for k, v in self._faces.items()})

    def _crop_source_faces(self):
        """ Extract the source faces from the source frames, along with their filenames and the
        transformation matrix used to extract the faces. """
          logger.debug("Updating source faces")
          self.faces = dict()
          for image in self.source:
              detected_face = image["detected_faces"][0]
              src_img = image["image"]
keep keep keep keep replace replace replace replace replace replace keep keep keep keep keep
 Smart Masks to Convert (#957)

- scripts.convert - Use Smart Masks for Convert
    * Make on-the-fly conversion an explicit option

- Move BlurMask to lib.faces_detect

- tools.preview - Fix for smart masks
    * Subclass from tk.Tk
    * Options to lib.gui.control_helper
    *variable cleanup

- lib.logger - Demote more tensorflow deprecation messages

- Documentation:
    * lib.faces_detect.BlurMask
    * plugins.convert.mask
    * lib.convert
    * scripts.convert
    * scripts.fsmedia
    * tools.preview 
tools/preview.py