Back to Drone Zone — deep field
SOURCE / PINNED RELEASE

Made of little things.

Drone Zone — deep field

Release
578f277a8be1
Author-recorded commit
a96742b428de…
License
LICENSE
Author’s source reference
nostr://npub1n8ga89w8h6tvwamxusfyzexw8gjy84yxu9rxgnmk955cxtml4ujswzxydd/wss%3A%2F%2Fgit.napplet.soy%2F/n-9753e6cf3ec

Archive hash verified: f7f3bf8ff3482551. The source-to-build association is the author’s claim; it has not been independently rebuilt.

README.md
# Drone Zone · deep field

An interactive space artwork inspired by the supplied galaxy image, intricate science-fiction instruments, and ambient radio. The image is folded into straight-edged planes; independent stars, 65 gently sweeping highways, three-dimensional orbital systems, traveling signals and 20 observation sites drift above it.

## Explore

The opening tour slowly follows the principal highway. Dragging, scrolling, zooming or choosing an observation hands the camera to you. Use **↝** to resume the tour. Reduced-motion preferences start with the tour off.

- Drag or scroll in either direction to move. Arrow keys work when the artwork is focused.
- Pinch, Ctrl/Meta + scroll, or use **+ / −** to zoom. Magnification stays between 0.55× and 3.60×.
- Select a beacon, or use **Observe**, to explore 20 annotations and track discoveries. Pan farther into the field to find orbital gardens, receivers, archives and marked hypertravel gates. Zoom closer for route IDs, shaded orbiting bodies and finer instrument traces. Rare highway gaps trigger a small entry flash and 22× transit speed; the highways continue beyond the navigable field.
- Six planetary systems each borrow one nearby highway lane. The detour follows a moving planet in three dimensions and rejoins the highway smoothly. Three detours include hypertravel gates; some highway gaps span 3–4× the original distance.
- **Ⅱ** freezes movement; **⌖** returns to the origin; **≋** controls the field layers.
- Under **≋**, **VHS / tape wear** adjusts the whole diorama's scanlines, grain, tracking slips and color separation. **Glitch pulse** triggers a brief slip; zero wear turns the treatment off. Freeze holds the tape motion too, and reduced-motion preferences disable the treatment.
- The runtime's Settings panel adjusts drift, star density, haze, optical distortion and tape wear. Changes there persist through the host; the in-scene slider is for live experimentation.

The coordinates and signal paths are an imagined atlas. The scientific annotations are physical constants, not measurements of this photograph. The original supplied file lives at [src/assets/galaxy_1.jpg](src/assets/galaxy_1.jpg) and is embedded in the build. The four additional supplied PNGs in the same folder fill the optical callouts at their native aspect ratios. All five images are bundled; the napplet does not load external runtime assets.

## Radio and the host boundary

The exact supplied NIP-19 address resolves to a kind 31237 station. The napplet uses `common.decodeNip19` when present and an independently decoded public coordinate as a fallback. `outbox.query` retrieves the newest matching event; Wavefunc's relay is a routing hint handled by the runtime. The station's JSON stream list supplies the audio URL, MIME type and bitrate.

As soon as the station resolves, playback starts through `media.createSession({ owner: 'shell', autoplay: true, ... })`. Use the player to pause, resume or adjust volume. Refreshing station metadata preserves a deliberate pause. If the browser blocks audible autoplay, the host presents its sound-activation control; the napplet does not repeatedly request playback. The artwork never opens a network connection or pretends that a stream is playing.

**Preview host capability:** the restarted soyLI 0.8.0 sandbox exposes shell-owned MEDIA. The real station resolves, playback reports “Live transmission · 256 kbps”, and pause reports the paused state. Hosts without MEDIA offer a shell-mediated link to the station in Wavefunc.

All domains are optional: `outbox`, `common`, `media`, `link`, `theme`, `config`. No relay escape hatch, signer, account, publishing operation or persistent app state is needed. There are no hard `requires` entries. Runtime colors apply to the whole UI surface; the photographic content keeps its own palette.

## Develop and verify

See [docs/napplet-space.md](docs/napplet-space.md) for the installed soyLI mapping. This project is already scaffolded and its napplet skills are installed. In other environments the upstream installer is `npx skills add napplet/napplet`.

```sh
soyli dev --no-open --port 4183
pnpm type-check
pnpm build
pnpm test:guidance
pnpm test:conformance
node tests/browser-smoke.mjs
soyli check
```

The soyLI URL is the sandbox preview. Raw Vite serves source without a napplet runtime.

The photographic highlights retain their brilliance above muted shadows. Two banks of neighboring background slices frame a clear central opening. Their irregular widths and heights fade outward and vertically, while each slice gently shifts its part of the photograph up and down. Thin instrument controls share the map annotation palette in dark and light themes. The renderer uses a bundled WebGL shader and Canvas 2D overlays, with a photographic Canvas fallback when WebGL is unavailable. A final tape treatment covers the photograph, geometry, annotations and player together. Reduced-motion preferences freeze the field initially. Rendering stops while hidden; media sessions, subscriptions and GPU resources are released on teardown. The single-file artifact is approximately 4.8 MB, mostly the five supplied images.

Browser integration checks cover four frames (`200×160`, `320×560`, `900×600`, `2400×1200`) in both themes, controls, bounded zoom, observations, optional-domain absence, denied playback, live settings/theme updates, reduced motion, fallback rendering and cleanup. Their media runtime is a test fixture, not an actual radio player. Reference conformance checks report manifest, wire and lifecycle skips when evidence is not supplied.

See [docs/build-spec.md](docs/build-spec.md) for the implementation boundary and [docs/verification.md](docs/verification.md) for the checked results.