WHAT IS THIS?
A glass ball painted by numbers. The number π = 3.14159265… goes on
forever, and nobody can predict its digits. This machine reads those
digits, one small handful at a time, and turns each handful into one
glowing dot inside the ball. You choose the rules; the number does the
painting. There are no wrong answers here — you are the author.
HOW A DOT IS BORN
The ball's skin is covered in about 200,000 tiny cells. Each cell
reads 5 digits: two say how deep its dot sits (00 = the very
centre, 99 = the skin), one picks the colour, one the
brightness, and the last digit decides whether the dot appears at
all — small digits mean no dot, which is why the ball has airy
gaps instead of grey mush.
THE KNOBS
- SOURCE — which endless number does the painting: π, e, √2 and
friends, C₁₀ (a number that counts: 1 2 3 4 5…), CE (all the prime
numbers glued into one endless number), SQ (the square numbers
1 4 9 16 25… glued together), f∞ (a 0-and-1 pattern that never
repeats, built from the same golden rule as the ball's skin), or RND (a
repeatable "random" — its SEED picks which random universe you get).
- SPLICE — weave two or three numbers together like braided hair.
- MODE — EPOCH shows a whole ball at once and can flip to the next
"page" of digits; BEAM paints dot by dot with a little moving head, like a
plotter drawing.
- CUTOUT — more threshold, more empty space.
- MOTION — gives every dot its own orbit, so the whole ball swirls.
- ▶ / ⏸ — the round button on the picture starts and pauses the
action, any time, without opening the panel.
ON A PHONE
Drag with one finger to turn the ball, pinch with two to zoom. The ☰
button opens the control panel and ✕ tucks it away again. If the sound
goes quiet after your screen has slept, one tap anywhere brings it back.
MAKE IT SING
Tick VOICE and the ball plays its digits as music. VOLUME voicing
sings the dots (gaps become silence, deep notes sound dark and near ones
bright); SURFACE sings every cell. Try the SCALE, WAVE and ECHO knobs to
change the instrument, and TOP-DOWN order to make the melody rain from the
top of your screen. The little amber flash shows which dot is singing.
THE NUMBER RIBBON
The strip at the bottom shows the actual digits being used right
now. Colours tell you each digit's job (the key sits at the strip's top
right). Click any group to see exactly how those digits made their dot —
and hear its note.
KEEP IT · SHARE IT
SAVE remembers your creation on this computer (it returns when you come
back). SHARE opens a little window with a link that regrows your creation
anywhere — copy it, email it, or send it with your phone's own share
sheet. The link stores your recipe, not a picture, so it is only a
few hundred letters long. FILM records a movie, REC records the sound.
THINGS TO TRY
- Switch SOURCE between π and C₁₀ — one looks like confetti, the other
grows stripes and shells. Both are "normal" numbers. That difference is
the whole mystery.
- BEAM mode + PAINTED surface, INTERIOR off — watch the skin being woven.
- MOTION on + VOICE on + TOP-DOWN — a swirling, singing rainstorm.
- A/B TWIN — can you tell π from fake randomness? (Nobody can.)
- f∞ only speaks in 0s and 1s, so its dots hug a few inner shells and
most of the ball goes dark — but slide CUTOUT around and watch golden
spirals appear that no other number can make: the number and the ball's
skin are built from the same golden ratio, and they interfere.
- CE looks like C₁₀'s stripes gone weathered — the counter skips
because primes do. And its gaps hide a real secret: neighbouring primes
avoid ending in the same digit, so the voids avoid clumping in a way no
RND seed can fake.
- SQ is C₁₀'s cousin that counts in squares: the stripes stretch
(squares grow new digits twice as fast), and every square must end in
0, 1, 4, 5, 6 or 9 — so wherever a square's last digit lands on a job,
that job inherits the comb.
THE FAMILY
DigitHorizon is the fifth machine in a family that all ask the same
question — can you tell a famous number from randomness? The others:
NormalNumber ·
UniverseSignal ·
GeometrySignal ·
DigitLoom
THE HOLOGRAPHIC PREMISE
Black-hole thermodynamics says a region's maximum entropy scales with
its surface area, not its volume (S = A/4 in Planck units). This app
enacts that as budget honesty: a boundary of N ≈ 4πn² cells is all the
information there is; the interior is reconstructed — each cell
projects one point inward along its own radius. A volume at the same
resolution would need ~n³ digits no genuine constant can supply. This is a
radial projection with the right entropy scaling, not AdS/CFT bulk
reconstruction (which is non-local over the whole boundary) — the app never
claims otherwise.
THE BOUNDARY LATTICE
Cell i of N sits at the Fibonacci sphere point:
y = 1 − 2(i+½)/N, θ = i·2π(2−φ) — near-equal-area
(a lat/long grid would oversample the poles, a visible density lie), closed
form at absolute position, and the golden spiral is the raster order the
BEAM head walks. Equivalent radius n ≈ √(N/4π).
THE DIGIT PIPELINE
Cell i reads the contiguous group at address
epoch·N·DPC + i·DPC. Group order: depth 2 (t = d/99 → r = t·n
PROJECTED, or ∛t·n UNIFORM — linear depth piles density as 1/r², the
emergent core), hue 1 (36° steps), brightness 1, cutout 1 (digit/9 ≥
threshold paints, else the cell projects nothing), then optional sat 1,
size 1, motion 3. DPC runs 5–10; the budget box recomputes live.
projectCell(i, N, base, out, tap) is pure — deterministic in
(digits, recipe, position); no Math.random anywhere in the paint path.
SOURCES & STREAMING
π, e, √2, φ (8M digits) and ζ(3) (2M) ship as packed-nibble assets (2
digits/byte, high nibble first), head-validated, fetched by HTTP Range in
256 KiB chunks only as the address stream needs them — never fully
resident; wraps counted and announced. C₁₀ (provably normal) computes any
digit by closed form over the counting sequence. CE (Copeland–Erdős,
provably normal) concatenates the primes — no closed form exists, so a
forward segmented sieve grows an index (a checkpoint every 2¹⁴ primes)
and one segment is re-sieved and decoded on demand: computed, never
stored whole; the budget box reports the frontier. Prime last digits past
5 are only {1,3,7,9}, so the default cutout paints exactly the 7s and 9s —
and consecutive primes avoid repeating last digits (Lemke Oliver–
Soundararajan 2016), an anti-correlation no counter hash reproduces.
SQ (Smarandache — the squares; normality conjectured, NOT proven, and
the budget box says so) shares C₁₀'s closed form:
⌊√(10^d−1)⌋ − ⌊√(10^(d−1)−1)⌋ squares have d digits, so the band walk
skips straight to m and the digit falls out of m² — exact Numbers to
10¹⁵, BigInt beyond. Square last digits are the quadratic residues
mod 10, only {0,1,4,5,6,9} — a lawful comb wherever they land.
f∞ is the Fibonacci word
(fixed point of 0→01, 1→0; deliberately NOT normal): any digit by exact
descent of the concatenation tree Sk = Sk−1Sk−2
— no floating-point φ, no drift at large addresses. Its 1s sit at Beatty
positions ⌊kφ²⌋, quasiperiodic with the same ratio the boundary lattice
spirals by — the one source that can moiré against the sphere. Binary
digits mean depth reads only 00·01·10·11: the dots live on four shells,
and CUTOUT paints exactly the 1s (density 1/φ² ≈ 38%). RND is a counter hash:
digit(i) = h(seed, i) — deterministic, absolute-position, shareable. The
A/B twin's control reads the same addresses through seed⊕0xA5A5.
THE SPLICE
A braid of T ≤ 3 threads presents as one tap. CELL grain: block b
belongs to thread b mod T, reading that thread's own stream at block
⌊b/T⌋. DIGIT grain: digit w of cell e comes from thread (e+w) mod T — the
rotation stops any thread being locked to one property role; each
contributes exactly DPC digits per period T·DPC. Honest braid length =
T·DPC·min⌊lent/DPC⌋ over bounded threads.
MOTION
Two digits pick an orbit axis from a 100-direction Fibonacci lattice;
one digit a quantized angular speed ω = (d/9)·rate (0 = still). Orbital
rather than linear because a straight velocity exits the sphere and would
need wrap/bounce rules the digits never chose; rotation preserves radius
(the core stays the core) and every path is exactly periodic. Rodrigues
rotation runs in the vertex shader from per-point (axis, ω, birth)
attributes; the clock consumes no digits. Picking, markers, flashes and
TOP-DOWN order all evaluate positions at current orbit time.
THE VOICE
No extra budget: the voice re-reads each cell's group. Pitch: depth
digits → degree over the chosen scale spanning two octaves from
110·2^(root/12) Hz. VOLUME voicing: cutout voids rest; velocity ×(1−0.45r);
low-pass 500+4500r Hz (core loud/dark, rim quiet/bright); pan = the cell's
x. SURFACE sings every cell. EPOCH: a voice head walks the spiral (or the
TOP-DOWN sort: cells counting-sorted into 1024 bands by height along the
camera-up axis, re-sorted as the view or orbits drift). BEAM: the voice
sings the last-painted cell; PAUSE silences because frozen heads consume
nothing. ECHO is a 0.28 s feedback delay on the master bus; REC (WAV) and
FILM (WebM+Opus) tap that bus, so they capture what you hear.
THE TRACK & PROVENANCE
Every dot has a computable stream address, so the strip is a window
over a formula, not a log. Digit colours (key at top right):
depth ·
hue ·
brightness ·
cutout ·
sat ·
size ·
orbit; under a
splice, badge bars beneath each digit name its thread. Clicking a group —
or a point in the ball — recomputes that cell through the real projection:
marker, radial ray, digit breakdown, and its note on demand.
DETERMINISM & PERSISTENCE
The saved object is the recipe (version 1, sanitised through a
migrations gate): source/splice, mode, cells, mapping, thresholds,
properties, voice settings. Recipes-not-outputs: any machine regrows the
identical pattern from pass zero (GPU rasterisation isn't bit-identical
across machines, but the computed points are). One PatternStore port:
localStorage + base64url #p= links. Rendering: raw WebGL1
points, additive blending, gain deliberately below white — full-precision
everything is grey mush; form needs restraint.