Blueprint Developer Contract
1. Overview
A Blueprint is a JSON document that describes one log visualisation project. It defines project identity, source data files, optional colour maps, scenes, ranges, 2D tracks, optional 3D rendering, scalar curves, array curves, synthetic curves, regions, statistics, and cross-sections.
This document describes the JSON contract: object structure, property names, data types, defaults, constraints, examples, and cross-reference rules. Section-level JSON examples show only the properties that belong to that section. Nested objects are documented in their own linked subsections.
Blueprint files can be used directly or included inside an .aivapkg package. For archive structure, manifest rules, and packaging requirements, see the AIVAPKG packaging guide.
2. Root Object
The root object contains the file header and the Blueprint project definition.
{
"Header": {},
"Blueprint": {}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Header |
object | Yes | - | File-level version and optional metadata. Version and metadata fields are defined below. |
Header.Version |
string | Yes | "1" |
Must be the string "1". Do not emit as unquoted numeric value 1. |
Header.Metadata |
object | No | {} |
Optional string-to-string metadata dictionary. All metadata keys and values should be strings. |
Blueprint |
object | Yes | - | Top-level container for the project definition. |
Blueprint.Project |
object | Yes | - | Required project object containing data sources, colour maps and scenes. See Project. |
3. Project
Project is the root of the visualisation definition.
{
"Id": "project-main",
"Name": "",
"DataSources": [],
"ColourMaps": [],
"Scenes": []
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Id |
string | Yes | - | Project identifier. Must use the ID Format. |
Name |
string | No | "" |
Optional human-readable project name. Maximum 100 characters. During upload, the user normally enters the project name in the AIVA upload interface. If this field is omitted or left empty, the user-entered upload name is used. If this field contains a non-empty value, the Blueprint value always takes precedence over any user-entered value. |
DataSources |
array of objects | Yes | - | Must contain at least one data source. Data source IDs and paths must be unique. See Data Sources. |
ColourMaps |
array of objects | No | [] |
Optional reusable colour maps. Colour map IDs must be unique when supplied. See Colour Maps. |
Scenes |
array of objects | Yes | - | Must contain at least one scene. See Scenes. |
Project name precedence: The upload interface normally supplies the project name. If Blueprint.Project.Name is omitted or set to an empty string, AIVA uses the name entered by the user during upload. If Blueprint.Project.Name is specified with a non-empty value, that Blueprint value is always used instead of the user-entered upload value. Use this field only when the Blueprint must enforce a fixed project naming convention whenever it is uploaded into AIVA.
4. Data Sources
A data source defines the file that supplies curve data for one or more tracks.
{
"Id": "ds-main",
"Type": "LAS2",
"Configuration": {},
"Labels": []
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Id |
string | Yes | - | Unique data source identifier. Must use the ID Format. |
Type |
string enum (DataSourceType) |
Yes | LAS2 |
Supported value: LAS2. See Core Enums. |
Configuration |
object | Yes | - | Type-specific data source configuration. See LAS2 Configuration. |
Labels |
array of objects | No | [] |
Optional display label and unit override table. See Labels. |
4.1 LAS2 Configuration
Applicable when DataSources[].Type is LAS2.
{
"Path": "data/main.las"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Path |
string | Yes | - | Relative path to the LAS2 file. When used inside an .aivapkg, prefer paths under
data/. |
Allowed path examples:
data/main.las
../las/main.las
Rejected path examples:
/data/main.las
\server\share\main.las
C:\data\main.las
5. Curve ID Mapping
For LAS2 data sources, Blueprint CurveId values map to identifiers in the source data file.
A CurveId is not a Blueprint object ID. It is a source-data reference. Do not apply the ID Format to source data curve identifiers unless a field is explicitly
documented as a Blueprint object ID.
| Usage | Type | Match Style | Constraints / Description |
|---|---|---|---|
Scalar curve CurveId |
string | Exact source data curve identifier | Should match a curve identifier in the source data. |
Array curve CurveId |
string | Prefix | Should resolve to multiple source data curves such as TARR1, TARR2,
TARR3. |
Label override CurveId |
string | Exact or prefix | Prefix-level overrides apply in array contexts. |
Cross-section curve CurveId |
string | Exact or prefix | May reference scalar or array data depending on context. |
6. Labels
DataSources[].Labels[] remaps display labels and units without changing the underlying
CurveId.
{
"Labels": [
{
"CurveId": "TARR",
"Default": "Transit Time Array",
"Title": "TARR",
"Unit": "µs/m"
}
]
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
CurveId |
string | Yes | - | Source data curve identifier or array prefix. Maximum 100 characters. This is not required to follow the ID Format. |
Default |
string | Conditional | - | General display label. Maximum 50 characters. At least one of Default,
Title, or Unit must be supplied. |
Title |
string | Conditional | - | Track-title label. Maximum 50 characters. At least one of Default,
Title, or Unit must be supplied. |
Unit |
string | Conditional | - | Unit label override. Maximum 50 characters. At least one of Default,
Title, or Unit must be supplied. |
Label resolution:
| Context | Resolution Chain |
|---|---|
| Track title | Title → Default → source CurveId |
| Other display labels | Default → source CurveId |
| Units | Unit → source unit |
If a label override CurveId matches the array prefix used by an array context, that
prefix-level override applies to all matched array channels in that context.
7. Colour Maps
Colour maps define reusable gradients for array heatmaps.
{
"ColourMaps": [
{
"Id": "cm-thermal",
"Name": "Thermal",
"GradientSteps": []
}
]
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Id |
string | Yes | - | Unique colour map identifier. Must use the ID Format. |
Name |
string | No | - | Human-readable colour map name. Maximum 50 characters. |
GradientSteps |
array of objects | Yes | - | Must contain between 2 and 67 gradient steps. Offsets must be unique within the colour map. See Gradient Steps. |
7.1 Gradient Steps
GradientSteps[] defines the colour stops used to build a heatmap gradient.
{
"GradientSteps": [
{
"Offset": 0.0,
"Colour": "#0000FF"
},
{
"Offset": 0.5,
"Colour": "#00FF00"
},
{
"Offset": 1.0,
"Colour": "#FF0000"
}
]
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Offset |
decimal | Yes | - | Decimal from 0 to 1 inclusive. Maximum decimal precision: 1 digit before and 4 digits after the decimal point. Must be unique within the colour map. |
Colour |
string | No | #000 |
Hex colour. Must be #RGB or #RRGGBB. |
8. Scenes
A scene is a self-contained visualisation context within a Project.
{
"Scenes": [
{
"Id": "scene-main-run",
"Name": "Main Run",
"Ranges": {},
"Views": {}
}
]
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Scenes |
array of objects | Yes | - | Project must contain at least one scene. |
Scenes[].Id |
string | No | - | Optional scene identifier. If supplied, must use the ID Format. |
Scenes[].Name |
string | Yes | - | Scene display name. Maximum 100 characters. |
Scenes[].Ranges |
object | Yes | - | Defines full and starting depth/index ranges. See Ranges. |
Scenes[].Views |
object | Yes | - | Container for the required 2D view and optional 3D view. See Views. |
8.1 Scene Resource Limits
These constraints apply per scene.
| Constraint | Type | Limit / Behaviour |
|---|---|---|
| Tracks per scene | integer | Maximum 15 tracks. |
| Distinct data sources per scene | integer | Maximum 10 distinct DataSourceId values across tracks and isolated outer diameter
configuration. |
| 2D view | object | Required. |
| 3D view | object | Optional. |
| Visible tracks | integer | At least one 2D track must be visible. |
The distinct data source limit is based on scene usage, not the total number of project data sources.
8.2 Views
Views groups the scene's 2D and optional 3D visualisation configuration.
{
"Views": {
"2D": {},
"3D": {}
}
}
9. Ranges
Each scene requires Ranges.Full and Ranges.Starting.
{
"Ranges": {
"Full": {
"Min": 0.0,
"Max": 100.0
},
"Starting": {
"Min": 10.0,
"Max": 30.0
}
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Full |
object | Yes | - | Complete scrollable depth/index range for the scene. See Full Range. |
Starting |
object | Yes | - | Initial viewport depth/index range. Must sit inside Full. See Starting Range. |
Containment rule:
Starting.Min >= Full.Min
Starting.Max <= Full.Max
9.1 Full Range
Full defines the complete available range for the scene.
{
"Full": {
"Min": 0.0,
"Max": 100.0
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Min |
decimal | Yes | - | Minimum full-range depth/index value. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
Max |
decimal | Yes | - | Maximum full-range depth/index value. Must be greater than Min. Maximum decimal
precision: 8 digits before and 4 digits after the decimal point. |
9.2 Starting Range
Starting defines the initial viewport range for the scene.
{
"Starting": {
"Min": 10.0,
"Max": 30.0
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Min |
decimal | Yes | - | Minimum starting depth/index value. Must be greater than or equal to
Ranges.Full.Min. Maximum decimal precision: 8 digits before and 4 digits after the
decimal point. |
Max |
decimal | Yes | - | Maximum starting depth/index value. Must be less than or equal to Ranges.Full.Max
and greater than Min. Maximum decimal precision: 8 digits before and 4 digits after
the decimal point. |
10. 2D View
Views.2D defines the side-by-side log-track layout for a scene. Its Tracks
collection is documented in Tracks.
{
"2D": {
"Tracks": []
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Tracks |
array of objects | Yes | - | Must be non-null and non-empty. Maximum 15 tracks per scene. Track IDs must be unique within the 2D view. At least one track must be visible. See Tracks. |
11. Tracks
A scene can define a maximum of 15 tracks. See Scene Resource Limits.
{
"Id": "track-array",
"Position": 1,
"DataSourceId": "ds-main",
"Data": {},
"Visible": true,
"Title": "Transit Time",
"Subtitle": "Array Track",
"ProportionalWidth": 2,
"Statistics": {},
"CrossSection": {}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Id |
string | Yes | - | Track identifier. Must use the ID Format. Must be unique within the 2D view. |
Position |
integer | No | 1 |
Track layout position. Minimum 1. |
DataSourceId |
string | Yes | - | Must use the ID Format. Must reference
Project.DataSources[].Id. Counts toward the scene-level distinct data source limit.
|
Data |
object | Yes | - | Must define array, scalar, synthetic, or region content. See Track Data Rules. |
Visible |
boolean | No | true |
At least one track in the 2D view must be visible. |
Title |
string | No | - | Optional display title. Maximum 50 characters. |
Subtitle |
string | No | - | Optional display subtitle. Maximum 50 characters. |
ProportionalWidth |
integer | No | 1 |
Relative display width. Integer from 1 to 4. |
Statistics |
object | No | - | Optional statistics include/exclude configuration. See Statistics. |
CrossSection |
object | No | - | Optional cross-section configuration. See Cross Sections. |
12. Track Data Rules
Data supports array data or scalar/non-array track content. Scalar content is represented by reference curves, synthetic curves, and regions rather than array heatmap/line data.
Array data example:
{
"Data": {
"Array": {}
}
}
Scalar Curve Data Example:
{
"Data": {
"ReferenceCurves": [],
"SyntheticCurves": [],
"Regions": []
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Array |
object | Conditional | - | Multi-channel array data. If supplied, it cannot be combined with ReferenceCurves,
SyntheticCurves, or Regions. See Array Data.
|
ReferenceCurves |
array of objects | Conditional | - | Source scalar curves from the data source. Can coexist with SyntheticCurves and
Regions. See Reference Curves. |
SyntheticCurves |
array of objects | Conditional | - | Fixed-value curves defined by the Blueprint. Can coexist with ReferenceCurves and
Regions. See Synthetic Curves. |
Regions |
array of objects | Conditional | - | Filled regions between boundaries. Can coexist with scalar curve collections. See Regions. |
Rules:
- At least one data member must be supplied.
Arraycannot be combined withReferenceCurves,SyntheticCurves, orRegions.- Non-array scalar/region members can coexist.
- Array overlays should use
Array.Overlay, not a separate scalar curve collection in the same track.
13. Array Data
{
"Data": {
"Array": {
"Curve": {},
"Options": {},
"Overlay": {}
}
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Curve |
object | Yes | - | Array curve binding. See Array Curve. |
Options |
object | Yes | - | Array rendering and reduction options. See Array Options. |
Overlay |
object | No | - | Optional scalar overlay for the array. See Overlay. |
13.1 Array Curve
{
"CurveId": "TARR",
"IndexRange": "ALL"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
CurveId |
string | Yes | - | Source data curve prefix or array curve identifier. Maximum 100 characters. This is not required to follow the ID Format. |
IndexRange |
string | Yes | ALL |
Maximum 200 characters. Must match Index Range Syntax. |
13.2 Array Options
{
"DataReductionType": "Avg",
"EdgeBufferWidth": 0,
"Heatmap": {},
"Lines": {}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
DataReductionType |
string enum (DataReductionType) |
Yes | - | Valid Data Reduction Type. See Core Enums. |
EdgeBufferWidth |
integer | No | 0 |
Minimum 0. |
Heatmap |
object | Conditional | - | At least one of Heatmap or Lines must be supplied. See Heatmap. |
Lines |
object | Conditional | - | At least one of Heatmap or Lines must be supplied. See Lines. |
13.3 Heatmap
{
"Enabled": true,
"ColourMapId": "cm-thermal",
"MinValue": 0.0,
"MaxValue": 100.0
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Enabled |
boolean | No | true |
Controls heatmap display. |
ColourMapId |
string | Yes | - | Must use the ID Format. Must reference
Project.ColourMaps[].Id. |
MinValue |
decimal | Yes | - | Minimum heatmap value. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
MaxValue |
decimal | Yes | - | Maximum heatmap value. Maximum decimal precision: 8 digits before and 4 digits after the decimal
point. Must be greater than MinValue. |
13.4 Lines
{
"CentreId": 8.0,
"Swing": 4.0,
"CentreLines": {
"Visible": true
},
"Dividers": {
"Visible": true
},
"LineColour": "#000000",
"LineThickness": 1,
"LineStyle": "Solid"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
CentreId |
decimal | Yes | - | Value represented at the centre line for the array line display. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
Swing |
decimal | Yes | - | Gap between neighbouring channel centrelines in the array line display. Maximum decimal precision: 4 digits before and 4 digits after the decimal point. |
CentreLines |
object | No | Defaults applied by model | Centre line display settings. See Centre Lines. |
Dividers |
object | No | Defaults applied by model | Divider display settings. See Dividers. |
LineColour |
string | No | #000 |
Hex colour. Must be #RGB or #RRGGBB. |
LineThickness |
integer | No | 1 |
Minimum 1. |
LineStyle |
string enum (LineStyle) |
No | Solid |
Valid line style. See Core Enums. |
13.5 Centre Lines
CentreLines controls whether centre lines are shown for array line rendering.
{
"CentreLines": {
"Visible": true
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Visible |
boolean | No | false |
Shows or hides centre lines. |
13.6 Dividers
Dividers controls whether divider lines are shown for array line rendering.
{
"Dividers": {
"Visible": true
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Visible |
boolean | No | false |
Shows or hides dividers. |
13.7 Overlay
{
"Visible": true,
"CurveId": "CALI",
"MinScale": 0.0,
"MaxScale": 20.0,
"LineColour": "#FFFFFF",
"LineThickness": 1,
"LineStyle": "Solid"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Visible |
boolean | No | false |
Controls whether the overlay is shown. |
CurveId |
string | Yes | - | Required when overlay configuration is supplied. Source data scalar curve identifier. Maximum 100 characters. |
MinScale |
decimal | Yes | - | Required when overlay configuration is supplied. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
MaxScale |
decimal | Yes | - | Required when overlay configuration is supplied. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
LineColour |
string | Yes | - | Required when overlay configuration is supplied. Hex colour. |
LineThickness |
integer | No | 1 |
Minimum 1. |
LineStyle |
string enum (LineStyle) |
No | Solid |
Valid line style. See Core Enums. |
For overlays on array tracks, MinScale and MaxScale should normally align with the array's expected start and end channel range.
14. Scalar Curves
Shared scalar rendering fields:
{
"CurveId": "GR",
"DataReductionType": "Avg",
"MinScale": 0.0,
"MaxScale": 150.0,
"LineColour": "#00FF00",
"LineThickness": 1,
"LineStyle": "Solid"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
MinScale |
decimal | Yes | - | Minimum display scale. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
MaxScale |
decimal | Yes | - | Maximum display scale. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
LineColour |
string | Yes | - | Hex colour. Must be #RGB or #RRGGBB. |
LineThickness |
integer | No | 1 |
Minimum 1. |
LineStyle |
string enum (LineStyle) |
No | Solid |
Valid line style. See Core Enums. |
14.1 Reference Curves
{
"CurveId": "GR",
"DataReductionType": "Avg",
"MinScale": 0.0,
"MaxScale": 150.0,
"LineColour": "#00FF00",
"LineThickness": 1,
"LineStyle": "Solid"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
CurveId |
string | Yes | - | Source data curve identifier. Maximum 100 characters. This is not required to follow the ID Format. |
DataReductionType |
string enum (DataReductionType) |
Yes | - | Valid Data Reduction Type. See Core Enums. |
14.2 Synthetic Curves
{
"Value": 80.0,
"Label": "Threshold",
"UnitLabel": "API",
"MinScale": 0.0,
"MaxScale": 150.0,
"LineColour": "#FF0000",
"LineThickness": 1,
"LineStyle": "Dotted"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Value |
decimal | Yes | - | Fixed synthetic value. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
Label |
string | Yes | - | Non-empty display label. Maximum 50 characters. |
UnitLabel |
string | Yes | - | Non-empty unit label. Maximum 50 characters. |
15. Regions
A region fills the area between two boundaries.
{
"StartBoundary": {},
"EndBoundary": {},
"FillColour": "#FFCCCC",
"TitleLabel": "High GR",
"UnitLabel": "API"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
StartBoundary |
object | Yes | - | Region start boundary. See Boundary Properties. |
EndBoundary |
object | Yes | - | Region end boundary. See Boundary Properties. |
FillColour |
string | Yes | - | Hex colour. Must be #RGB or #RRGGBB. |
TitleLabel |
string | No | - | Optional display label. Maximum 50 characters. If omitted, no region title element is displayed. |
UnitLabel |
string | No | - | Optional unit label. Maximum 50 characters. |
15.1 Boundary Properties
{
"BoundarySource": {},
"MinScale": 0.0,
"MaxScale": 150.0
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
BoundarySource |
object | Yes | - | Defines whether the boundary is a reference or synthetic value. See Boundary Source. |
MinScale |
decimal | Yes | - | Minimum boundary scale. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
MaxScale |
decimal | Yes | - | Maximum boundary scale. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
15.2 Boundary Source
Reference boundary source example:
{
"BoundaryType": "Reference",
"CurveId": "GR",
"DataReductionType": "Avg"
}
Synthetic boundary source example:
{
"BoundaryType": "Synthetic",
"Value": 80.0
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
BoundaryType |
string enum (BoundaryType) |
Yes | - | Reference or Synthetic. See Core Enums.
|
CurveId |
string | Required for Reference |
- | Source data curve identifier. Maximum 100 characters. |
DataReductionType |
string enum (DataReductionType) |
Required for Reference |
- | Valid Data Reduction Type. See Core Enums. |
Value |
decimal | Required for Synthetic |
- | Synthetic boundary value. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
16. Statistics
Statistics.Include contains additional source curves to include in statistics.
Statistics.Exclude contains source curves to suppress.
By default, statistics are generated for rendered reference-backed source curves on the track. Use Include to add additional source curves and Exclude to suppress automatically included source curves.
{
"Statistics": {
"Include": [],
"Exclude": []
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Include |
array of objects | No | [] |
Statistics include collection. See Statistics Include. |
Exclude |
array of objects | No | [] |
Statistics exclude collection. See Statistics Exclude. |
16.1 Statistics Include
{
"CurveId": "GR",
"DataReductionType": "Avg"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
CurveId |
string | Yes | - | Source data curve identifier. Maximum 100 characters. |
DataReductionType |
string enum (DataReductionType) |
Yes | - | Valid Data Reduction Type. See Core Enums. |
16.2 Statistics Exclude
{
"CurveId": "NOISE"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
CurveId |
string | Yes | - | Source data curve identifier. Maximum 100 characters. |
17. Cross Sections
A cross-section is optional on a track.
{
"CrossSection": {
"HighlightedCurve": {},
"Curves": []
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Curves |
array of objects | Yes | - | Must be non-null and non-empty when CrossSection is supplied. See Cross Section Curves. |
HighlightedCurve |
object | No | - | Optional highlighted curve. See Highlighted Curve. |
17.1 Highlighted Curve
A highlighted curve is a single prominent curve used to emphasise one cross-section value or indicator. It is separate from the Curves collection, which defines the normal cross-section rings/curve set.
{
"CurveId": "CALI",
"Colour": "#00FF00",
"DataReductionType": "Avg",
"MinScale": 0.0,
"MaxScale": 20.0
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
CurveId |
string | Yes | - | Source data curve identifier. Maximum 100 characters. |
Colour |
string | Yes | - | Hex colour. Must be #RGB or #RRGGBB. |
DataReductionType |
string enum (DataReductionType) |
Yes | - | Valid Data Reduction Type. See Core Enums. |
MinScale |
decimal | Yes | - | Minimum display scale for the highlighted curve. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
MaxScale |
decimal | Yes | - | Maximum display scale for the highlighted curve. Maximum decimal precision: 8 digits before and 4 digits after the decimal point. |
17.2 Cross Section Curves
{
"CurveId": "TARR",
"Colour": "#FF0000",
"IndexRange": "ALL",
"DataReductionType": "Avg"
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
CurveId |
string | Yes | - | Source data curve identifier or array prefix. Maximum 100 characters. |
Colour |
string | Yes | - | Hex colour. Must be #RGB or #RRGGBB. |
IndexRange |
string | No | - | Optional. Must match Index Range Syntax when supplied. Intended only for curves that resolve to array data; omit for scalar curves. |
DataReductionType |
string enum (DataReductionType) |
Yes | - | Valid Data Reduction Type. See Core Enums. |
The source data parser is responsible for proving that a CurveId with an
IndexRange resolves to actual array data.
18. 3D View
Views.3D is optional. When present, it must reference a 2D array track in the same scene.
{
"3D": {
"DataReductionType": "Avg",
"TrackId": "track-array",
"Markup": {},
"Display": {}
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
DataReductionType |
string enum (DataReductionType) |
Yes | - | Valid Data Reduction Type. See Core Enums. |
TrackId |
string | Yes | - | Must use the ID Format. Must reference a 2D track in the same scene, and that track must use array data. |
Markup |
object | No | Defaults applied by model | Optional 3D markup configuration. See Markup. |
Display |
object | No | Defaults applied by model | Optional 3D display configuration. See Display. |
19. Markup
Markup contains optional 3D annotation and overlay display settings. Its nested objects are
documented in Axes, Position Indicator, Markup Labels, and Colour Scale.
{
"Markup": {
"Axes": {},
"PositionIndicator": {},
"Labels": {},
"ColourScale": {}
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Axes |
object | No | Defaults applied by model | Controls 3D axes helper visibility. See Axes. |
PositionIndicator |
object | No | Defaults applied by model | Controls the 3D position indicator. See Position Indicator. |
Labels |
object | No | Defaults applied by model | Controls 3D channel and depth labels. See Markup Labels. |
ColourScale |
object | No | Defaults applied by model | Controls the colour scale legend. See Colour Scale. |
19.1 Axes
Axes controls visibility of full-size and mini orientation helpers in the 3D view.
{
"Axes": {
"InlineAxesHelperVisible": true,
"MiniAxesHelperVisible": true
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
InlineAxesHelperVisible |
boolean | No | true |
Shows or hides the full-size inline XYZ axes helper. |
MiniAxesHelperVisible |
boolean | No | true |
Shows or hides the mini orientation axes helper. |
19.2 Position Indicator
PositionIndicator controls the current-position or hover indicator shown in the 3D view.
{
"PositionIndicator": {
"Type": "Crosshair",
"IndicatorLabelsVisible": true
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Type |
string enum (PositionIndicatorType) |
No | Crosshair |
None, Crosshair, or Dot. See Core Enums. |
IndicatorLabelsVisible |
boolean | No | true |
Shows or hides labels associated with the position indicator. |
19.3 Markup Labels
Labels controls channel and depth label display in the 3D view.
{
"Labels": {
"Channels": "Number",
"Depth": "TopIntermediateBottom"
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Channels |
string enum (ChannelLabelStyle) |
No | None |
Channel label display mode. See Core Enums. |
Depth |
string enum (DepthLabelType) |
No | None |
Depth label display mode. See Core Enums. |
19.4 Colour Scale
ColourScale controls the 3D heatmap colour-scale legend.
{
"ColourScale": {
"Visible": true
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Visible |
boolean | No | true |
Shows or hides the colour-scale legend. |
20. Display
Display contains 3D rendering, transform, cutaway, trajectory, drift tool and outer diameter
configuration. Its nested objects are documented in Transform, Cutaway, Drift Tool, True Pipe Trajectory, and Outer
Diameter.
{
"Display": {
"Mode": "TexturedWireframe",
"Transform": {},
"Cutaway": {},
"DriftTool": {},
"TruePipeTrajectory": {},
"OuterDiameter": {}
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Mode |
string enum (DisplayMode) |
No | TexturedWireframe |
3D render mode. See Core Enums. |
Transform |
object | No | Defaults applied by model | 3D scale and rotation settings. See Transform. |
Cutaway |
object | No | Defaults applied by model | Cutaway display settings. See Cutaway. |
DriftTool |
object | No | Defaults applied by model | Drift tool display settings. See Drift Tool. |
TruePipeTrajectory |
object | No | Defaults applied by model | True pipe trajectory curve binding. See True Pipe Trajectory. |
OuterDiameter |
object | No | Defaults applied by model | Outer diameter display settings. See Outer Diameter. |
20.1 Transform
Transform contains 3D scaling and rotation settings.
{
"Transform": {
"Scale": {},
"Rotate": {}
}
}
20.2 Scale
Scale controls 3D XY and Z scaling.
{
"Scale": {
"XY": 1.0,
"Z": 1.0
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
XY |
decimal | No | 1 |
Greater than 0. Maximum decimal precision: 2 digits before and 2 digits after the decimal point. |
Z |
decimal | No | 1 |
Greater than 0. Maximum decimal precision: 2 digits before and 2 digits after the decimal point. |
20.3 Rotate
Rotate controls 3D rotation in degrees.
{
"Rotate": {
"X": 0,
"Y": 0,
"Z": 0
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
X |
integer | No | 0 |
Rotation around the X axis. -360 to 360 degrees. |
Y |
integer | No | 0 |
Rotation around the Y axis. -360 to 360 degrees. |
Z |
integer | No | 0 |
Rotation around the Z axis. -360 to 360 degrees. |
20.4 Cutaway
Cutaway controls the 3D cutaway wedge.
{
"Cutaway": {
"Enabled": true,
"StartChannelNumber": 1
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Enabled |
boolean | No | false |
Enables or disables the cutaway wedge. |
StartChannelNumber |
integer | No | 1 |
Starting 1-based channel number for the cutaway. Minimum 1. |
20.5 Drift Tool
DriftTool controls the 3D drift tool overlay.
{
"DriftTool": {
"Visible": true,
"Length": 1,
"TopDiameter": 1,
"BottomDiameter": 1,
"InlineOffset": 0,
"CrossLineOffset": 0
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Visible |
boolean | No | false |
Shows or hides the drift mandrel in the 3D view. |
Length |
integer | No | 1 |
Physical length of the drift mandrel. Unitless - inherits its unit from the bound data source. Must be greater than zero when Visible is true. |
TopDiameter |
integer | No | 1 |
Diameter of the mandrel at its top end. Unitless - inherits its unit from the bound data source. Must be greater than zero when Visible is true. |
BottomDiameter |
integer | No | 1 |
Diameter of the mandrel at its bottom end. Unitless - inherits its unit from the bound data source. Must be greater than zero when Visible is true. |
InlineOffset |
integer | No | 0 |
Lateral offset applied to the mandrel along the inline axis. |
CrossLineOffset |
integer | No | 0 |
Lateral offset applied to the mandrel along the cross-line axis. |
20.6 True Pipe Trajectory
TruePipeTrajectory controls curve-based true pipe trajectory display.
{
"TruePipeTrajectory": {
"Enabled": true,
"DeltaXCurveId": "DX",
"DeltaYCurveId": "DY"
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Enabled |
boolean | No | false |
Enables or disables true pipe trajectory. |
DeltaXCurveId |
string | Yes | - | Required when true pipe trajectory configuration is supplied. Source data curve identifier. Maximum 100 characters. |
DeltaYCurveId |
string | Yes | - | Required when true pipe trajectory configuration is supplied. Source data curve identifier. Maximum 100 characters. |
21. Outer Diameter
OuterDiameter controls bound and isolated outer diameter display in the 3D view.
OuterDiameter.Bound uses the same data context as the referenced 3D array track.
OuterDiameter.Isolated uses its own DataSourceId and therefore counts toward the
scene-level distinct data-source limit.
{
"OuterDiameter": {
"Bound": {},
"Isolated": {}
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Bound |
object | No | Defaults applied by model | Bound outer diameter configuration. See Bound Outer Diameter. |
Isolated |
object | No | Defaults applied by model | Isolated outer diameter configuration. See Isolated Outer Diameter. |
21.1 Bound Outer Diameter
Bound displays outer diameter values using the same data context as the 3D track. In the current implementation this uses a scalar/non-array curve from the bound 3D track data source.
{
"Bound": {
"Visible": true,
"CurveId": "OD",
"Colour": "#00FF00",
"Transparency": 0.5,
"AddLogToValues": false
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Visible |
boolean | No | false |
Show bound outer diameter. |
CurveId |
string | Yes | - | Required when bound outer diameter configuration is supplied. Source data curve identifier. Maximum 100 characters. |
Colour |
string | No | #00FF00 |
Hex colour. Must be #RGB or #RRGGBB. |
Transparency |
decimal | No | 0.5 |
0 to 1. Maximum decimal precision: 1 digit before and 2 digits after the decimal point. |
AddLogToValues |
boolean | No | false |
Adds outer diameter values to base channel values. |
21.2 Isolated Outer Diameter
Isolated displays outer diameter using a separate data source. In the current implementation this uses array data from the separate data source.
{
"Isolated": {
"Visible": true,
"DataSourceId": "ds-outer-diameter",
"CurveId": "OD",
"DisplayMode": "Textured",
"Transparency": 0.5
}
}
| Property | Type | Required | Default | Constraints / Description |
|---|---|---|---|---|
Visible |
boolean | No | false |
Show isolated outer diameter surface. |
DataSourceId |
string | Yes | - | Required when isolated outer diameter configuration is supplied. Must use the ID Format. Must reference
Project.DataSources[].Id when used. Counts toward the scene-level distinct
data-source limit. |
CurveId |
string | Yes | - | Required when isolated outer diameter configuration is supplied. Source data curve identifier. Maximum 100 characters. |
DisplayMode |
string enum (DisplayMode) |
No | Textured |
Valid display mode. See Core Enums. |
Transparency |
decimal | No | 0.5 |
0 to 1. Maximum decimal precision: 1 digit before and 2 digits after the decimal point. |
22. Track And Data Source Constraints
This section summarises cross-cutting constraints involving tracks and data sources.
| Constraint | Applies To | Rule |
|---|---|---|
| Track count | Scenes[].Views.2D.Tracks |
Maximum 15 tracks per scene. |
| Visible tracks | Scenes[].Views.2D.Tracks[].Visible |
At least one track per scene must be visible. Omitted Visible behaves as
true. |
| Track IDs | Tracks[].Id |
Must be unique within the same 2D view and follow the ID Format. |
| Track data source reference | Tracks[].DataSourceId |
Must reference a defined Project.DataSources[].Id. |
| Scene data source count | Track data sources and isolated outer diameter data sources | Maximum 10 distinct data source IDs per scene. |
| 3D track reference | Views.3D.TrackId |
Must reference a track in the same scene. The referenced track must use array data. |
| Heatmap colour map reference | Heatmap.ColourMapId |
Must reference a defined Project.ColourMaps[].Id. |
| Isolated outer diameter data source | OuterDiameter.Isolated.DataSourceId |
Must reference a defined data source when isolated outer diameter is used or visible. |
| Unused data source | Project.DataSources[] |
A data source defined but unused by any scene may be reported as a warning by validating readers. |
| Unused colour map | Project.ColourMaps[] |
A colour map defined but unused by any heatmap may be reported as a warning by validating readers. |
23. ID Format
Blueprint uses string identifiers to link related parts of the project definition together. These identifiers are used for project IDs, data source IDs, scene IDs, colour map IDs, track IDs, and other cross-reference fields.
IDs are stable technical references. They are not display names.
23.1 Format
Blueprint object IDs must use this format and must be no longer than 50 characters:
^[A-Za-z0-9_-]+$
Maximum length: 50 characters.
| Character Type | Allowed |
|---|---|
Uppercase letters A-Z |
Yes |
Lowercase letters a-z |
Yes |
Numbers 0-9 |
Yes |
Underscore _ |
Yes |
Hyphen - |
Yes |
| Spaces | No |
Dots . |
No |
Slashes / or \ |
No |
Colons : |
No |
| Other punctuation | No |
23.2 Valid Examples
project-main
PRJ-001
ds-main
ds_repeat_run
track-array-01
track_gr
cm-thermal
scene_main_run
23.3 Invalid Examples
project main // spaces are not allowed
project.main // dots are not allowed
data/source/main // slashes are not allowed
C:\data\main // path-style values are not IDs
track:array // colon is not allowed
track#1 // hash is not allowed
this-id-is-far-too-long-because-it-exceeds-the-fifty-character-limit // exceeds 50 characters
23.4 Recommended Naming Conventions
| Entity | Recommended Pattern | Example |
|---|---|---|
| Project | project-<name> |
project-main |
| Data source | ds-<purpose> |
ds-main-run |
| Scene | scene-<purpose> |
scene-main-run |
| Track | track-<content> |
track-gamma-ray |
| Colour map | cm-<name> |
cm-thermal |
Prefer lower-case kebab-case for manually authored files. Keep every ID at 50 characters or fewer.
23.5 IDs Vs Display Names
IDs are stable technical references:
{
"Id": "track-gr"
}
Display names, titles, subtitles, and label overrides are human-readable UI text:
{
"Title": "Gamma Ray"
}
Changing a display label should not break references. Changing an ID can break any field that references it.
23.6 IDs Vs Source Data Curve Identifiers
Blueprint object IDs are not the same thing as source data curve identifiers.
For example:
{
"CurveId": "TARR[1]"
}
This may be valid as a source data curve reference even though it would not be valid as a Blueprint object ID.
24. Data Reduction Types
DataReductionType controls how multiple raw depth samples are collapsed into a single
representative value when the viewer needs to reduce high-resolution data for 2D rendering, statistics,
cross-sections, or 3D rendering.
24.1 Property Contract
| Property | Type | Required | Allowed Values |
|---|---|---|---|
DataReductionType |
string enum (DataReductionType) |
Yes where specified | Avg, Min, Max, AbsAvg, AbsMin,
AbsMax |
24.2 Performance Guidance
Each distinct DataReductionType used against a given data source can require retrieval or
calculation of a separate reduced dataset for that source.
Aim to use no more than two distinct reduction types per data source across the whole Blueprint where practical. This includes reduction types used by:
- array tracks;
- scalar reference curves;
- statistics include entries;
- cross-section curves;
- highlighted cross-section curves;
- 3D view configuration.
Where the exact reduction method is not critical, prefer a reduction type already used by other curves from the same data source.
24.3 Depth-Window Behaviour
Reduction is applied per depth window, not per fixed sample count.
The window size is determined by the relationship between raw sample spacing and active display resolution. As the user zooms in, the window narrows. At sufficient zoom, raw samples may be displayed directly with little or no reduction.
24.4 Supported Values
| Value | Operation | Description | Typical Use |
|---|---|---|---|
Avg |
Mean | Arithmetic mean of all samples in the depth window. Smooths short-interval variation and represents the general trend. | Formation-property curves and smoothly varying measurements where interval trend is more useful than isolated spikes. |
Min |
Minimum | Lowest signed value in the depth window. Preserves downward excursions. | Caliper, standoff, clearance, or geometry-related curves where the smallest value may be significant. |
Max |
Maximum | Highest signed value in the depth window. Preserves upward excursions and narrow peaks. | Borehole rugosity, washout detection, gamma ray peaks, or curves where maximum local excursion should remain visible. |
AbsAvg |
Mean of absolute values | Arithmetic mean of absolute sample values. Treats positive and negative excursions equally. | Waveform-style, vibration, deviation error, residual, misfit, or zero-centred curves where magnitude matters more than polarity. |
AbsMin |
Minimum absolute value | Sample closest to zero, regardless of sign. | Zero-centred error, offset, eccentricity, or differential curves where the most neutral condition is meaningful. |
AbsMax |
Maximum absolute value | Sample furthest from zero, regardless of sign. Preserves worst-case excursion magnitude. | Vibration, shock, stick-slip, torque fluctuation, or curves where largest excursion in either direction is significant. |
25. Index Range Syntax
Several Blueprint properties accept an IndexRange string to select a subset of array channels.
IndexRange is not a general depth range. It selects array channel indices, not measured
depth/index values.
25.1 Property Contract
| Property | Type | Required | Default | Rule |
|---|---|---|---|---|
IndexRange |
string | Context-specific | ALL where omitted/defaulted |
ALL or a comma-separated list of valid non-negative integer range tokens. |
25.2 Syntax Rule
An IndexRange is either:
ALL
or a comma-separated list of range tokens.
Only non-negative integers are valid. Spaces are not permitted anywhere in the string.
| Token Form | Meaning | Example | Selects |
|---|---|---|---|
ALL |
All available indices | ALL |
Every channel in the array |
-N |
Up to and including N |
-20 |
0, 1, 2 … 20 |
N- |
From N to the end |
30- |
30, 31, 32 … last |
N-M |
From N to M inclusive |
10-20 |
10, 11, 12 … 20 |
N,M,… |
Discrete individual indices | 1,2,3 |
1, 2, 3 only |
| Combination | Union of all tokens | -5,10-20,25,30- |
0–5, 10–20, 25, 30–last |
25.3 Valid Examples
{
"IndexRange": "ALL"
}
{
"IndexRange": "-20"
}
{
"IndexRange": "30-"
}
{
"IndexRange": "10-20"
}
{
"IndexRange": "1,2,3"
}
{
"IndexRange": "-5,10-20,25,30-"
}
25.4 Invalid Examples
10 - 20 // spaces are not allowed
1.5-3 // decimals are not allowed
- // missing index value
A-B // non-numeric values are not allowed
10--20 // malformed range
20-10 // descending ranges should be treated as invalid
26. Core Enums
| Enum | Type | Valid Values |
|---|---|---|
DataReductionType |
string enum (DataReductionType) |
Avg, Min, Max, AbsAvg, AbsMin,
AbsMax |
DataSourceType |
string enum (DataSourceType) |
LAS2 |
LineStyle |
string enum (LineStyle) |
Solid, Dashed, Dotted, Dash-Dot,
Dash-Dot-Dot |
BoundaryType |
string enum (BoundaryType) |
Reference, Synthetic |
DisplayMode |
string enum (DisplayMode) |
Textured, Wireframe, TexturedWireframe |
ChannelLabelStyle |
string enum (ChannelLabelStyle) |
None, Radii, Number, Degrees |
PositionIndicatorType |
string enum (PositionIndicatorType) |
None, Crosshair, Dot |
DepthLabelType |
string enum (DepthLabelType) |
None, Top, Intermediate, Bottom,
TopIntermediate, TopBottom, IntermediateBottom,
TopIntermediateBottom |
27. Minimum Usable Example
This example shows the smallest practical Blueprint shape for a single visible scalar track. It includes
one data source, one scene, one 2D view and one visible track. Project.Name is omitted so the
project name can be supplied by the user during upload.
{
"Header": {
"Version": "1",
"Metadata": {}
},
"Blueprint": {
"Project": {
"Id": "project-minimum",
"DataSources": [
{
"Id": "ds-main",
"Type": "LAS2",
"Configuration": {
"Path": "data/main.las"
},
"Labels": []
}
],
"ColourMaps": [],
"Scenes": [
{
"Name": "Main Scene",
"Ranges": {
"Full": {
"Min": 0.0,
"Max": 100.0
},
"Starting": {
"Min": 0.0,
"Max": 25.0
}
},
"Views": {
"2D": {
"Tracks": [
{
"Id": "track-gr",
"Position": 1,
"DataSourceId": "ds-main",
"Data": {
"ReferenceCurves": [
{
"CurveId": "GR",
"DataReductionType": "Avg",
"MinScale": 0.0,
"MaxScale": 150.0,
"LineColour": "#00FF00",
"LineThickness": 1,
"LineStyle": "Solid"
}
]
},
"Visible": true,
"Title": "Gamma Ray",
"Subtitle": "Main",
"ProportionalWidth": 1
}
]
}
}
}
]
}
}
}
28. Rich Example
The following example is intentionally broad. It shows how the major Blueprint objects can fit together in
one document. It is not intended to be a recommended minimum configuration. Because this example includes
Project.Name, that value would override any project name entered by the user during upload.
{
"Header": {
"Version": "1",
"Metadata": {
"Author": "Example",
"Company": "Example Co",
"ExportedAt": "2026-06-10"
}
},
"Blueprint": {
"Project": {
"Id": "project-rich-example",
"Name": "Rich Example",
"DataSources": [
{
"Id": "ds-main",
"Type": "LAS2",
"Configuration": {
"Path": "data/main.las"
},
"Labels": [
{
"CurveId": "GR",
"Default": "Gamma Ray",
"Title": "GR",
"Unit": "API"
},
{
"CurveId": "TARR",
"Default": "Transit Time Array",
"Title": "Transit Time",
"Unit": "µs/m"
}
]
},
{
"Id": "ds-outer-diameter",
"Type": "LAS2",
"Configuration": {
"Path": "data/outer-diameter.las"
},
"Labels": []
}
],
"ColourMaps": [
{
"Id": "cm-thermal",
"Name": "Thermal",
"GradientSteps": [
{
"Offset": 0.0,
"Colour": "#0000FF"
},
{
"Offset": 0.5,
"Colour": "#00FF00"
},
{
"Offset": 1.0,
"Colour": "#FF0000"
}
]
}
],
"Scenes": [
{
"Id": "scene-main-run",
"Name": "Main Run",
"Ranges": {
"Full": {
"Min": 0.0,
"Max": 100.0
},
"Starting": {
"Min": 10.0,
"Max": 30.0
}
},
"Views": {
"2D": {
"Tracks": [
{
"Id": "track-array",
"Position": 1,
"DataSourceId": "ds-main",
"Visible": true,
"Title": "Array",
"Subtitle": "Transit Time",
"ProportionalWidth": 2,
"Data": {
"Array": {
"Curve": {
"CurveId": "TARR",
"IndexRange": "ALL"
},
"Options": {
"DataReductionType": "Avg",
"EdgeBufferWidth": 0,
"Heatmap": {
"Enabled": true,
"ColourMapId": "cm-thermal",
"MinValue": 0.0,
"MaxValue": 100.0
},
"Lines": {
"CentreId": 8.0,
"Swing": 4.0,
"CentreLines": {
"Visible": true
},
"Dividers": {
"Visible": true
},
"LineColour": "#000000",
"LineThickness": 1,
"LineStyle": "Solid"
}
},
"Overlay": {
"Visible": true,
"CurveId": "CALI",
"DataReductionType": "Max",
"MinScale": 0.0,
"MaxScale": 20.0,
"LineColour": "#FFFFFF",
"LineThickness": 2,
"LineStyle": "Dashed"
}
}
},
"Statistics": {
"Include": [
{
"CurveId": "TARR",
"DataReductionType": "Avg"
}
],
"Exclude": [
{
"CurveId": "NOISE"
}
]
},
"CrossSection": {
"HighlightedCurve": {
"CurveId": "CALI",
"Colour": "#00FF00",
"DataReductionType": "Avg",
"MinScale": 0.0,
"MaxScale": 20.0
},
"Curves": [
{
"CurveId": "TARR",
"Colour": "#FF0000",
"IndexRange": "1-8",
"DataReductionType": "Avg"
}
]
}
},
{
"Id": "track-scalar",
"Position": 2,
"DataSourceId": "ds-main",
"Visible": true,
"Title": "Scalar Curves",
"Subtitle": "Reference, Synthetic And Regions",
"ProportionalWidth": 1,
"Data": {
"ReferenceCurves": [
{
"CurveId": "GR",
"DataReductionType": "Max",
"MinScale": 0.0,
"MaxScale": 150.0,
"LineColour": "#00FF00",
"LineThickness": 1,
"LineStyle": "Solid"
}
],
"SyntheticCurves": [
{
"Value": 80.0,
"Label": "Threshold",
"UnitLabel": "API",
"MinScale": 0.0,
"MaxScale": 150.0,
"LineColour": "#FF0000",
"LineThickness": 1,
"LineStyle": "Dotted"
}
],
"Regions": [
{
"StartBoundary": {
"BoundarySource": {
"BoundaryType": "Reference",
"CurveId": "GR",
"DataReductionType": "Avg"
},
"MinScale": 0.0,
"MaxScale": 150.0
},
"EndBoundary": {
"BoundarySource": {
"BoundaryType": "Synthetic",
"Value": 80.0
},
"MinScale": 0.0,
"MaxScale": 150.0
},
"FillColour": "#FFCCCC",
"TitleLabel": "High GR",
"UnitLabel": "API"
}
]
},
"Statistics": {
"Include": [
{
"CurveId": "GR",
"DataReductionType": "Avg"
}
],
"Exclude": []
}
}
]
},
"3D": {
"DataReductionType": "Avg",
"TrackId": "track-array",
"Markup": {
"Axes": {
"InlineAxesHelperVisible": true,
"MiniAxesHelperVisible": true
},
"PositionIndicator": {
"Type": "Crosshair",
"IndicatorLabelsVisible": true
},
"Labels": {
"Channels": "Number",
"Depth": "TopIntermediateBottom"
},
"ColourScale": {
"Visible": true
}
},
"Display": {
"Mode": "TexturedWireframe",
"Transform": {
"Scale": {
"XY": 1.0,
"Z": 1.0
},
"Rotate": {
"X": 0,
"Y": 0,
"Z": 0
}
},
"Cutaway": {
"Enabled": true,
"StartChannelNumber": 1
},
"DriftTool": {
"Visible": true,
"Length": 10,
"TopDiameter": 4,
"BottomDiameter": 4,
"InlineOffset": 0,
"CrossLineOffset": 0
},
"TruePipeTrajectory": {
"Enabled": true,
"DeltaXCurveId": "DX",
"DeltaYCurveId": "DY"
},
"OuterDiameter": {
"Bound": {
"Visible": true,
"CurveId": "OD",
"Colour": "#00FF00",
"Transparency": 0.5,
"AddLogToValues": false
},
"Isolated": {
"Visible": true,
"DataSourceId": "ds-outer-diameter",
"CurveId": "OD",
"DisplayMode": "Textured",
"Transparency": 0.5
}
}
}
}
}
}
]
}
}
}
This example uses two data sources in one scene: one primary data source for the 2D and 3D content, and one isolated outer diameter data source. That means the scene uses two distinct data sources against the maximum scene-level limit of ten.
29. Empty Template JSON
This template shows the full top-level structure with empty collections or placeholder values. Replace
placeholders before use. Project.Name is shown as an empty string so the name entered by the user
during upload will be used; set it to a non-empty value only when the Blueprint must enforce a fixed project
naming convention.
{
"Header": {
"Version": "1",
"Metadata": {}
},
"Blueprint": {
"Project": {
"Id": "",
"Name": "",
"DataSources": [
{
"Id": "",
"Type": "LAS2",
"Configuration": {
"Path": ""
},
"Labels": [
{
"CurveId": "",
"Default": "",
"Title": "",
"Unit": ""
}
]
}
],
"ColourMaps": [
{
"Id": "",
"Name": "",
"GradientSteps": [
{
"Offset": 0.0,
"Colour": "#000000"
},
{
"Offset": 1.0,
"Colour": "#FFFFFF"
}
]
}
],
"Scenes": [
{
"Id": "",
"Name": "",
"Ranges": {
"Full": {
"Min": 0.0,
"Max": 0.0
},
"Starting": {
"Min": 0.0,
"Max": 0.0
}
},
"Views": {
"2D": {
"Tracks": [
{
"Id": "",
"Position": 1,
"DataSourceId": "",
"Data": {
"ReferenceCurves": [
{
"CurveId": "",
"DataReductionType": "Avg",
"MinScale": 0.0,
"MaxScale": 0.0,
"LineColour": "#000000",
"LineThickness": 1,
"LineStyle": "Solid"
}
]
},
"Visible": true,
"Title": "",
"Subtitle": "",
"ProportionalWidth": 1,
"Statistics": {
"Include": [],
"Exclude": []
},
"CrossSection": {
"HighlightedCurve": {
"CurveId": "",
"Colour": "#000000",
"DataReductionType": "Avg",
"MinScale": 0.0,
"MaxScale": 0.0
},
"Curves": [
{
"CurveId": "",
"Colour": "#000000",
"IndexRange": "ALL",
"DataReductionType": "Avg"
}
]
}
}
]
},
"3D": {
"DataReductionType": "Avg",
"TrackId": "",
"Markup": {
"Axes": {
"InlineAxesHelperVisible": true,
"MiniAxesHelperVisible": true
},
"PositionIndicator": {
"Type": "Crosshair",
"IndicatorLabelsVisible": true
},
"Labels": {
"Channels": "None",
"Depth": "None"
},
"ColourScale": {
"Visible": true
}
},
"Display": {
"Mode": "Textured",
"Transform": {
"Scale": {
"XY": 1.0,
"Z": 1.0
},
"Rotate": {
"X": 0,
"Y": 0,
"Z": 0
}
},
"Cutaway": {
"Enabled": false,
"StartChannelNumber": 1
},
"DriftTool": {
"Visible": false,
"Length": 1,
"TopDiameter": 1,
"BottomDiameter": 1,
"InlineOffset": 0,
"CrossLineOffset": 0
},
"TruePipeTrajectory": {
"Enabled": false,
"DeltaXCurveId": "",
"DeltaYCurveId": ""
},
"OuterDiameter": {
"Bound": {
"Visible": false,
"CurveId": "",
"Colour": "#00FF00",
"Transparency": 0.5,
"AddLogToValues": false
},
"Isolated": {
"Visible": false,
"DataSourceId": "",
"CurveId": "",
"DisplayMode": "Textured",
"Transparency": 0.5
}
}
}
}
}
}
]
}
}
}
The empty template is a structural starting point only. Empty strings and zero-width ranges must be replaced with valid values before use.