          logger.debug("Geometry: %sx%s", width, height)
          self.root.geometry("{}x{}+80+80".format(str(width), str(height)))
  
      def process(self):
          """ The preview process """
          self.build_ui()
          self.root.mainloop()
  
      def refresh(self, *args):
          """ Refresh the display """
          logger.trace("Refreshing swapped faces. args: %s", args)
          self.tk_vars["busy"].set(True)
 
</s> remove     def refresh(self, *args):
        """ Refresh the display """
 </s> add     def _refresh(self, *args):
        """ Load new faces to display in preview.

        Parameters
        ----------
        *args: tuple
            Unused, but required for tkinter callback.
        """ </s> remove         self.root.geometry("{}x{}+80+80".format(str(width), str(height)))
 </s> add         self.geometry("{}x{}+80+80".format(str(width), str(height))) </s> remove         self.tk_vars["busy"].set(True)
        self.config_tools.update_config()
        with self.lock:
            self.patch.converter_arguments = self.cli_frame.convert_args
            self.patch.current_config = self.config_tools.config
        self.patch.trigger.set()
 </s> add         self._tk_vars["busy"].set(True)
        self._config_tools.update_config()
        with self._lock:
            self._patch.converter_arguments = self._cli_frame.convert_args
            self._patch.current_config = self._config_tools.config
        self._patch.trigger.set() </s> remove     def set_geometry(self):
        """ Set GUI geometry """
        self.root.tk.call("tk", "scaling", self.scaling)
        width = int(940 * self.scaling)
        height = int(600 * self.scaling)
 </s> add     def _set_geometry(self):
        """ Set the GUI window geometry. """
        self.tk.call("tk", "scaling", self._scaling)
        width = int(940 * self._scaling)
        height = int(600 * self._scaling) </s> remove     def busy_indicator_trace(self, *args):
        """ Show or hide busy indicator """
 </s> add     def _busy_indicator_trace(self, *args):
        """ Show or hide busy indicator based on whether the preview is updating.

        Parameters
        ----------
        args: unused
            Required for tkinter event, but unused
        """
        """ The entry point for the Preview tool from :file:`lib.tools.cli`.

        Launch the tkinter preview Window and run main loop.
        """
        self._build_ui()
        self.mainloop()
          logger.debug("Geometry: %sx%s", width, height)
          self.root.geometry("{}x{}+80+80".format(str(width), str(height)))
  
      def process(self):
        """ The entry point for the Preview tool from :file:`lib.tools.cli`.

        Launch the tkinter preview Window and run main loop.
        """
        self._build_ui()
        self.mainloop()
        """ The entry point for the Preview tool from :file:`lib.tools.cli`.

        Launch the tkinter preview Window and run main loop.
        """
        self._build_ui()
        self.mainloop()
        """ The entry point for the Preview tool from :file:`lib.tools.cli`.

        Launch the tkinter preview Window and run main loop.
        """
        self._build_ui()
        self.mainloop()
  
      def refresh(self, *args):
          """ Refresh the display """
          logger.trace("Refreshing swapped faces. args: %s", args)
          self.tk_vars["busy"].set(True)
keep keep keep keep 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