Processing
The latent path is a curve on a 3-sphere inside a four-dimensional subspace of latent space. Everything about continuity follows from that. CPU-side algorithms are designed here before they cost GPU time.
1 · The frame
Four seeds are drawn on CPU and flattened, then orthonormalised by Gram–Schmidt into a frame e0..3 spanning a 4-dimensional subspace of RN, with N the latent dimension.
The radius r is taken from the first seed and every rendered latent is placed at exactly that radius, so the sampler always sees a vector of the norm it expects.
2 · The coefficient path
A cell’s latent is x = r ∑k ckek, where c lies on the unit 3-sphere S3. The map Ω : R6 → so(4) sends six coefficients onto the six coordinate planes.
Because Ω(v) is antisymmetric, exp Ω(v) ∈ SO(4), so ∥c∥ = 1 exactly — verified to 1.000000000000 across samples. The path can never drift off the sphere; it can only travel along it.
3 · Why θ was doing nothing
With rates and offsets unset they become zero vectors, and
exp(θ s Ω(0)) = I. The first two factors collapse and
θ drops out of the equation entirely:
That is a circle in the e0–e3 plane, not a sphere. Azimuth advances 2π/ncols per column, so the path closes and repeats every ncols frames. At the former default of 64 columns the identical latent returned every 64 frames.
4 · Not every generator moves the state
After the azimuth rotation the state lies in span{e0, e3}. A generator acting only on the orthogonal complement is the identity on that state, so one of the six rate knobs is inert from the default start.
| rates index | plane | ∥Δc∥ at θ=1 | effect |
|---|---|---|---|
| 0 | (0,1) | 0.655166 | strong |
| 1 | (0,2) | 0.655166 | strong |
| 2 | (0,3) | 0.685796 | strong |
| 3 | (1,2) | 0.000000 | no-op on this state |
| 4 | (1,3) | 0.202666 | weak |
| 5 | (2,3) | 0.202666 | weak |
5 · The continuity law
Frame-to-frame displacement follows from differentiating the flow. For the omega path, dc/dθ = s Ω(rates) c, giving
Three independent handles on continuity, all linear: the grid
(ncols), the scale (shell_scale, live-updatable), and the
generator magnitude (rates). Degrees per frame = 360 / ncols
for pure azimuth stepping.
6 · Measured, not asserted
Mean absolute RGB difference between consecutive rendered frames, 0–1. Below ~0.02 reads as near-identical; above ~0.15 reads as unrelated images.
| configuration | deg/frame | measured Δ | verdict |
|---|---|---|---|
| 1024×64 nested_sparse | 177.76° | no consecutive pairs exist | unrelated |
| 1024×64 contiguous | 5.63° | — | steppy |
| 16×4096 contiguous | 0.088° | 0.0021 | near-identical |
Van der Corput bisects its range, so consecutive samples land near-antipodal by construction. It is a survey sampler and cannot produce motion.
7 · Batch size is not free
Measured across the 4-GPU fleet, 128 cells at 512 × 512 / 16 steps. fps equals cells/s: one cell is one frame.
| batch | wall | fps | vs batch 1 |
|---|---|---|---|
| 1 | 54.0s | 2.37 | 1.00× |
| 2 | 52.0s | 2.46 | 1.04× |
| 4 | 54.0s | 2.37 | 1.00× |
| 8 | 60.0s | 2.13 | 0.90× |
| 16 | 68.0s | 1.88 | 0.79× |
| 32 | 86.1s | 1.49 | 0.63× |
| 64* | 86.1s | 1.49 | 0.63× |
*batch 64 clamped to 32: only 32 cells per shard were available, so it
is not an independent measurement. At 512px a single image already saturates the card,
so batching adds memory pressure and coarser scheduling for no gain. Batch 1–2 is
also what atlas-xframe-cache requires, and it makes assets stream one at a
time instead of arriving in bursts.
8 · The criterion, measured
Continuity alone is not the goal — a static image with jitter is locally smooth
and going nowhere. Motion requires difference to grow with separation: tiny at
lag 1, large across the run. Measured on aurora-whale-migration,
16×4096 contiguous, batch 2, rates[0]=0.8, coupling 4.0.
| separation (frames) | mean Δ | reading |
|---|---|---|
| 1 | 0.0017 | near-identical |
| 38 | 0.0096 | near-identical |
| 115 | 0.0243 | visibly evolved |
| 270 | 0.0474 | visibly evolved |
| 499 | 0.0725 | strongly travelled |
Growth ratio 43.4×, monotonic with no plateau. The absence of a plateau is
the image-space proof that the closed orbit is broken: under the old
rates=0 circle this curve would rise and then fall back toward zero as the
path returned to its own start. Local smoothness 0.0017, worst single step 0.0026,
zero outliers above 3× median, batch-edge ratio 0.99×.
9 · The latent→image map is a power law
Image difference does not track latent difference linearly. Calibrated against
13 measured separations on aurora-whale-migration:
Log-space R² = 0.983. The exponent below 1 means diminishing returns: 2× more image travel costs 3.0× more latent travel, 10× costs 40×. A plain linear fit scores R² = 0.988 but misses the lag-1 point — the continuity constraint — by 290%, where the power law errs 18%. Fit the regime you intend to use.
10 · The frontier is flat — the seeds are the ceiling
Sweeping coupling × rate × scale over 54 configurations inside the continuity budget, ranked by directed travel:
The best config in budget reaches travel 0.1208 against the running config’s 0.1171 — 1.03×. Top configs hit directness 0.636, essentially the geodesic limit. End departure is already 1.90 of a hard maximum of 2.0, because c is a unit vector.
So traversal tuning is exhausted. The path already crosses the whole sphere; total variety is bounded by how far apart the four seed latents place e0..3. The seeds are the experiment’s ceiling, not the orbit.