          for section, plugins in self.config_tools.plugins_dict.items():
              for plugin in plugins:
                  config_key = ".".join((section, plugin))
                  config_dict = self.config_tools.config_dicts[config_key]
                  tab = ConfigFrame(self,
                                    config_key,
                                    config_dict)
                  self.tabs[section][plugin] = tab
                  self.tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())
  
      def add_patch_callback(self, patch_callback):
          """ Add callback to repatch images on config option change """
          for plugins in self.config_tools.tk_vars.values():
              for tk_var in plugins.values():
                  tk_var.trace("w", patch_callback)
  
  
 
</s> remove     def build_sub_tabs(self):
        """ Build the sub tabs for the relevant plugin """
 </s> add     def _build_sub_tabs(self):
        """ Build the notebook sub tabs for each convert section's plugin. """ </s> remove         btn.pack(padx=5, pady=5, side=tk.BOTTOM, fill=tk.X, anchor=tk.S)
 </s> add         btn.pack(padx=5, pady=5, side=tk.TOP, fill=tk.X, anchor=tk.N)

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on action option change. </s> remove             self.tabs[section] = {"tab": tab}
 </s> add             self._tabs[section] = {"tab": tab} </s> remove     def add_patch_callback(self, patch_callback):
        """ Add callback to repatch images on action option change """
        for tk_var in self.tk_vars.values():
 </s> add         Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
        for tk_var in self._tk_vars.values(): </s> remove     def add_refresh_button(parent, refresh_callback):
        """ Add button to refresh the images """
 </s> add     def _add_refresh_button(parent, refresh_callback):
        """ Add a button to refresh the images.

        Parameters
        ----------
        refresh_callback: python function
            The function to execute when the refresh button is pressed
        """
                tab = ConfigFrame(self, config_key, config_dict)
                self._tabs[section][plugin] = tab
                self._tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on configuration option change.

        Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
          for section, plugins in self.config_tools.plugins_dict.items():
              for plugin in plugins:
                  config_key = ".".join((section, plugin))
                  config_dict = self.config_tools.config_dicts[config_key]
                tab = ConfigFrame(self, config_key, config_dict)
                self._tabs[section][plugin] = tab
                self._tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on configuration option change.

        Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
                tab = ConfigFrame(self, config_key, config_dict)
                self._tabs[section][plugin] = tab
                self._tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on configuration option change.

        Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
                tab = ConfigFrame(self, config_key, config_dict)
                self._tabs[section][plugin] = tab
                self._tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on configuration option change.

        Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
                tab = ConfigFrame(self, config_key, config_dict)
                self._tabs[section][plugin] = tab
                self._tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on configuration option change.

        Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
                tab = ConfigFrame(self, config_key, config_dict)
                self._tabs[section][plugin] = tab
                self._tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on configuration option change.

        Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
                tab = ConfigFrame(self, config_key, config_dict)
                self._tabs[section][plugin] = tab
                self._tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on configuration option change.

        Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
                tab = ConfigFrame(self, config_key, config_dict)
                self._tabs[section][plugin] = tab
                self._tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on configuration option change.

        Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
                tab = ConfigFrame(self, config_key, config_dict)
                self._tabs[section][plugin] = tab
                self._tabs[section]["tab"].add(tab, text=plugin.replace("_", " ").title())

    def _add_patch_callback(self, patch_callback):
        """ Add callback to re-patch images on configuration option change.

        Parameters
        ----------
        patch_callback: python function
            The function to execute when the images require patching
        """
          for plugins in self.config_tools.tk_vars.values():
              for tk_var in plugins.values():
                  tk_var.trace("w", patch_callback)
  
  
keep keep keep keep replace replace 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