Skip to Content
This documentation is provided with the HEAT environment and describes this HEAT instance.
DevelopersNode template catalogCatalog

Node template catalog

A node template is a reusable processing step that a runner implements. This page lists every platform template in one place, so you can find the right step without opening each runner hub.

HEAT ships 65 templates across five runners. A session template is a graph of these steps. Each step points at one template by name, and that name is a long-lived contract. Runner hubs hold the same rows with limitations and pipeline diagrams. This page is the index across them.

Which node do I need

The groups below name the first template to reach for. Follow the Details column in the tables for configuration and output shapes.

I have CSV or TSV uploads

  • Start with input-node, then tabular-to-dataservice on core-utils for one tabular parent.
  • Use system-tabular-to-dataservice when one input node receives many uploads and you want all of them in one dashboard payload.
  • Use tabular-remap or tabular-query first when columns need renaming, deriving or filtering with SQL.

I have JSON

  • Use json-filter to scope a payload with one JMESPath expression.
  • Use json-template to build a new document from JMESPath leaves, json-flatten to turn nested JSON into CSV, and json-merge to combine several JSON objects.
  • Use heat-system-dataservice-envelope to lift JSON paths into $heat-dataservice channels without code.
  • Use system-arbex-js when the reshaping needs real logic. See Arbex.

I have HEAT Capture protobuf

  • Use system-protobuf-extract on the platform runner or hydrate-protobuf-v2 on core-utils to decode capture uploads into records.
  • Follow with an entity-state-to-* transform for the widget you want, for example entity-state-to-mapdisplay for a map or entity-state-to-chart-data for a chart.
  • Use hydrate-protobuf-journal when the session is live and the upload count keeps growing.

I want to publish a dashboard

  • Use dashboard-v2 for your own session templates. It turns a data service payload and a layout into a dimension.
  • heat-system-next-dimension does the same job inside shipped platform templates. Do not add it to new integrator templates.
  • Use heat-dataservice-merge to combine several $heat-dataservice producers before the publishing node.

I want custom logic without building a runner

  • Use system-arbex-js. It runs sandboxed JavaScript on the platform runner and can emit $heat-dataservice and layout directly.

I have audio

  • Start with convert-to-pcm, then audio-metrics, generate-transcript and voice-analysis in that order.

I have headset video

  • Use video-atlas-encode as a direct child of the capture input node. Use adaptive-video-encode only to list the video streams a capture holds.

Template types

Every template declares one type. The type describes the step’s role in the graph, not which runner executes it.

TypeMeaning
InputReceives uploaded data through an ingest and stores it as node outputs. Only input-node has this type.
TransformReads parent outputs and reshapes them into a new output, for example decode, filter, flatten or compute.
ProcessingRuns an algorithm or a gate over parent outputs, for example type validation or a reprocess trigger.
AggregationCombines several parent outputs into one result, usually the published dimension.

The Inputs column below says whether a template accepts one parent (single) or several (multiple). This comes from acceptsMultipleInputs in the runner manifest.

core-utils

The core-utils runner (container image runner-core-utils) provides domain-agnostic transforms for tabular, JSON and protobuf data. It also carries the entity-state-to-* family that turns decoded capture records into widget-ready channels. Hub: core-utils.

