intora.net

SIGNAL ANALYSIS: INT/002 — STATION

═══════════════════════════════════════════
CLASSIFICATION: OPEN · DATE: 2026-02-19
ANALYST: INTORA SYSTEMS
VERSION: 1.0

01 — CONCEPT

A number station intercept. Somewhere on the shortwave band, a coded transmission is broadcasting to an unknown recipient. You have tuned in. For approximately forty-two seconds you watch structure emerge from noise — digits freeze into groups, groups resolve into a message, and then the signal degrades and is lost. The next cycle, a different frequency, a different message. You are always too late and never quite sure what you witnessed.

Where INT/001 DRIFT explored organic flow — currents, turbulence, dissolution — STATION is its structural inverse. Rhythmic. Gridded. Cold War cryptographic. The noise here is not Perlin; it is the static between stations, the random digits of a one-time pad. Structure does not emerge gradually — it snaps into place, holds for a transmission window, then collapses. The atmosphere is not natural but institutional: someone built this signal, and someone else is trying to read it.

02 — TECHNIQUE

Randomness Model

No simplex noise. STATION uses a seeded PRNG (mulberry32) for cycle reproducibility — each seed determines which message is selected and what digit sequences fill the transmission groups. A separate fast PRNG drives per-frame randomness for the scanning noise floor. The result is pure randomness shaped by phase logic, not spatial coherence. Every cell is independent. Structure comes from the code, not the noise.

Character Set

The grid is populated exclusively with numeric digits (0–9) during most phases. During the decode phase, cells in the message zone spin through the full printable ASCII range (charCodes 33–126) before settling on the decoded character — a visual echo of a cipher machine cycling through possibilities. Decoded messages use uppercase Latin characters, numerals, and directional symbols (N, S, E, W for coordinates).

Radial Gradient Clearing

The key rendering challenge: making structured groups visible against a dense numeric background without sacrificing atmosphere. Global approaches (sparse backgrounds, uniform dimming) all destroyed the noise field that gives the piece its character. The solution is localised colour separation — a radial gradient around each revealed group.

When a transmission group appears, the Euclidean distance from every background cell to the nearest group center is computed. A six-step gradient maps distance to colour: cells within one unit of a group render near-invisible, graduating back to normal noise brightness at five units. The result is a localised clearing that forms around each group — like radio interference pushing the static aside. The dense noise field remains everywhere the signal is not.

  ████ ████ ████ ████ ████
  cleared  gradient  noise  groups  decoded
Performance

Same colour-batched canvas rendering as INT/001. Cells are grouped by colour, fillStyle is set once per colour per frame, then all cells of that colour are drawn in a single pass. Canvas state changes stay in the single digits per frame regardless of grid density.

03 — CYCLE BEHAVIOUR

Each cycle runs approximately 42 seconds and transitions through six phases. A new seed is generated per cycle, selecting a fresh message and digit sequences. The phase system is driven by elapsed time — no external triggers, no interaction. You are an observer intercepting a broadcast that does not know you are listening.

SCANNING0–6sPure noise — rapid digit churning, searching for signal
LOCK6–11sCells freeze progressively from center outward, colours warm
TRANSMISSION11–23s5-digit groups appear sequentially in centered block
DECODE23–31sNumbers transform to reveal message — character spin effect
CORRUPTION31–37sSignal degrades, message corrupts, structure dissolves
LOST37–42sCells blank out, sparse remnants — SIGNAL LOST

04 — ITERATIONS

v1 — Full density, uniform colour

Initial implementation rendered every cell at standard palette intensity across all phases. Transmission groups were present but visually invisible — the signal drowned in its own noise floor. The grid read as a uniform wall of equally-bright digits. However, this version had the strongest atmospheric quality — the density and uniform colour created a convincing impression of shortwave static. Something important was happening, even if you could not quite see what.

v2 — Sparse background (~18% density)

Attempted contrast by culling ~82% of background cells during transmission and decode. Bounding box blanking created structural gaps between groups. Groups became clearly visible against near-empty space, but the atmospheric density that defined the scanning phase was gone. The grid felt hollow. The sparse approach treated the noise as something to remove. It is not.

v3 — Colour dimming with bounding box

Full cell density restored. Background cells dimmed to near-background palette tones (surfaceRaised, border). A blanked bounding box around the transmission zone created clear structural separation. Groups were readable but the blank rectangle carved a visible hole in the noise field — the piece felt divided into zones rather than unified.

v4 — Colour dimming, no bounding box

