              self.store_history(side, side_loss)
              self.log_tensorboard(side, side_loss)
          self.print_loss(loss)
  
          if viewer is not None:
              viewer(self.samples.show_sample(),
                     "Training - 'S': Save Now. 'ENTER': Save and Quit")
  
          if timelapse_kwargs is not None:
              self.timelapse.output_timelapse()
 
</s> remove         if timelapse_kwargs is not None:
 </s> add         if do_timelapse: </s> remove         is_preview_iteration = False if viewer is None else True
 </s> add         do_preview = False if viewer is None else True
        do_timelapse = False if timelapse_kwargs is None else True </s> remove             loss[side] = batcher.train_one_batch(is_preview_iteration)
            if not is_preview_iteration:
 </s> add             loss[side] = batcher.train_one_batch(do_preview)
            if not do_preview and not do_timelapse: </s> remove                 if stop_event.is_set() or i is None:
 </s> add                 if stop_event.is_set() or i is None or i == "EOF": </s> remove         self._result_tokens.close()
 </s> add 
        if do_preview:
              self.store_history(side, side_loss)
              self.log_tensorboard(side, side_loss)
          self.print_loss(loss)
  
        if do_preview:
              viewer(self.samples.show_sample(),
                     "Training - 'S': Save Now. 'ENTER': Save and Quit")
  
          if timelapse_kwargs is not None:
              self.timelapse.output_timelapse()
keep keep keep keep replace keep keep keep keep keep
 Minor FixedProducerDispatcher changes. Fix timelapse bug 
plugins/train/trainer/_base.py