two bodies — a note by the sea
What you're seeing
Every five minutes, a small computer reaches out to a weather station on Utö — a tiny island at the edge of the Finnish archipelago, where the Baltic Sea begins to open. It asks: what is happening right now?
The station answers in numbers. Water temperature. Salinity. Dissolved oxygen. Wave height. Wind speed and direction. How much light is reaching the surface. Whether the CO₂ in the water is rising or falling.
These numbers enter a pipeline. A perceiver looks for what is noteworthy — trends, anomalies, threshold crossings — and assigns significance. A coupling perceiver then asks whether anything the sea is doing lines up with something the artist's body is doing, along a real physical mechanism: gas exchange, heat transfer, rhythm, osmosis, light, agitation, pressure.
An assembler then reaches into a small library of sentences the artist has already written — a somatic interview, an address-the-sea pool, ecology fragments — and surfaces the two or three that fit the moment. It does not generate the language. It surfaces what has been written.
The text appears on a water surface rendered in your browser. The same data that drove the words also drives the waves — their height, their speed, their direction. The text floats on the water it describes.
The pipeline
Every five minutes two streams flow through the same machine. From FMI Utö and Copernicus Marine comes the sea: temperature, salinity, oxygen, waves, wind, chlorophyll, pCO₂, currents. From a Garmin watch on the artist's wrist comes the body: heart rate, breath, stress, sleep, body battery, blood oxygen, respiration.
Each stream has its own perceiver that asks what is noteworthy? — across four time scales (fast, diurnal, slow, seasonal), all detected by the same body-agnostic math. The two streams then meet in a coupling perceiver that reads a table of physical links — the actual physics that connect the two bodies. This table is the piece's honesty fence: a sea event and a body event are only allowed to appear side by side if a real mechanism connects them.
An assembler — pluggable, no language model in the live pipeline — reads the ranked phenomena and the coupling state, and pulls sentences from three pools the artist maintains by hand: body state (first-person), address / contact (the observer's voice to the sea), and ecology fragments (impersonal standing context). It picks the person by distance, not by style. It does not compose. It surfaces.
sea data body data
(FMI Utö + Copernicus) (Garmin via garth)
│ │
▼ ▼
sea_perceiver body_perceiver
phenomena + significance phenomena + significance
│ │
└───────────────┬───────────────────┘
▼
coupling_perceiver ← physical_links.yml
difference · synchrony
ratio · distance · contact
│
▼
context_builder → linkage_resolver
│
▼
RetrievalAssembler ← sea_register.yml (you / we)
fallback ladder ← body_voice.yml (i)
person by distance state ← ecology_fragments.yml
│
▼
narrator_output.json → web visualisation
narrator_archive.json
narrator_logs/<ts>.txt
The water
The water surface is a real three-dimensional mesh with wave displacement — three long-wavelength swell components driven by the live wave direction and height, plus a fluid simulation running in the browser that advects particles across it. Wind direction and speed drive the flow. Chlorophyll and phycocyanin tint patches of the surface. Real solar radiation lights the scene from the correct sun angle for the time of day at Utö's latitude.
Granite boulders scatter across the water. Algae particles cluster on their surfaces (biomass has substrate). The narrator's text is painted directly onto the water surface as a swarm of particles that ride the wave shape and fade in and out as they respawn — text made of water, dissolving with it.
The data
Sea data comes from the Finnish Meteorological Institute's autonomous observation station on Utö (59.78°N, 21.37°E) — which has measured the Baltic Sea continuously since 1900 — and from Copernicus Marine Service (currents, sea surface temperature, mixed layer depth, oxygen and chlorophyll from BGC, plus Sentinel-3 OLCI bloom imagery). Body data comes from a Garmin activity tracker via the garth API.
The Baltic Sea is a shallow, brackish inland sea under severe ecological pressure. Eutrophication, deoxygenation, warming, and changing salinity patterns are transforming it. The data this piece reads is not abstract — it is a record of a body of water in crisis, still alive, still speaking.
The voice — one voice, three persons
There is exactly one voice in this piece: the observer's. The sea has no voice. The narrator-machine has no voice. The observer speaks in three grammatical persons that function as a distance scale, not stylistic variation:
- i — always. The body speaks first-person, its sensations, its lived state.
- you — apart. The observer addressing the sea across the gap, owned as projection.
- we — contact only. Earned by being in the water. Never assumed.
The pronoun is set by the actual spatial and epistemic distance between the observer and the sea — kilometres of geometric separation, hectopascals of atmospheric difference, and a declared contact flag the artist raises with a single tap when entering the water. It is not a mood or a register. It is a reading off the distance.
The narrator IS the field observer. The body enters as first-person condition, not as raw data. No heart-rate numbers appear in the text. The body shows up in sentences the artist wrote about it, surfaced when the moment fits.
The second body
Alongside the sea data, a second stream reads the artist's own body through the watch. A perceiver detects what is salient across the same four time scales as the sea. A coupling perceiver then asks whether any of it lines up with what the sea is doing along a real physical mechanism.
What the audience sees is not the body's numbers. It is the body's condition, in the artist's own words, surfaced when it connects to something the sea is doing. Two bodies — the sea and the observer — held next to each other only where physics allows the pairing.
The trips · the residencies · what makes the corpus
The library the assembler reads from is not curated code — it is the artist's own writing. It grows out of trips to the water: kayaking summers around the archipelago, residencies on Seili and Vartiosaara, long sessions of somatic interview back on land. Field notes and journal entries. Sentences said out loud while sitting on a rock and written down later.
Each residency deposits new material into a corpus directory in the piece. When a session on Seili produces the sentence my feet have memories of this temperature, that sentence enters the assembler's pool for the temperature parameter. It waits there, unchanged, until the sea's temperature does something the perceiver considers worth naming — and then it surfaces, next to whatever the sea is doing at that moment.
The piece therefore is not a snapshot. It is a slow accumulation of the artist's writing about the sea, published as the sea keeps changing. Every trip adds sentences. Every future composition can reach for them.
What's next · Phase 4
The current live pipeline is the retrieval assembler: it selects and juxtaposes existing sentences. The roadmap includes further phases that read the same corpus differently.
The most anticipated is Phase 4 — QLoRA: a small language model fine-tuned on the artist's own corpus. The QLoRA-adapted model would generate new sentences in the artist's voice, but constrained by the same physical-links table the assembler uses today. The fence stays. The model may only speak along mechanisms that actually connect the two bodies. What changes is that new language becomes possible on nights the corpus has already been fully read.
Phase 4 will not replace the retrieval assembler. It will run alongside it, reachable per shot: a shot where fidelity matters uses retrieval; a shot where discovery matters uses the fine-tuned model. When the model is training, the piece enters the dreaming state. When it has nothing new to say and the retrieval pool is dry, the piece rests. Silence is a designed output, not a failure.
phenomena + coupling + shot context
│
▼
┌──────────────────┐
│ ContextBuilder │
│ n · weights · │
│ register · mode │
└────────┬─────────┘
│
┌───────────────┬───────┴───────┬────────────────┐
▼ ▼ ▼ ▼
[ Phase 1 ] [ Phase 2 ] [ Phase 3 ] [ Phase 4 ]
Retrieval Embedding Cut-up Generative
yaml lookup nearest- clause-level QLoRA on
by phenomenon neighbour recombination Roberto's
+ significance in fragment of the corpus,
embedding corpus fenced by
physical_links
│ │ │ │
│ │ │ │
── LIVE ── roadmap roadmap roadmap
(small model) (needs corpus) (autumn)
│ │ │ │
└───────────────┴───────┬───────┴────────────────┘
▼
fragments juxtaposed
(no glue, reader connects)
▼
narrator_output.json
Credits
Roberto Fusco — artistic direction, data pipeline, visualization, corpus
FMI (Finnish Meteorological Institute) — Utö station data since 1900
Copernicus Marine Service — PHY, BGC, OLCI
Built with WebGL / Three.js and a small Python pipeline. Runs on a Raspberry Pi every five minutes. Hosted on Infomaniak.
two bodies — a note by the sea is part of Roberto Fusco's ongoing artistic research into environmental data, embodied experience, and computational narration.