Skip to Content
This documentation is provided with the HEAT environment and is relevant for this HEAT instance only.
RunnersCore UtilsHydrate Protobuf v2 Node

hydrate-protobuf-v2 (Transform Node)

The Hydrate Protobuf v2 node decodes HEAT capture data shaped as DataPacket / DataPacketBundle (see HEAT.Proto.Capture in the protolib), walks every nested packet, and extracts a single kind of simulation payload from each SimulationFrame: either the full frame, each EntityState, or each EntityDataEvent (from frame.events where the EntityEvent carries data_event).

Use this node when you need capture-aware extraction with stable envelope fields (parent input key, packet timestamps, origin_uuid, simulation tick/time) across all upstream parents. The original hydrate-protobuf node remains for Gaze, FolderUploadData, OpenDIS PDU, and its legacy SimulationFrame component flattening.


Capture hierarchy


Configuration schema

PropertyTypeRequiredDescription
extractionTargetstringYesOne of SimulationFrame, EntityState, EntityDataEvent.
outputFormat"json" | "csv"Yesjson: UTF-8 JSON object with a top-level records array. csv: scalar columns plus record_json (full row JSON) per line.
sortBystringNonone (default), simulation_time_seconds, or packet_timestamp_unix_ms for stable ordering after merging parents.
dataSourceNamestringNoOutput data source; defaults to the runner default_store when omitted.
enableUploadDeduplicationbooleanNoLogs output md5; full upload deduplication is not yet implemented. Default false.

Output shape (JSON)

The artefact is a JSON object:

{ "extractionTarget": "EntityState", "records": [ { "parent_input_key": "upstream-node-name", "payload_index": 0, "inner_packet_index": 2, "bundle_timestamp_unix_ms": null, "packet_timestamp_unix_ms": 1710000000000, "packet_timestamp_iso_utc": "2024-03-09T12:00:00.000Z", "origin_uuid": "…", "simulation_tick": 42, "simulation_time_seconds": 1.5, "capture_time_timestamp_ms": null, "capture_time_iso_utc": null, "capture_time_timezone_offset_minutes": 0, "extraction_target": "EntityState", "entity_state_index": 0, "entity_state": { } } ] }

For EntityDataEvent, each record follows the existing event dictionary layout from the decoder (event_category, event_type, event_data, …) plus the same envelope fields merged in.


Example configuration

{ "extractionTarget": "EntityState", "outputFormat": "json", "sortBy": "simulation_time_seconds", "dataSourceName": "my-store" }

Inputs and outputs

  • Inputs: All parents are merged. Each parent contributes a list of binary DataPacket payloads (same wire format as v1).
  • Output: One JSON or CSV artefact. Unlike v1, every parent key in fetch_all_inputs is processed, not only the first.