Skip to content

Take exact curves with you

A portable bundle is a folder that holds the exact revisions you selected, the original LAS bytes, the served descriptions and the normalized curves, listed with checksums in one manifest.json. Anyone with the Python SDK installed can check it, load the curves and plot them later, with no account, no server and no network.

This is a bounded checkpoint: well-log curves (uploaded LAS, release captures and Python results, including their later versions) and, in bundle 2.0, well tops, deviation surveys and horizon grids, on self-hosted storage. Zip archives, cloud storage, groups and other data types are not included yet.

You can export only what you can already read. Every file is fetched through the same exact-read path the Workspace uses, so current sharing, withdrawal and restricted-parent rules apply to each item.

Terminal window
ophiolite export --asset <asset> --revision <revision> --curve GR --curve RHOB --output well-a-bundle
from ophiolite import Client
client = Client.from_configuration("configuration.json")
bundle = client.export([(asset_id, revision, ["GR", "RHOB"])], "well-a-bundle")
  • All or nothing. If any selected item is refused (not shared with you, withdrawn, revoked), the export fails and no bundle folder appears.
  • Exact and frozen. A bundle keeps the revision you chose. A newer version published later does not change it; export again to take the newer version.
  • Never overwrites. Choose a new folder. An interrupted export leaves at most a hidden staging folder, which a later export removes once it is no longer in use.
  • Bounds. Up to 128 revisions, 32 MiB per file and 512 MiB per bundle.
Terminal window
ophiolite bundle check well-a-bundle # verifies every checksum, path and version
ophiolite bundle show well-a-bundle # summarizes revisions and curves
from ophiolite.bundle import open_bundle, plot_svg
bundle = open_bundle("well-a-bundle") # refuses anything it cannot verify
curve = bundle.assets[0].curves["GR"]
curve.values # None is a missing sample; 0.0 stays 0.0
curve.unit, curve.context["depth_index"]
plot_svg(curve, "gr.svg") # dependency-free depth track
curve.to_frame() # with the pandas extra installed

The reader never imports networking or sign-in code. It refuses a bundle whose files do not match their checksums, whose paths leave the folder or are links, that lists files twice, exceeds the reader’s own size limits, carries non-finite numbers, or uses a newer major version. Files present in the folder but not in the manifest are reported and never used.

  • A checksum proves the files are unchanged since export. It does not prove who made them or that the science is correct.
  • Exported copies cannot be recalled. Revoking access later stops new exports, not copies that already exist.
  • Holding a bundle grants no rights in Ophiolite.
  • History inside a bundle is the summary served at export time (version number, count and latest revision then), not a complete list of versions.

The earlier project exporter for native assets (tools/export_project.py) is unchanged and remains the path for native project data; portable bundles cover the managed scientific curves described here. The bundle format is specified in the Contracts component (ophiolite.portable-bundle/1).