      def process(self):
          import threading
          self.stop = False
  
          thr = threading.Thread(target=self.processThread, args=(), kwargs={})
          thr.start()
  
          if self.arguments.preview:
              print('Using live preview')
 
</s> remove                 for name, image in self.preview_buffer.items():
                    cv2.imshow(name, image)

                key = cv2.waitKey(1000)
                if key == ord('\n') or key == ord('\r'):
 </s> add                 try:
                    for name, image in self.preview_buffer.items():
                        cv2.imshow(name, image)

                    key = cv2.waitKey(1000)
                    if key == ord('\n') or key == ord('\r'):
                        break
                    if key == ord('s'):
                        self.save_now = True
                except KeyboardInterrupt: </s> remove         variant = "Original" # TODO Pass as argument
        
 </s> add  </s> remove         self.images_A = minibatchAB(fn_A, self.BATCH_SIZE)
        self.images_B = minibatchAB(fn_B, self.BATCH_SIZE)
 </s> add         self.images_A = minibatchAB(fn_A, self.batch_size)
        self.images_B = minibatchAB(fn_B, self.batch_size)
 </s> remove     BATCH_SIZE = 64

    def __init__(self, model, fn_A, fn_B):
 </s> add     def __init__(self, model, fn_A, fn_B, batch_size=64):
        self.batch_size = batch_size

        self.save_now = False
      def process(self):
          import threading
          self.stop = False
        self.save_now = False
  
          thr = threading.Thread(target=self.processThread, args=(), kwargs={})
          thr.start()
  
          if self.arguments.preview:
              print('Using live preview')
keep keep add keep keep keep keep keep keep
 added batch-size cli argumet.
neatened up train.py and added LowMem trainer option.
Added save_now/show key to preview. 
scripts/train.py