# The Moment Operator — Findings

Formal record of the cherry-blossom motion experiment: authoring natural motion by
moving a **fixed-seed** FLUX latent along a structured path on the latent sphere — the
Euler/euclidean "moment operator" — with no video model. Numbers below are measured on
the live system (Grace-CPU frame analysis + GPU renders), seed 7, driven on the
discovered `cherry.npz` plane.

## 1. Thesis

A single FLUX latent (fixed seed) is a point on a sphere of radius `r`. Motion is a
closed path `θ: 0→2π` through that sphere, rendered frame-by-frame. The path is a
closed-form operator on an orthonormal frame `(e0, e1, e2, e3)` derived from a
**discovered motion plane** (PCA of the subject's real movement), not random seeds:

```
elliptic     f = (cos(arc)·e0 + sin(arc)·(cosθ·e1 + sinθ·e2))·r          # 2-D great-circle orbit
oscillatory  s = amp·sin(θ);  f = (cos s·e0 + sin s·e1)·r                # 1-D palindromic sway
weave        t = cosθ·e1 + sinθ·cos(qθ)·e2 + sinθ·sin(qθ)·e3 (|t|=1)
             f = (cos(arc)·e0 + sin(arc)·t)·r                            # 3-D spherical Lissajous
screw        f = (r/√2)(cos(qθ)e0 + sin(qθ)e1 + cosθ·e2 + sinθ·e3)       # loxodromic (4-D)
```

Beauty = a small, even, on-manifold excursion that reads as the subject's own movement
(a cherry branch swaying in soft wind), looping seamlessly. Everything below is the
search for that, decomposed into the axes that actually move the result.

## 2. The living band (on-manifold)

Motion stays *alive* (the same blossom, coherent) only inside a small annulus of the
excursion latitude `arc`. Outside it the latent swings off the realized manifold and
renders a **different blossom each frame**.

- **Living band: `arc ≈ 0.10–0.18`.** `arc ≥ 0.30` is off-manifold (forbidden).
- For `elliptic`, **only `arc` matters** — `amp` and `spin` are ignored (proven
  byte-identical renders). For `oscillatory`, `amp` is the reach; for `weave`/`screw`,
  `spin = q` is the secondary rate.

## 3. Blur — the latent off the manifold

"Blur" (low Laplacian-variance sharpness) is **not noise and not under-denoising** — it
is the latent leaving the seed-7 manifold. Measured sharpness (≥0.012 pristine,
<0.006 blur), driven, arc 0.14:

| model · steps | sharpness | verdict |
|---|---|---|
| schnell · 4 | ~0.020–0.023 | pristine (but see §5 jitter) |
| fp16 · 16 | 0.0059 | blur |
| fp16 · 20 | 0.0097 | soft |
| fp16 · 24 | 0.0128 | **pristine** |
| fp16 · 28 | 0.0150 | **pristine** (also best motion + closure) |

**Findings.** Control blur via (a) **small arc** (on-manifold) and (b) **denoise steps**
— `fp16` is the soft *final-artifact* track and needs **steps ≥ 24** (28 best, and
monotone in steps; guidance must stay 3.5 — raising it *lowered* sharpness). `fp16` below
16 steps collapses to ~0.0002 (dead). Never judge blur by `amp` (a no-op in elliptic).

## 4. Speed — coupled to amplitude in the 1-D operator

For `oscillatory: s = amp·sin(θ)`, sway speed = reach(`amp`) ÷ period(`frames/fps`), and
`spin` is a no-op. So **speed is coupled to amplitude**; the amp-decoupled lever is the
**period**. At 24 fps: 64f ≈ 2.7 s (faster), 96f = 4 s (the artifact), 144f = 6 s
(gentler). Measured: the longer period is both smoother (`change_std_mean` 0.125 vs
0.174) and closes better (0.675 vs 0.482). The legacy `speed_strength` calibration is
**disconnected** from the live feeder (it tunes from the `speed` slider, which the feeder
no longer uses) — its "perceived 5.91 / target 3.0" is stale, not a live signal.

## 5. Jitter — two measured sources, neither is "flutter"

After `flutter` was retired the jitter remained, because it was never mode-specific.
Measured over the render history:

| | reversals / 40f (direction flips) | change_std_mean (step-size unevenness) |
|---|---|---|
| **schnell (every mode)** | **41** (28–96) | 0.17–0.30 |
| **fp16** | **11** (6–15) | 0.33–0.60 |

1. **schnell 4-step flicker is the dominant jitter** — it flips direction on nearly every
   frame regardless of operator (elliptic 43, oscillatory 51, weave 39, growth 32). The
   distilled 4-step model resolves slightly different fine detail per frame. Fix: judge
   and show on **fp16**.
2. **fp16 `pace=False` uneven steps** (the secondary, on the final track):
   `change_std_mean` 0.41 (pace off) vs 0.33 (pace on). `pace=False` was chosen to fix
   the loop seam because the pace thumbnails render at **noisy 4-step**. Open fix:
   even-θ *without* the noisy thumbnails — clean (≥12-step) pace thumbnails, or an
   analytic even-θ.

Lesson: reversals ≠ change_std_mean. schnell is even-stepped but flips (shimmer); fp16 is
smooth-direction but uneven-stepped (jerk). Both read as "jitter"; trust neither metric
alone — judge by eye.

## 6. Movement in more than one dimension

- `oscillatory` = **1-D** (palindromic sway).
- `elliptic` = **2-D** orbit.
- `weave` = **3-D** spherical Lissajous (the tangent sweeps three discovered dirs;
  on-sphere, closes for integer `q`). This is the on-manifold way to get >1 dimension;
  directedness `S2/S1` rises with `q`, peaking ~0.73 at `q=2`.
- `flutter` (`a = arc + amp·sin(spin·θ)`) was **retired** — its petal-tremble read as
  jitter, compounded by being tested on flickery schnell.

## 7. e's mechanism — rotation gives constant-speed displacement

Generating the displacement by the **matrix exponential of a rotation** (`expm(θΩ)`) is
an isometry, so its latent speed is **exactly constant** — the smoothest possible motion,
zero step-size jitter. Measured on the cherry basis (latent displacement; jitter =
step-size unevenness, lower is smoother; dim3 = spread to the 3rd axis):

| operator | jitter (latent) | dim2 | dim3 | excursion |
|---|---|---|---|---|
| elliptic (2-D) | **0.000** | 1.00 | 0.00 | 0.140 |
| weave q2 (3-D) | 0.257 | 0.62 | 0.38 | 0.140 |
| e-mech w=2,3 (3-D) | **0.198** | 0.71 | 0.71 | 0.140 |

The pure rotation (`elliptic`) is perfectly even but only 2-D; `weave`'s 3-D-ness comes
from amplitude modulation, which costs even-speed (a latent-level jitter source beneath
the schnell flicker). A properly-tuned exponential rotor reaches full 3-D (dim2 ≈ dim3)
at *lower* jitter than weave — the direction to "choose the displacement according to e's
mechanism in three-dimensional space": an isoclinic (equal-rate) rotor for constant speed
**and** genuine 3-D, kept at small excursion to stay on-manifold.

## 8. CPU and GPU complement

The GPU renders; the **Grace CPU** is the eye and the search. `analyze_motion.py` scores
every render from frame diffs (directedness, reversals, continuity, sharpness, optical
flow) on the cores the GPU leaves idle. The (earlier) multivec converger rendered a basis
once on the GPU, then predicted hundreds of coefficient mixes by linear superposition and
scored them on the CPU, GPU-confirming only the top few.

## 9. Operational

- **Worker thread caps.** The GPU-bound workers had no `OMP_NUM_THREADS`; under a full
  queue two workers spawned per-core BLAS/OMP pools and drove load to ~700, *starving the
  GPU* (100%→57%). Fixed with an `OMP=8` systemd drop-in: threads 257→89/worker, load
  →~3, GPU back to 100%.
- **Feeder.** `cherry_feed.py` sustains the queue (living-band arc, driven axis,
  `pace=False`, `MAX_Q` backlog), purges off-manifold (`elliptic arc≥0.30`) and retired
  (`flutter`) jobs at a 15 s chokepoint, and honors `control.json`.
- **Sync.** `~/spiral/*.py` are runtime copies of the repo files; edits require a sync +
  worker restart, and a restart orphans in-flight claims (reclaim them).

## 10. Open frontier

1. **Even-θ without seam noise** — clean-thumbnail pacing or analytic even-θ to remove the
   fp16 jerk while keeping the seam (§5.2).
2. **The e-mechanism 3-D rotor** — deploy the isoclinic exponential displacement (§7),
   small-excursion, and judge it against weave by eye and by reversals on clean fp16.
3. **fp16 throughput** — the sharp final is ~5 min/render; cheaper probe frames/steps with
   the winner rendered full-length.
4. **Retire the dead speed calibration** and reconnect a live period dial (§4).
