docs: def read_scanimage_metadata(fh):
      """Read ScanImage BigTIFF v3 static and ROI metadata from open file.
  
      Return non-varying frame data as dict and ROI group data as JSON.
  
      The settings can be used to read image data and metadata without parsing
      the TIFF file.
  
      Raise ValueError if file does not contain valid ScanImage v3 metadata.
  
      """
      fh.seek(0)
      try:
          byteorder, version = struct.unpack('<2sH', fh.read(4))
          if byteorder != b'II' or version != 43:
              raise Exception
          fh.seek(16)
          magic, version, size0, size1 = struct.unpack('<IIII', fh.read(16))
          if magic != 117637889 or version != 3:
              raise Exception
      except Exception:
          raise ValueError('not a ScanImage BigTIFF v3 file')
  
      frame_data = matlabstr2py(bytes2str(fh.read(size0)[:-1]))
      roi_data = read_json(fh, '<', None, size1, None) if size1 > 1 else {}
      return frame_data, roi_data