Removed bounding box blanking. Noise flows right up to groups, contrast is colour-only. Better than v3 — the field feels continuous. But the aggressive dimming of background cells changed the character of the piece. The dark noise floor made the grid feel empty despite being full. The transition from bright scanning to dim transmission was too sharp a tonal shift. Returned to v1 as baseline.

v5 — Radial gradient clearing + message blink

The breakthrough. Instead of dimming the entire background, only the noisenearest each revealed group fades toward the background colour. A six-step gradient radiates outward from each group center — near-invisible at 0–1 cells, graduating back to normal noise brightness at 5+ cells. The effect resembles a radio interference pattern: localised clearings form around each group while the dense noise field remains everywhere else. Full atmospheric density is preserved; the signal creates its own space.

After the decode sweep completes, the message blinks at 500ms intervals — alternating between the decoded text in accent orange and the original encoded digits in primary text colour. The flicker between decoded and encoded states mirrors the uncertainty of an intercepted transmission: you are never quite sure which version is real.

GRADIENT (distance from group center)
  0–1 cells ···· #252019  near-invisible
  1–2 cells ···· #2D2720  very dark
  2–3 cells ···· #3A3228  dark
  3–4 cells ···· #4D4438  medium-dark
  4–5 cells ···· #6A6050  approaching subtle
  5+ cells ····· textSubtle  normal noise
SHIPPED — This is the current rendering approach. The combination of localised gradient clearing and message blink achieves both atmospheric density and signal legibility without compromise.

05 — CURRENT PARAMETERS

GRID
  cell_width ········· 14px
  cell_height ········ 20px
  font_size ·········· 14px
  chrome_rows ········ 2 (status line)

TIMING
  digit_change ······· 80ms (~12 changes/sec)
  scanning ··········· 6,000ms
  lock ··············· 5,000ms
  transmission ······· 12,000ms
  decode ············· 8,000ms
  corruption ········· 6,000ms
  lost ··············· 5,000ms
  total_cycle ········ ~42s

TRANSMISSION FORMAT
  group_size ········· 5 digits
  group_gap ·········· 1 cell
  row_gap ············ 1 row
  layout ············· centered block, computed per message

MESSAGE POOL (16 messages)
  coordinates ········ 6 (Berlin, Bletchley Park, UVB-76, Leningrad, DC, Munich)
  designations ······· 5 (ECHO 7, CARDINAL, NIGHTWATCH, FULCRUM, OPUS 3)
  phrases ············ 5 (THE WATER REMEMBERS, ALL SIGNALS ARE FINAL, ...)

RADIAL GRADIENT
  steps ·············· 6 (near-invisible → normal noise)
  inner_radius ······· 0–1 cells (#252019)
  outer_radius ······· 5+ cells (textSubtle)
  computation ········ Euclidean distance to nearest group center
  blink_interval ····· 500ms (decoded ↔ encoded)

CHROME
  status_line ········ phase indicator + progress bar
  frequency ·········· 4625.00 kHz (UVB-76 "Buzzer" frequency)
  scanning_freq ······ -----.-- kHz (no lock)

AUDIO (Tone.js)
  static ············· bandpass-filtered white noise + AM modulation
  carrier ············ sine oscillator, phase-synchronised
  beep_markers ······· per-group during transmission
  decode_pitch ······· carrier frequency rises during decode
  corruption ········· chaotic modulation
  lost ··············· silence

06 — AUDIO

STATION is the first piece in the INT Series with audio. The shortwave radio atmosphere is constructed in Tone.js and synchronised to the phase cycle. Audio is muted by default — the piece works as a purely visual experience. Unmuting adds a layer that transforms the grid from abstract pattern into intercepted broadcast.

Phase Synchronisation
SCANNING — Shortwave static dominates. Bandpass-filtered white noise with slow AM modulation. The sound of tuning across an empty band.
LOCK — A carrier tone (sine oscillator) fades in beneath the static. Signal acquisition — the moment you find the frequency.
TRANSMISSION — Beep markers sound with each group reveal. The carrier holds steady. Static drops to a low murmur. Classic number station cadence.
DECODE — Carrier pitch rises as the message resolves. Static textures shift. The signal is being processed.
CORRUPTION — Chaotic modulation. The carrier warps. Static surges. The signal is breaking apart.
LOST — Silence. The frequency is empty. Nothing remains.

07 — DEPENDENCIES

tone ············ shortwave audio synthesis (Tone.js)
mulberry32 ······ seeded PRNG for reproducible cycles (inline)
canvas 2d ······· browser-native rendering
geist mono ······ monospace typeface