Signal → image
A live field drawn as if it were terrain, and terrain drawn as if it were film. Pressure, cloud and elevation go in; marching squares, splines and a scroll wheel turn them into something that holds still until the world moves.
Working notebook — real-time systems
Instruments, not pictures. Working experiments in real-time systems that turn live signals — weather, time, terrain, language — into images, sound and text. Built in the browser, in the open, in days: each one starts as a written brief, becomes a working piece the same day, and is then revised in public until it holds.
A live field drawn as if it were terrain, and terrain drawn as if it were film. Pressure, cloud and elevation go in; marching squares, splines and a scroll wheel turn them into something that holds still until the world moves.
A composition mixed by where the listener is standing: the position is the score. The next piece in this line listens rather than plays — hearing the world and answering in a voice, on the device, with nothing sent away.
A narrative engine that ran for seventy days and left 2.3 million words, and the archive it left treated as a live object that runs on the clock. Next in this line: the screenplay as a computational object — structure you can compute over, not only read.
A 1980 arcade cabinet reconstructed with no emulator, no engine and no assets — the projection, the models, the typeface and the sound all written by hand, so that every part of the machine is legible. The material of FMX 320, shown working.
One drawing that holds from Mercury to the nearest star — nine orders of magnitude on a single logarithmic line, everything at its measured place, today. The Eames problem, run as an instrument rather than a film.
Common constraint: everything here runs in the visitor's browser, from one file, with no account and no server state beyond a shared hourly weather cache. The larger systems being built alongside this notebook hold to the same rule — nothing leaves the machine that doesn't have to.
Scroll becomes a jog wheel. The page scrubs through 128 frames culled from Mont Blanc 360 Rotation (2013) — a ten-minute full-rotation animation reconstructed from ASTER GDEM elevation data, exhibited at Bleu Acier Gallery in First There is a Mountain. As the scrub passes every second frame, that frame pins into a contact-sheet grid behind the live image: an 8×8 sheet of sixty-four cells at exact 5.625° increments, the entire orbit of the mountain laid flat. Everything derives deterministically from scroll position, so scrolling back up un-builds the montage. In the final stretch the hero frame fades and only the completed compass rose remains.
A browser reconstruction of Moede (2016), a locative-audio artwork for the grounds of the North Carolina Museum of Art. The original iOS app faded a single composition in and out as you walked the site — thirteen GPS zones, each holding one synchronized stem of the same piece, mixed live by your position. Here the museum's satellite map is redrawn with all thirteen real zones as circle overlays; drag the listener across the grounds, or let it tour itself, and each stem's level follows the app's exact distance falloff — full inside the inner ring, silent past the outer — the whole track re-assembling around wherever you stand. The audio is the original 2016 session; the coordinates and radii are the app's own audio.json. Eight synchronized layers became thirteen distinct stems, one per zone.
The contour field from the studio site, given something real to be — and, since 27 August, nothing on it is decoration. The lines are isobars: every hour the page takes sea-level pressure from Open-Meteo at three hundred points on three nested lattices — the contiguous United States, Florida and the Gulf, and the thirty-five-station Tampa Bay grid — samples them with Catmull-Rom splines through the map's own projection, and draws a line every 2 hPa (4 from a distance), the tens heavier and labelled. The field is registered to the map and it holds still: when the hour turns, or fresh data moves it, the lines ease to their new positions over two seconds and hold again. A low in the Gulf reads as rings, and a tropical system crossing the state will read as the thing itself. Every ten minutes the page also samples the bay's thirty-five stations for cloud cover, wind, rain and temperature; cloud cover becomes a faint relief over the bay and the readings feed the panel. The marching-squares tracer is the one that draws the ASTER-derived Mont Blanc wireframes into the greggperkins.com hero — here it is a map, north up at true scale, with the University of Tampa marked by a crosshair. The cursor is a light, in the manner of the star-field on this site's front page: lines near it brighten, holding it still for three seconds burns a hole of clear sky into the cloud that heals over twenty, and passing it over a station reads that station out. The wheel zooms the map — the bay's shoreline from OpenStreetMap in gold, the University of Tampa in red, and, as you pull back to the whole country, the world's coastlines, borders, and the states and provinces of the US, Canada and Mexico from Natural Earth. The pressure comes through the site's own /api/ceiling, one call an hour shared by everyone who is watching.
In the gallery, The Heron — the animated installation in The Bird and The Song (2026) — ran a narrative engine that wrote one short sentence about the heron every twelve seconds, for seventy days, and read it aloud. This is all of it: 247,809 sentences, 2.3 million words, the word heron 114,556 times, from 28 December 2025 to 7 March 2026. The tome runs on the clock. The page picks one of the heron's forty-nine logged days for today and finds the sentence written at this time of day, Tampa time; from there the entries fire at their own recorded intervals, never slower than the gallery's twelve seconds. The timeline is the days, each bar the number of sentences it holds — click one to jump; ← → step; open any day as a chapter and read it whole, every entry timestamped. Nothing is generated here: the engine stopped on 7 March, and what it wrote is what you read.
Atari's Battlezone (1980) — the first-person wireframe tank battle — rebuilt from first principles: no emulation, no engine, no assets. The 3D is a hand-rolled projector with near-plane clipping over a toroidal plain; the tank, supertank, homing missile, saucer, pyramids and blocks are vertex-and-edge lists written by hand after the originals; the score panel is a vector stroke font, drawn in red because the arcade cabinet's monitor was black-and-white behind a red-and-green gel overlay. The mountains, the erupting volcano and the crescent moon hold their compass bearings; the radar sweeps at the top with the enemy as a blip — and, as in 1980, the saucer never shows on it. One shell in the air at a time, on either side. W A S D drives, the trackpad aims the gun in traverse and elevation, Space fires, Esc exits; missiles join the patrol at 3,000 points, supertanks at 10,000, a bonus tank at 15,000. One deliberate anachronism rides along: past 2,000 points, drones — X-frame quadcopters, hollow triangles on the scope — circle high overhead, then commit to a low FPV attack run at a point they lock the moment they dive. Elevate the gun and take them out of the sky, or dodge the locked run and catch them on the climb; standing still is how it ends. The obstacle field is dealt fresh from the date — everyone who plays today patrols the same sector — and the best runs sign the machine in three initials, kept in the browser. The engine hum, the report and the saucer's warble are oscillators, synthesized as the cabinet synthesized them.
An orrery is the old clockwork model of the Solar System — geared planets turning about a brass Sun to demonstrate their relative motions; the name remembers Charles Boyle, the 4th Earl of Orrery, for whom an early one was built around 1713. This one is drawn rather than geared, and in place of gears it has the actual sky: the eight planets, Pluto and Eris stand at the positions they hold today, computed in the page from the Keplerian elements JPL publishes — no API, no library, a hand-rolled Kepler solver and perspective projector in one vanilla file. Space is laid on a logarithmic line — each scale ring is ten times the last — so a single drawing holds from Mercury to Alpha Centauri, nine orders of magnitude, with light-times marked on the rings. Past Neptune everything is real and in its measured place: the belts as statistical fields, the heliopause, Voyager 1 and 2 at the distances they have actually reached — still gaining about three au a year, and they move when you scrub the date — the theorized Oort cloud, and the nearest stars. Drag to turn, scroll to travel, drag the date and the machine turns; click any named body — planet, spacecraft or star — and the eyepiece opens: its true color, its moons turning at their real periods, and three lesser-known facts — scroll deeper and it becomes a page, with the story and three more; or take the ride — one continuous pull-out, Mercury to another star, without a cut. Along the bottom: a timeline of discovery — scrub back and watch the solar system vanish from human knowledge, era by era; every milestone opens into its story — and a second tab, Time, draws the whole discovery of the cosmos as one page — every moment opening into its why, its facts, and the place it points to in Space. And press f to fly — WASD and the cursor, a drive through the drawing itself.
Every piece is vanilla JavaScript in one file — no framework, no build step — shipped by pull request the day it was briefed and revised in public afterward. Sources are named on each entry: Open-Meteo, OpenStreetMap, Natural Earth, ASTER GDEM, and the original session files. Coding agents work in the loop on a brief written by hand; every piece is deterministic, and everything it shows is sourced.
Students, current or prospective: this is what the work looks like before it is a syllabus — see FMX 430 Spatial Computing and FMX 320 Animation for Interactivity and Games.