TemplateTypeInputsWhat it doesDetails
tabular-remapTransformsingleRename, derive or drop CSV or TSV columns with per-row Python expressions.tabular-remap
hydrate-protobufTransformmultipleDecode legacy protobuf types (gaze, folder upload, OpenDIS PDU, SimulationFrame, Signal PDU audio) to JSON, CSV or binary.hydrate-protobuf
hydrate-protobuf-v2TransformmultipleMerge all capture parents and emit SimulationFrame, EntityState, EntityDataEvent or TrackingEvent records with capture envelope fields.hydrate-protobuf-v2
hydrate-protobuf-journalTransformmultipleLive-session hydration. Each run appends only newly decoded rows as a part, and readers see one composed CSV or NDJSON artefact.hydrate-protobuf-journal
domain-tree-entitiesTransformmultipleDecode capture protobuf directly and fold it into one current-state record per entity, with health and position history.domain-tree-entities
domain-tree-hwioTransformmultipleDecode capture protobuf directly and carry-forward hardware input (HWIO) values into one flat current-state document.domain-tree-hwio
domain-tree-hwio-eventsTransformmultipleDecode capture protobuf directly and emit hardware input (HWIO) changes as a chronological event list for timelines.domain-tree-hwio-events
tabular-queryTransformsingleRun SQL SELECT statements over one CSV or TSV in SQLite and output named result tables as JSON.tabular-query
json-templateTransformsingleBuild an output JSON document from a template tree whose string leaves are JMESPath expressions.json-template
json-flattenTransformsingleFlatten nested JSON or NDJSON records into CSV or TSV columns.json-flatten
simulation-frame-mergeTransformsinglePivot long-format SimulationFrame JSON into a wide CSV keyed by tick and entity.simulation-frame-merge
json-mergeTransformmultipleShallow or deep merge of several JSON object parents into one document.json-merge
converge-outputsAggregationmultipleRe-expose every upstream output on one node without copying blobs.converge-outputs
session-summaryTransformsingleEvaluate configured metric definitions over entity records and emit a legacy top-stats payload.session-summary
threat-zone-detectionTransformsingleCompute distances between a threat entity and allied entities, detect zone crossings and emit response-time channels.threat-zone-detection
entity-state-to-mapdisplayTransformsingleBuild a mapdisplay channel with movement tracks for selected entities.entity-state-to-mapdisplay
entity-state-to-chart-dataTransformsingleBuild series and events channels for ComposableChart from entity-state records.entity-state-to-chart-data
entity-state-to-stats-summaryTransformsingleBuild value channels with engagement statistics such as time to detect and detection counts.entity-state-to-stats-summary
opendis-decodeTransformsingleReshape hydrate-protobuf OpenDIS PDU output into the PDU list that entity-state-to-records reads.opendis-decode
entity-state-to-recordsTransformmultipleConvert decoded DIS entity-state PDUs into entity-state records with geodetic positions.entity-state-to-records
entity-state-to-flightpathTransformmultipleBuild a flightpath channel with 3D trajectories for selected entities.entity-state-to-flightpath
entity-state-to-cognitiveTransformsingleScore cognitive load from gaze and pupillometry components with a bundled model and emit a timeline series.entity-state-to-cognitive
entity-state-to-adaptive-cognitive-loadTransformsingleScore cognitive load against a personal baseline from gaze, pupillometry and biometric records.entity-state-to-adaptive-cognitive-load
entity-state-to-flight-statsTransformsingleReduce one numeric field on one entity to min, max and average for a StatsSummary column.entity-state-to-flight-stats
cognitive-load-breakdownTransformsingleReduce a cognitive-load timeline to a duration-weighted score with time in each zone.cognitive-load-breakdown
entity-state-to-eyetrackingTransformsingleCompute the session-wide share of gaze direction across left, right, top and bottom zones.entity-state-to-eyetracking
entity-state-to-viewport-trackingTransformsingleCompute duration-weighted horizontal and vertical gaze distributions for the viewport tracking widget.entity-state-to-viewport-tracking
entity-state-to-lookoutTransformsingleDetect lookout scan events from fast gaze direction changes and emit an events channel.entity-state-to-lookout
tabular-to-dataserviceTransformmultipleBuild $heat-dataservice from tabular parents for dashboard-v2.tabular-to-dataservice

dashboard-tools

The dashboard-tools runner (container image dashboard-utils) filters JSON and publishes dimensions. Hub: dashboard-tools.

TemplateTypeInputsWhat it doesDetails
json-filterTransformsingleApply one JMESPath expression to a JSON parent and output the result.json-filter
ecs-transformTransformsingleMap entity component system (ECS) event JSON to legacy dashboard fragments.ecs-transform
opendis-parserTransformsingleParse OpenDIS PDU byte streams to JSON.opendis-parser
dashboardAggregationmultiplePublish a Legacy dimension from fixed v1 JSON keys.dashboard
dashboard-v2AggregationmultiplePublish a Next dimension from $heat-dataservice and a v2 layout.dashboard-v2
lattice-processorProcessingmultipleSummarise mixed binary uploads (archives and formats) into a report.lattice-processor
filter-payloadProcessingsingleGate uploads by an allowed list of content types.filter-payload
filter-nodeProcessingsingleValidate content type and optional schema after filter-payload.filter-node
session-triggerProcessingmultipleReprocess a target node in sessions whose metadata matches a search.session-trigger
heat-dataservice-mergeTransformmultipleMerge several $heat-dataservice payloads into one, joining realms by name.heat-dataservice-merge
session-metadata-enrichProcessingsingleCopy small key performance indicator fields into session metadata.session-metadata-enrich

