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 current 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.
TraceBoost Workbench library templates
Section titled “TraceBoost Workbench library templates”The TraceBoost 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”TraceBoostApp 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