Skip to content

Built-in Operator Workflows

Audience: Python builders
Status: Preview

Built-in operators should feel like typed workflow steps, not generic command transport.

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.

The current well/log example is log-to-AVO. It demonstrates the typed workflow style; it is not the whole operator identity.

  1. discover a Wellbore
  2. resolve elastic inputs through elastic_log_set(...)
  3. define interval layering
  4. define the AVO experiment
  5. run AVO
  6. 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.

The current seismic example demonstrates a typed built-in operator chain over a project-owned survey asset:

  1. open a project
  2. resolve a survey asset
  3. pick a section
  4. build a typed processing pipeline
  5. preview
  6. 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 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 ms
  • Bandpass 10-20-60-80 Hz
  • Envelope
  • Similarity Tight
  • Similarity Balanced
  • Dip 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.

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.operators for external operator packages

That separation keeps the main SDK legible while still exposing extensibility as a first-class system.

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