system-utils

System-utils is the platform’s built-in runner, hosted inside the Core API. Its templates are registered from presets rather than a manifest. Several are platform reserved, which means a shipped system dashboard drives them and they are not meant for integrator templates. Hub: system-utils.

TemplateTypeInputsWhat it doesDetails
input-nodeInputsingleReceive uploads and store each one as a node output. Every upload-driven template starts here.input-node
capture-discoveryTransformsingleProfile capture uploads into a format and protobuf census with a discovery dashboard payload.capture-discovery
system-protobuf-extractTransformsingleExtract EntityDataEvent, EntityState or SimulationFrame records from capture uploads on the platform runner.system-protobuf-extract
system-tabular-to-dataserviceTransformsingleConvert every upload on one input node into $heat-dataservice plus an upload summary.system-tabular-to-dataservice
system-arbex-jsTransformmultipleRun sandboxed JavaScript over parent outputs, with native $heat-dataservice and layout helpers.system-arbex-js
heat-system-dataservice-envelopeTransformsingleBuild $heat-dataservice from declarative channel bindings over one parent JSON root.heat-system-dataservice-envelope
heat-system-next-dimensionAggregationmultiplePersist $heat-dataservice and create a Next dimension. Platform reserved.heat-system-next-dimension
heat-system-legacy-dimensionAggregationmultiplePersist v1 JSON and create a Legacy dimension. Platform reserved.heat-system-legacy-dimension
cluster-reportTransformsingleSnapshot Kubernetes cluster usage into JSON.cluster-report
cluster-usage-historyTransformsingleAppend bounded CPU and memory timelines from cluster-report snapshots.cluster-usage-history
heat-workspace-group-countTransformsingleBucket workspace items and emit bar series for the Resource Monitor.heat-workspace-group-count
project-metricsTransformsingleEmit project-level session count metrics as JSON.project-metrics
session-dimension-queryTransformsingleQuery sessions by dimension criteria and return grouped matches.session-dimension-query
node-output-queryTransformsingleList matching node output ids for bulk analytics ingest.node-output-query
system-bulk-tabular-writerTransformsingleLoad CSV and JSON outputs into the bulk analytics database and emit a catalog.system-bulk-tabular-writer
system-bulk-analytics-queryTransformsingleRun read-only SQL against the bulk analytics database and emit tabular JSON.system-bulk-analytics-query
node-output-index-sweepTransformsingleIndex stored output content (size, hash, media type) in a timeboxed sweep. Platform reserved.system-utils
session-exportTransformsingleStream a whole session, its template and every output into a downloadable ZIP. Platform reserved.system-utils
session-export-retentionTransformsingleExpire session export archives past their time to live. Platform reserved.system-utils

audio-utils

The audio-utils runner (container image runner-audio-utils) converts, measures and transcribes audio. Hub: audio-utils.

TemplateTypeInputsWhat it doesDetails
convert-to-pcmTransformmultipleDecode WAV, AIFF and AIFC uploads to PCM WAV with a per-file acceptance report.convert-to-pcm
audio-metricsTransformmultipleCompute duration, level and related metrics per accepted audio file.audio-metrics
generate-transcriptTransformmultipleRun speech to text over PCM audio, keyed by content hash.generate-transcript
voice-analysisTransformmultipleCombine metrics and transcript signals into one analysis document.voice-analysis

video-utils

The video-utils runner (container image runner-video-utils) prepares captured headset video for playback in the dashboard. Hub: video-utils.

TemplateTypeInputsWhat it doesDetails
adaptive-video-encodeTransformmultipleList the video streams a capture holds as a JSON catalogue. Catalogue only, it does not encode video today.adaptive-video-encode
video-atlas-encodeTransformsingleComposite admitted H.264 streams into one atlas and publish fragments plus a manifest for the VideoPlayback widget.video-atlas-encode

Project companion runners

Some programmes ship their own runners alongside the platform ones. A companion runner follows the same mechanics as every runner above. It registers a .heat manifest, declares node templates and claims tasks from the platform.

Companion templates are documented with their projects, not in this catalog. If a template name in a session template does not appear on this page, look in the project’s own documentation. To build a runner of your own, see Building your own runner.

Opens your browser's print dialog. Choose "Save as PDF" as the destination.