                      frames_skipped += 1
              self._read_gen.__next__()  # we already have meta data
  
  
  imageio.plugins.ffmpeg.FfmpegFormat.Reader = FfmpegReader
  
  
  def read_image(filename, raise_error=False, with_metadata=False):
      """ Read an image file from a file location.
  
 
</s> remove     if log_file is not None:
 </s> add     if log_file: </s> remove     def _process_gui_triggers(self) -> None:
        """ Check whether a file drop has occurred from the GUI to manually update the preview. """
 </s> add     def _process_gui_triggers(self) -> Dict[Literal["mask", "refresh"], bool]:
        """ Check whether a file drop has occurred from the GUI to manually update the preview.

        Returns
        -------
        dict
            The trigger name as key and boolean as value
        """
        retval: Dict[Literal["mask", "refresh"], bool] = {key: False for key in self._gui_triggers} </s> remove             return
 </s> add             return retval </s> remove     def request_refresh(self) -> None:
        """ Handle a GUI trigger or a training thread trigger (after a mask toggle) request to set
        the refresh trigger to ``True`` to request a refresh on the next pass of the
        training loop. """
        with self._lock:
            self._triggers["refresh"] = True

    def request_mask_toggle(self) -> None:
        """ Handle a GUI trigger request to set the mask toggle to ``True`` to
        request a mask toggle on next pass of the training loop. """
        logger.verbose("Toggle mask display requested...")  # type:ignore
        with self._lock:
            self._triggers["toggle_mask"] = True

    def add_image(self, name: str, image: np.ndarray) -> None:
        """ Add a preview image to the preview buffer.

        Parameters
        ----------
        name: str
            The name of the preview image to add to the buffer
        image: :class:`numpy.ndarray`
            The preview image to add to the buffer in BGR format.
        """
        with self._lock:
            logger.debug("Adding image '%s' of shape %s to preview buffer", name, image.shape)
            self._preview_buffer[name] = image[..., 2::-1]  # Switch to RGB
            self._needs_update = True

    def display_preview(self) -> None:
        """ Display an image preview in a resizable window. """
        if self._needs_update:
            logger.debug("Updating preview")
            with self._lock:
                for name, image in self._preview_buffer.items():
                    if (name not in self._images or  # new preview or preview was closed
                            not plt.fignum_exists(self._images[name][0].number)):
                        self._create_resizable_window(name, image.shape)
                        if self._triggers["full_size"]:  # Can only be true if preview was closed
                            self._set_resize_callback()
                    plt.figure(name)
                    plt.imshow(image)
                self._needs_update = False
            plt.show(block=False)
            logger.debug("preview updated")  # type: ignore
        plt.pause(0.1)

    def _create_resizable_window(self, name: str, image_shape: tuple) -> None:
        """ Create a resizable Matplotlib window to hold the preview image.
 </s> add     def _launch_thread(self) -> Optional[FSThread]:
        """ Launch the preview viewer in it's own thread if preview has been selected </s> remove         parent_flags = dict(mask_toggle="request_mask_toggle", update="request_refresh")
        for trigger in ("mask_toggle", "update"):
            filename = self._gui_triggers[trigger]
 </s> add         for trigger, filename in self._gui_triggers.items():
imageio.plugins.ffmpeg.FfmpegFormat.Reader = FfmpegReader  # type: ignore
                      frames_skipped += 1
              self._read_gen.__next__()  # we already have meta data
  
  
imageio.plugins.ffmpeg.FfmpegFormat.Reader = FfmpegReader  # type: ignore
  
  
  def read_image(filename, raise_error=False, with_metadata=False):
      """ Read an image file from a file location.
  
keep keep keep keep replace keep keep keep keep keep
 Training - Use custom preview pop-out 
lib/image.py