              The full path to the time-lapse output folder. If ``None`` is provided this will
              default to the model folder
          """
          logger.debug("Setting up time-lapse")
          if output is None:
              output = get_folder(os.path.join(str(self._model.model_dir),
                                               f"{self._model.name}_timelapse"))
          self._output_file = str(output)
          logger.debug("Time-lapse output set to '%s'", self._output_file)
  
 
</s> remove         self._output_file = str(output)
 </s> add         self._output_file = output </s> remove     def output_timelapse(self, timelapse_kwargs):
 </s> add     def output_timelapse(self, timelapse_kwargs: Dict[str, str]) -> None: </s> remove         images = {}
        for side, input_ in zip(("a", "b"), (input_a, input_b)):
 </s> add         images: Dict[Literal["a", "b"], List[str]] = {}
        for side, input_ in zip(get_args(Literal["a", "b"]), (input_a, input_b)): </s> remove         output_index: int
            The output index from the model to get output shapes for
 </s> add         side: ["a", "b"]
            The side of the model to load the generator for
        is_display: bool
            ``True`` if the generator is for creating preview/time-lapse images. ``False`` if it is
            for creating training images
        batch_size: int, optional
            If ``None`` then the batch size selected in command line arguments is used, otherwise
            the batch size provided here is used.
        images: list, optional. Default: ``None``
            If provided then this will be used as the list of images for the generator. If ``None``
            then the training folder images for the side will be used. Default: ``None`` </s> remove     def clear_tensorboard(self):
 </s> add     def _update_viewers(self,
                        viewer: Optional[Callable[[np.ndarray, str], None]],
                        timelapse_kwargs: Optional[Dict[str, str]]) -> None:
        """ Update the preview viewer and timelapse output

        Parameters
        ----------
        viewer: :func:`scripts.train.Train._show` or ``None``
            The function that will display the preview image
        timelapse_kwargs: dict
            The keyword arguments for generating time-lapse previews. If a time-lapse preview is
            not required then this should be ``None``. Otherwise all values should be full paths
            the keys being `input_a`, `input_b`, `output`.
        """
        if viewer is not None:
            self._samples.images = self._feeder.generate_preview()
            samples = self._samples.show_sample()
            if samples is not None:
                viewer(samples,
                       "Training - 'S': Save Now. 'R': Refresh Preview. 'M': Toggle Mask. 'F': "
                       "Toggle Screen Fit-Actual Size. 'ENTER': Save and Quit")

        if timelapse_kwargs:
            self._timelapse.output_timelapse(timelapse_kwargs)

    def clear_tensorboard(self) -> None:
        if not output:
              The full path to the time-lapse output folder. If ``None`` is provided this will
              default to the model folder
          """
          logger.debug("Setting up time-lapse")
        if not output:
              output = get_folder(os.path.join(str(self._model.model_dir),
                                               f"{self._model.name}_timelapse"))
          self._output_file = str(output)
          logger.debug("Time-lapse output set to '%s'", self._output_file)
  
keep keep keep keep replace keep keep keep keep keep
 Data Augmentation update (#1263)

- lib.detected_face
    - Subclass Masks for Landmark based masks
    - Add training mask propery + methods to DetectedFace
  - lib.training_training
    - subclass TrainingDataGenerator for training and preview data
    - Split cache into own module
    - Reduce thread count to 1 to prevent image corruption + data re-use
    - Process on largest model input/output size rather than stored image size
    - Size and crop masks during caching stage
    - Implement ring buffer for data flow
    - Fix preview reload bug
  - augmentation
    - typing
    - switch color aug order
    - better initialization
    - Fix warp + landmark warp to correctly apply at different image scales
    - Slightly improved warp caching
    - Don't store whether image is_preview. Handle all data as training images implicitly
  - plugins.trainer: Typing and fixes to work with trainingdata refactor 
plugins/train/trainer/_base.py