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.
Export exact revisions
Section titled “Export exact revisions”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.
ophiolite export --asset <asset> --revision <revision> --curve GR --curve RHOB --output well-a-bundlefrom ophiolite import Clientclient = 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.
Read it anywhere, offline
Section titled “Read it anywhere, offline”ophiolite bundle check well-a-bundle # verifies every checksum, path and versionophiolite bundle show well-a-bundle # summarizes revisions and curvesfrom ophiolite.bundle import open_bundle, plot_svgbundle = open_bundle("well-a-bundle") # refuses anything it cannot verifycurve = bundle.assets[0].curves["GR"]curve.values # None is a missing sample; 0.0 stays 0.0curve.unit, curve.context["depth_index"]plot_svg(curve, "gr.svg") # dependency-free depth trackcurve.to_frame() # with the pandas extra installedThe 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.
What a bundle does not do
Section titled “What a bundle does not do”- 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).
