code: def save_caption(self, filename: str, mtime: datetime, caption: str) -> None:
          
          def _elliptify(caption):
              pcaption = caption.replace('\n', ' ').strip()
              return '[' + ((pcaption[:29] + u"\u2026") if len(pcaption) > 31 else pcaption) + ']'
          filename += '.txt'
          caption += '\n'
          pcaption = _elliptify(caption)
          caption = caption.encode("UTF-8")
          with suppress(FileNotFoundError):
              with open(filename, 'rb') as file:
                  file_caption = file.read()
              if file_caption.replace(b'\r\n', b'\n') == caption.replace(b'\r\n', b'\n'):
                  try:
                      self.context.log(pcaption + ' unchanged', end=' ', flush=True)
                  except UnicodeEncodeError:
                      self.context.log('txt unchanged', end=' ', flush=True)
                  return None
              else:
                  def get_filename(index):
                      return filename if index == 0 else '{0}_old_{2:02}{1}'.format(*os.path.splitext(filename), index)
  
                  i = 0
                  while os.path.isfile(get_filename(i)):
                      i = i + 1
                  for index in range(i, 0, -1):
                      os.rename(get_filename(index - 1), get_filename(index))
                  try:
                      self.context.log(_elliptify(file_caption.decode("UTF-8")) + ' updated', end=' ', flush=True)
                  except UnicodeEncodeError:
                      self.context.log('txt updated', end=' ', flush=True)
          try:
              self.context.log(pcaption, end=' ', flush=True)
          except UnicodeEncodeError:
              self.context.log('txt', end=' ', flush=True)
          with open(filename, 'wb') as text_file:
              shutil.copyfileobj(BytesIO(caption), text_file)
          os.utime(filename, (datetime.now().timestamp(), mtime.timestamp()))
docs: Updates picture caption / Post metadata info