Built-in Operator Workflows
Audience: Python builders
Status: Preview
Built-in operators should feel like typed workflow steps, not generic command transport.
Design rule
Section titled “Design rule”Prefer this:
- object-first discovery
- typed operator configuration
- typed result objects
- explicit conversion to downstream DTOs only at the edge
Avoid making the primary user story about raw payload assembly.
Current log-to-AVO example
Section titled “Current log-to-AVO example”The current well/log example is log-to-AVO. It demonstrates the typed workflow style; it is not the whole operator identity.
- discover a
Wellbore - resolve elastic inputs through
elastic_log_set(...) - define interval layering
- define the AVO experiment
- run AVO
- export a response or crossplot source only when needed
from ophiolite_sdk.avo import ( AngleSampling, AvoExperiment, ElasticChannelBindings, LayeringSpec,)
elastic = wellbore.elastic_log_set( bindings=ElasticChannelBindings(vp="Dt", vs="Dts", density="Rho"))
layering = LayeringSpec.fixed_interval(20, unit="ft")experiment = AvoExperiment.zoeppritz( angles=AngleSampling.range(0, 40, 5))
result = elastic.run_avo( layering=layering, experiment=experiment,)
response = result.response_source()crossplot = result.crossplot_source()The main point is that users talk about wells, elastic channels, layering, and experiments, not request envelopes.
Current seismic processing example
Section titled “Current seismic processing example”The project-owned seismic example demonstrates a typed built-in operator chain over a project-owned survey asset:
- open a project
- resolve a survey asset
- pick a section
- build a typed processing pipeline
- preview
- run the pipeline and persist the output as a derived project asset
from ophiolite_sdk import Project, SectionSelection, TraceLocalPipeline
project = Project.open("demo-project")survey = project.surveys()[0]selection = SectionSelection.inline(120)
pipeline = ( TraceLocalPipeline.named("Bandpass + RMS AGC") .bandpass(8.0, 12.0, 45.0, 60.0) .agc_rms(40.0))
preview = survey.preview_processing(selection, pipeline)processed = survey.run_processing( pipeline, output_collection_name="derived-seismic",)Again, the public language stays close to what the user is actually doing.
The current Workbench sample path uses a view-first section variant:
volume = seismic.open_volume("<workbench-app-data>/samples/post-stack-agc-quickstart/fixtures/small_agc.tbvol")section = volume.inline(1)balanced = section.agc_rms(window_ms=2.0)show(balanced)That script compiles to a WorkflowRecipe, runs through the backend workflow
runner, records bundle evidence, and shows a typed not-persisted section result.
It should not copy or materialize the whole 3D volume unless the workflow asks
for an explicit save/materialize/export step.
Ophiolite Workbench library templates
Section titled “Ophiolite Workbench library templates”The Ophiolite Workbench/reference application also ships a small built-in library of local processing templates for interactive exploration.
The current starter set is intentionally short:
AGC RMS 250 msBandpass 10-20-60-80 HzEnvelopeSimilarity TightSimilarity BalancedDip Balanced
These are app-level starter presets, not a separate SDK contract family. They are exposed through the processing workspace “Apply library template” control and then behave like ordinary saved local templates.
Loose-store compatibility lane
Section titled “Loose-store compatibility lane”OphioliteWorkbenchApp and SeismicDataset still exist for direct .tbvol and .tbgath workflows outside an OphioliteProject.
Use that lane when:
- the seismic store is not project-owned yet
- the workflow is import-first or desktop-local
- you intentionally want direct store-path control
Do not teach that lane as the primary builder story for project-owned seismic operators anymore.
External operators are a different surface
Section titled “External operators are a different surface”Do not mix built-in workflow composition with external operator authoring.
Use:
- typed workflow helpers for built-in runtime capabilities
ophiolite_sdk.operatorsfor external operator packages
That separation keeps the main SDK legible while still exposing extensibility as a first-class system.
Current non-goal
Section titled “Current non-goal”Charts, widget hosts, and app wrappers are not part of the main built-in operator story for now.
They consume workflow outputs. They do not define the public workflow vocabulary.
Next: Python SDK reference