{
  "schemaVersion": "petrophysics.capabilities/v1",
  "release": "4.0.0",
  "updated": "2026-09-29",
  "processing": "local-browser",
  "networkUploadOfLAS": false,
  "persistence": "memory only; each tool has a separate dataset",
  "input": {
    "formats": [
      "LAS 1.2",
      "LAS 2.0"
    ],
    "wrapped": true,
    "maxFileBytes": 26214400,
    "maxRows": 250000,
    "maxNumericValues": 5000000,
    "multipleWells": false
  },
  "interfaces": {
    "browserUI": true,
    "javascript": "window.Petrophysics",
    "sceneFiles": "petrophysics.scene/v1",
    "webMCP": false,
    "remoteMCP": false,
    "httpAPI": false
  },
  "commands": {
    "both": [
      "get_capabilities",
      "import_las",
      "inspect_dataset",
      "get_scene",
      "apply_scene",
      "inspect_scene",
      "export_result",
      "close_dataset"
    ],
    "crossplot": [
      "configure_crossplot",
      "set_selection",
      "fit_regression"
    ],
    "log-viewer": [
      "configure_log_view"
    ]
  },
  "crossplot": {
    "path": "/crossplot/",
    "axes": [
      "linear",
      "log"
    ],
    "reversedAxes": true,
    "shapes": [
      "square",
      "circle",
      "triangle",
      "diamond",
      "plus",
      "cross"
    ],
    "pointSizePx": [
      1,
      20
    ],
    "palettes": [
      "viridis",
      "plasma",
      "ocean",
      "warm",
      "blueRed",
      "greyscale"
    ],
    "colourLimits": "auto or manual; reversible",
    "filter": {
      "curveCount": 1,
      "maxConditions": 2,
      "join": "AND",
      "operators": [
        "gt",
        "gte",
        "lt",
        "lte",
        "eq",
        "neq"
      ]
    },
    "selection": [
      "lasso",
      "single-point",
      "explicit row indices through API"
    ],
    "selectionActions": [
      "replace",
      "add",
      "remove"
    ],
    "regression": [
      "linear",
      "polynomial2",
      "polynomial3",
      "polynomial4",
      "power",
      "exponential"
    ],
    "regressionWidthPx": [
      1,
      20
    ],
    "regressionScope": "selected source rows intersected with filter; original X/Y values",
    "rSquaredSpace": "original Y"
  },
  "log-viewer": {
    "path": "/logs/",
    "trackCount": 4,
    "independentCurveScales": true,
    "scaleTypes": [
      "linear",
      "log"
    ],
    "lineStyles": [
      "solid",
      "dash",
      "dot",
      "dashdot",
      "longdash"
    ],
    "lineWidthPx": [
      0.5,
      10
    ],
    "fills": [
      "per-curve baseline",
      "one pair per track"
    ],
    "fillComparison": "display coordinates after independent scaling",
    "fillOpacity": [
      0,
      1
    ],
    "depthDirection": "down",
    "sceneMaxCurveEntriesPerTrack": 256,
    "navigation": [
      "range",
      "fit all",
      "detail",
      "pan",
      "zoom",
      "cursor readout"
    ]
  },
  "export": {
    "formats": [
      "png",
      "json"
    ],
    "png": "current viewport, 2x composition; includes labels, legends and settings summary",
    "jsonIncludesRawLAS": false,
    "maxSceneFileBytes": 8388608
  },
  "notSupported": [
    "automatic fluid interpretation",
    "automatic unit conversion",
    "neutron lithology calibration conversion",
    "SLB chartbook overlays",
    "PDF or SVG export",
    "cross-page dataset sharing",
    "authentication or licensed cloud processing"
  ],
  "documentation": {
    "agents": "/agents/",
    "crossplot": "/docs/crossplot/",
    "logs": "/docs/log-viewer/",
    "units": "/docs/curve-units/",
    "scene": "/docs/scene-format/",
    "schema": "/agents/schemas/scene-v1.json",
    "examples": "/examples/"
  }
}
