Signal K Storm Intelligence (signalk-storm-intelligence) is a multisensor severe-weather situational-awareness and research platform for Signal K. It combines shore-based weather-radar mosaics, lightning observations, Signal K Weather API observations, onboard environmental sensors, vessel navigation, and multiple independently pluggable inference algorithms to estimate storm-cell evolution and vessel-relative threat.
The project is designed around two simultaneous goals:
- Operational decision support aboard a vessel, including map overlays, approaching-cell warnings, offline radar playback, and a read-only operational dashboard.
- Reproducible scientific experimentation, where new deterministic, machine-learning, or LLM-based inference algorithms can be compared against exactly the same frozen historical evidence bundles.
Storm Intelligence is not a replacement for official warnings, competent seamanship, marine radar, or authoritative meteorological services. Risk scores and inferred impact times are decision-support outputs, not certified probabilities or guarantees of hazardous-weather occurrence.
This source tree is the 2.3.1 release line. Version 2 uses the application identity Storm Intelligence. The earlier weatherRadar Signal K Resource API remains available as a deprecated read-only compatibility alias during v2; new integrations should use stormIntelligence.
Weather information aboard small and medium vessels is often fragmented across independent applications: one service provides radar, another provides lightning, local instruments describe only conditions at the vessel, and forecast or observation services provide regional context. None of those sources alone answers the vessel-centric question:
Is an observed convective system approaching this vessel, when is the closest hazardous interaction expected, and how strong is the evidence?
Storm Intelligence treats that question as a multisensor inference problem. Upstream data remain provider-specific at acquisition time, but are normalized before inference. Algorithms operate on common evidence and may run simultaneously. The ensemble retains per-algorithm provenance so agreement and disagreement remain inspectable.
Radar mosaic providers Lightning providers
Radar-DPC Β· DWD Β· RainViewer point events Β· density fields
β β
ββββββββββββββββ¬ββββββββββββββββββββββββ
β
normalized observations
β
βββββββββββββββββββΌββββββββββββββββββββ
β β β
Signal K Weather API onboard sensors vessel navigation
observations wind/T/RH/... position/SOG/COG
β β β
βββββββββββββββββββ΄βββββββββββ¬βββββββββ
β
Storm Intelligence Runtime
β
ββββββββββββββββββββββΌβββββββββββββββββββββ
β β β
kinematic-polygon multisensor-evidence multimodal-dnn
β β β
ββββββββββββββββββββββΌβββββββββββββββββββββ€
β llm-openai-compatible
β β
βββββββββββ¬βββββββββββ
β
inference ensemble
β
hazards Β· tracks Β· threat state
β
βββββββββββββββββββββββ¬βββββββββ΄ββββββββββββ
β β β
Signal K alarms Freeboard-SK read-only WebApp
The central architectural rule is separation of concerns. Radar providers do not implement storm inference. Lightning providers do not know about Freeboard-SK. Inference algorithms do not own acquisition or storage. User interfaces consume normalized runtime state rather than provider-specific payloads.
The bundled radar-provider registry currently includes:
- Radar-DPC β Italian Dipartimento della Protezione Civile national radar products; supports raster mosaics and provider-native HRD severe-precipitation vectors where available.
- DWD β Deutscher Wetterdienst WMS products with provider time dimensions and observation/nowcast separation.
- RainViewer β REST-discovered, provider-native XYZ radar frames.
The generic radar contract supports both WMS-style BBOX rendering and native XYZ tiles. A fourth radar provider should require a new adapter under providers, not changes to the inference engine or user interfaces. See docs/radar-provider-specification.md.
Lightning is deliberately independent of radar. Observation providers may expose:
- timestamped point strikes;
- density/frequency fields for visualization or quantitative use when the upstream semantics support it;
- both capabilities.
Bundled adapters include a generic HTTP/JSON point source, Blitzortung-compatible point acquisition, and a configurable DPC LTG density adapter. Density imagery is never converted into synthetic point strikes. See docs/observation-provider-specification.md.
Storm Intelligence consumes the existing Signal K Weather API as an independent evidence source. It samples observations around the vessel and uses normalized weather fields such as temperature, relative humidity, pressure, precipitation, true wind and gust when providers expose them.
Weather-station evidence corroborates existing storm candidates; it does not independently manufacture a remote storm cell.
When present, standard Signal K vessel paths contribute local trends, including:
environment.wind.speedTrueenvironment.wind.directionTrueenvironment.outside.temperatureenvironment.outside.humidity
Pressure, gust and precipitation can be incorporated when available through normalized contexts. Local trends are corroborating evidence, not sole storm detectors.
Threat is vessel-relative. The runtime uses own-ship position, speed over ground and true course over ground to estimate closest approach and polygon/path interception over the configured horizon.
Inference algorithms are discovered from inference-algorithms. Each algorithm implements the common contract described in docs/inference-algorithm-specification.md.
Bundled algorithms are:
kinematic-polygonβ persistent storm tracks, robust motion estimates, uncertainty, CPA/TCPA and vessel-path/polygon interception.multisensor-evidenceβ lightning and environmental corroboration of existing candidates.multimodal-dnnβ a provider-agnostic pretrained feed-forward network using the normalized multimodal feature schema. The bundled reference model is intentionally disabled by default until validated on representative historical events.llm-openai-compatibleβ structured candidate refinement through an OpenAI API-compatible Responses or Chat Completions endpoint. It is disabled by default and cannot create a storm candidate when no primary candidate exists.
Algorithms can run together in one inference cycle. The runtime records execution status, latency, output count, model provenance and per-algorithm evidence. Supported ensemble strategies currently include max-severity and weighted-confidence.
Machine-learning and LLM inference are not granted special authority over deterministic methods. Their outputs remain attributable, bounded, and independently inspectable.
For polygon-capable storm products, the deterministic core maintains persistent track identities across frames and estimates motion from multiple observations rather than one displacement. Each track can expose:
- current geometry and representative centroid;
- observation history;
- motion speed and course;
- motion confidence and residual error;
- current range to the storm polygon;
- classical CPA/TCPA;
- projected vessel-path/polygon intersection;
- closest predicted polygon separation;
- uncertainty growth over the prediction horizon;
- lightning and environmental evidence;
- ensemble threat state and confidence.
The primary threat states are normal, warn, and alarm. Meteorological severity and vessel-relative threat are kept distinct: a severe storm far from and moving away from the vessel must not alarm solely because of its provider severity.
The plugin registers the following important Resource Provider surfaces:
stormIntelligence normalized status, providers, hazards and inference state
charts radar, lightning and storm-hazard map layers
plotterExtensions Freeboard-SK / compatible plotter extension
weatherRadar deprecated v1 compatibility alias, read-only
Notifications are emitted under configurable Signal K notification paths, including storm-cell and lightning proximity notifications.
The companion WebApp is classified as signalk-webapp and is strictly read-only. It provides operational health and a risk-ranked list of approaching cells at:
/signalk-storm-intelligence/
See docs/signal-k-integration.md and docs/operational-webapp.md.
The bundled Plotter Extension provides:
- radar-layer discovery, visibility and opacity controls;
- temporal radar playback using bounded frame-slot resources;
- storm-cell and predicted-envelope overlays;
- lightning overlays when configured;
- storm status and cell-location actions.
The extension uses published host capabilities such as chart.list, chart.setVisibility, chart.setOpacity, and map.fitBounds. It does not manipulate Freeboard-SK DOM or OpenLayers internals.
Public map tiles are exposed beneath:
/stormintelligence/signalk-storm-intelligence/...
See docs/freeboard-sk.md.
Radar acquisition is a server-side process and does not depend on a browser being open. The runtime distinguishes:
- archive β provider-native source products retained for scientific or operational processing;
- prefetch β rendered geographic tiles retained around the vessel operating area;
- replay β locally available historical frames;
- cache β transient performance acceleration.
Archive and prefetch stores have independent retention budgets. Rendered radar tiles are served local-first, and live mode may degrade to an explicitly stale local frame when upstream access fails. Historical replay never silently substitutes a different timestamp for an explicitly selected frame.
See docs/storage-and-offline.md.
Node.js 20 or newer is required.
From a source checkout:
npm install
npm run qualityFor a development Signal K installation:
npm link
cd ~/.signalk
npm link signalk-storm-intelligenceRestart Signal K Server and enable Storm Intelligence in Plugin Config.
For an npm tarball, install the package through the normal Signal K plugin workflow or add it to the Signal K installation's dependencies.
Configuration is deliberately capability-driven. Providers advertise what they can supply, and inference algorithms advertise their own settings. Provider-qualified products use identifiers such as:
radar-dpc:VMI
dwd:RAIN_RATE
rainviewer:COMPOSITE
The configuration schema covers radar display/acquisition, prefetch/recycling, temporal playback, storm thresholds, lightning providers, onboard sensor fusion, Weather API sampling, inference algorithms, and provider/model-specific settings.
Reproducibility is a first-class requirement. Algorithms intended for comparative research should be evaluated against frozen evidence bundles and must not retrieve live data during replay.
The reference historical case is the convective episode affecting the western coasts and seas of Italy during the night of 17β18 August 2026. The guide defines acquisition, checksums, provenance, normalization, event-level train/validation/test separation, ablation experiments, deterministic replay, LLM response capture, and publication requirements.
Start with docs/reproducibility.md. The normative provider and algorithm interfaces are in:
docs/data-provider-onboarding.mddocs/radar-provider-specification.mddocs/observation-provider-specification.mddocs/inference-algorithm-specification.mddocs/storm-intelligence-model.md
The bundled DNN is a reference integration model, pretrained on deterministic physically informed synthetic samples. Its synthetic validation score is useful for software verification, not a claim of operational meteorological skill. Any replacement model should include training provenance, feature schema, calibration/validation evidence, model checksum and limitations.
Remote LLM inference can transmit normalized vessel and weather evidence to the configured API endpoint. API keys are read from environment variables rather than persisted in plugin configuration. Hosted LLM calls are not assumed to be bit-reproducible; research experiments should capture validated structured responses and full non-secret request provenance.
See docs/multimodal-dnn.md, docs/model-card-stormfusion-reference-v1.md, and docs/llm-openai-compatible.md.
Storm Intelligence is research-oriented decision-support software. Important limitations include:
- radar mosaics can have coverage gaps, attenuation, anomalous propagation, beam-height limitations and provider outages;
- lightning networks differ in detection efficiency, location accuracy, access terms and event classification;
- weather-station observations may be sparse, delayed, quality-controlled retrospectively, or model-filled by downstream aggregators;
- onboard measurements depend on sensor calibration, installation and vessel effects;
- storm-cell association, linear advection and uncertainty estimates simplify real convective evolution, including split/merge, growth and decay;
- machine-learning performance is dataset-dependent and susceptible to distribution shift;
- hosted LLM behavior can change between model/service revisions;
- the operational risk score is a transparent ranking heuristic, not a probability of impact;
- inferred ETA is conditional on current vessel motion, current track estimates and the selected prediction model.
Official meteorological warnings and direct situational awareness remain authoritative for safety-critical decisions.
The repository provides deterministic unit/integration tests and opt-in live integration checks. The normal release gate is:
npm run qualityThis runs repository consistency checks, syntax validation and the complete deterministic test suite. Network-dependent checks are intentionally separate:
npm run live-check
npm run live-check:llm # requires explicit endpoint/model credentialsSee docs/testing-and-validation.md and AGENTS.md.
The complete documentation index is docs/README.md. Key documents include:
docs/architecture.mdβ architecture and trust boundaries;docs/storm-intelligence-model.mdβ evidence/hazard/threat semantics;docs/reproducibility.mdβ historical acquisition and reproducible replay;docs/security-privacy-licensing.mdβ secrets, privacy, provider terms and storage;docs/board-proposal-notes.mdβ implementation-derived candidates for future Signal K standardization.
The project is designed so new capabilities are added at explicit extension points:
providers/<id>.js radar mosaic provider
observation-providers/<id>.js point/density observation provider
inference-algorithms/<id>.js inference implementation
A contribution which requires provider-specific branches in the generic runtime, storage, Freeboard extension, or inference ensemble should be treated as an architectural regression unless there is a compelling documented reason.
Read AGENTS.md before modifying the project.
Apache-2.0 for the project source code. Upstream meteorological data, model weights, lightning feeds and third-party services remain subject to their own licences, attribution requirements and usage restrictions. Redistribution permission must be assessed separately for every data provider and research dataset.
