ugly-app 0.1.968 → 0.1.970

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -68,11 +68,12 @@ const app = createApp(
68
68
  (configurator: AppConfigurator) => {
69
69
  configurator.setPages({ pages });
70
70
  configurator.setExperiments(experiments);
71
+ const tables: Record<string, Record<string, string>> = { en, es };
71
72
  configurator.setStrings({
72
73
  defaultLang: stringsDef.defaultLang,
73
74
  langs: stringsDef.langs,
74
75
  criticalKeys: stringsDef.criticalKeys,
75
- getTable: (lang) => (lang === 'es' ? es : en),
76
+ getTable: (lang) => tables[lang] ?? tables[stringsDef.defaultLang]!,
76
77
  });
77
78
  configurator.setWorkers(cronTasks, cronHandlers);
78
79
  configurator.setOnEmail(async (inbound: InboundEmail) => { /* … */ });
@@ -337,9 +338,9 @@ export const {
337
338
 
338
339
  **Returns:**
339
340
 
340
- - **`RouterProvider`** — props: `children`, `fallback?`, `isAuthenticated?: () => boolean`, `initialUrl?: { pathname, search }` (required for SSR + hydration). Manages route state, browser history, and the popup layer. Runs the per-route auth check synchronously — apps cannot override the login fallback.
341
- - **`RouterView`** — renders the active page with animated transitions. Props: `durationMs?`, `easing?: EasingFunction`, `transitionComponent?: React.ComponentType<RouterTransitionProps>` (replaces the default `ViewFlipper`), `renderPage?(state: RouterStateRaw) => ReactElement` (sync alternative to `allPages` loaders).
342
- - **`useRouter()`** — returns `RouterContextValue<Pages>` (typed navigation + popup API). Throws if used outside `<RouterProvider>`.
341
+ - **`RouterProvider`** — props: `children`, `fallback?: ReactNode` (rendered before the initial route resolves), `isAuthenticated?: () => boolean`, `initialUrl?: { pathname, search }` (required for SSR; used during client hydration so the first render matches the server output). Manages route state, browser history, and the popup layer. Runs the per-route auth check synchronously and renders `<AuthRoot>` in place of the page when the current route has `auth: true` and `isAuthenticated()` returns false — apps cannot override this login fallback.
342
+ - **`RouterView`** — renders the active page with animated transitions (default: `ViewFlipper`). Props: `durationMs?`, `easing?: EasingFunction`, `transitionComponent?: React.ComponentType<RouterTransitionProps>`, `renderPage?(state: RouterStateRaw) => ReactElement` (sync alternative to `allPages` loaders — bypassed when the auth guard is showing).
343
+ - **`useRouter()`** — returns `RouterContextValue<Pages>`: `{ current, transitionType, push, replace, back, openPopup, closePopup, closeAllPopups }`. Throws if used outside `<RouterProvider>`.
343
344
  - **`Link`** — typed SPA link bound to this router. Renders a real `<a>` (right-click / cmd-click / SEO keep working) but intercepts a plain left-click and routes through `push` / `replace`. Props: `to`, `params` (both type-checked against `pages`), `replace?`, `children`, plus common anchor attrs (`className`, `style`, `target`, `aria-label`, `data-id`, `onClick`).
344
345
  - **`setAllPages(map)`** — register the lazy `PageMap<Pages>` after construction (typically from the browser entry, so the Worker's import graph stays free of every lazy page).
345
346
 
@@ -428,7 +429,7 @@ const handle = openPopup(<MyContent />, {
428
429
  handle.hide(); // dismiss programmatically — same as router.closePopup(handle.id)
429
430
  ```
430
431
 
431
- `openPopup` returns a `PopupHandle = { id, hide }`. Modes:
432
+ `openPopup(content, options?)` returns a `PopupHandle = { id, hide }` — `hide()` is sugar for `router.closePopup(handle.id)`. Modes:
432
433
 
433
434
  - **`block`** (default) — 40% opacity backdrop, **does not** dismiss on backdrop click.
434
435
  - **`transient`** — 20% opacity backdrop, **dismisses** on backdrop click.
@@ -436,8 +437,9 @@ handle.hide(); // dismiss programmatically — same as router.closePopup(handle.
436
437
 
437
438
  `renderLayer` receives `{ content, spring, hide }`: `spring` is a
438
439
  `createAnimatedValue()` result driving 0 → 1; `hide` closes the popup. The
439
- default layer animates open with `easeOut` (250 ms) and closed with
440
- `easeIn` (200 ms). Popups render as siblings of the router's children
440
+ default layer animates open with `easeOut` (default 250 ms) and closed
441
+ with `easeIn` (default 200 ms); override via `animConfig.duration` /
442
+ `animConfig.easing`. Popups render as siblings of the router's children
441
443
  (managed inside `RouterProvider`), so they stack above every page.
442
444
 
443
445
  ### Scroll containers
@@ -532,9 +534,11 @@ const {
532
534
  `useApp<TAsyncOptions>()` is generic in the async-options type so apps can
533
535
  pass a custom option through to a custom `loadingOverlay` element. When
534
536
  `runAsync` is pending, `AppProvider` `cloneElement`s the overlay with
535
- `{ label, asyncOptions }`. `useAppOptional()` returns `null` outside the
536
- provider; `useLocalizer()` prefers `<StringsProvider>` data, falls back to
537
- the `AppProvider` `localizer` prop, and finally to identity.
537
+ `{ label, asyncOptions }` (and hides it once the last concurrent
538
+ `runAsync` resolves counts are refcounted, not toggled).
539
+ `useAppOptional()` returns `null` outside the provider;
540
+ `useLocalizer()` prefers `<StringsProvider>` data, falls back to the
541
+ `AppProvider` `localizer` prop, and finally to identity.
538
542
 
539
543
  Two popup APIs coexist: `useRouter().openPopup()` (spring-animated,
540
544
  dismissible, mode-aware — **the default choice**) and `useApp().showPopup()`
@@ -1 +1 @@
1
- {"version":3,"file":"retarget.d.ts","sourceRoot":"","sources":["../../../../src/character/shared/lib/retarget.ts"],"names":[],"mappings":"AA+DA,OAAO,EAAqB,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAExE,sEAAsE;AACtE,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,4CAA4C;IAC5C,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B,0CAA0C;IAC1C,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACzB,+FAA+F;IAC/F,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,0FAA0F;AAC1F,MAAM,WAAW,QAAQ;IACvB,wFAAwF;IACxF,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,oEAAoE;IACpE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,kEAAkE;IAClE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC5B;AAED,8DAA8D;AAC9D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;CACtB;AA8ED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAkBlD;AAOD,8FAA8F;AAC9F,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,GACb,GAAG,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,IAAI,CAAC;IAAC,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC,CA0BnC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,IAAI,CAAC;IAAC,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC,GAC3C,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CA0EjB;AAED,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CA8B1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,OAAO,EACZ,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAClB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC/B,IAAI,EAAE,MAAM,GACX,YAAY,CA0Ed"}
1
+ {"version":3,"file":"retarget.d.ts","sourceRoot":"","sources":["../../../../src/character/shared/lib/retarget.ts"],"names":[],"mappings":"AA+DA,OAAO,EAAqB,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAExE,sEAAsE;AACtE,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,4CAA4C;IAC5C,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B,0CAA0C;IAC1C,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACzB,+FAA+F;IAC/F,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,0FAA0F;AAC1F,MAAM,WAAW,QAAQ;IACvB,wFAAwF;IACxF,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,oEAAoE;IACpE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,kEAAkE;IAClE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC5B;AAED,8DAA8D;AAC9D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;CACtB;AA0HD,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAkBlD;AAOD,8FAA8F;AAC9F,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,GACb,GAAG,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,IAAI,CAAC;IAAC,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC,CA0BnC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,IAAI,CAAC;IAAC,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC,GAC3C,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAsHjB;AAED,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CA8B1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,OAAO,EACZ,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAClB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC/B,IAAI,EAAE,MAAM,GACX,YAAY,CA0Ed"}
@@ -81,6 +81,15 @@ const TIP = /(?:_End|Hand(?:Thumb|Index|Middle|Ring|Pinky)4)$/;
81
81
  * in all-mine-sky.
82
82
  */
83
83
  const FOOT_CHAIN = /^(?:Left|Right)(?:Foot|ToeBase|Toe_End)$/;
84
+ /**
85
+ * How far a container's own bind may depart from bilateral symmetry before it is not a bind.
86
+ *
87
+ * ⚠️ THE GAP IS ENORMOUS, WHICH IS WHY ONE CONSTANT CAN SERVE. Measured over the shipped
88
+ * catalogue: Mixamo FBX 0.2°, 1.4°; animation-only GLBs 32.5°, 60.3°, 60.3°. Anything between 5°
89
+ * and 25° would separate them identically, so this is a threshold with nothing balanced on it.
90
+ * See the trust test in `calibrate`.
91
+ */
92
+ const MIRROR_TOLERANCE_DEG = 10;
84
93
  /**
85
94
  * The NECK AND HEAD take the bind-relative delta too, for the same reason and by the same rule.
86
95
  *
@@ -124,9 +133,42 @@ const FOOT_CHAIN = /^(?:Left|Right)(?:Foot|ToeBase|Toe_End)$/;
124
133
  * exclusion list. Do not "fix" that test by putting the aim back.
125
134
  */
126
135
  const NECK_HEAD_CHAIN = /^(?:Neck|Head|HeadTop_End)$/;
136
+ /**
137
+ * The CLAVICLES take the bind-relative delta as well — the third instance of the same class, and
138
+ * the one with the widest blast radius.
139
+ *
140
+ * `Shoulder` is a short bone between two joints that every rigger places by convention, so the
141
+ * direction from the shoulder root to the arm root is a RIG CHOICE, not a pose. Aiming ours at the
142
+ * clip's adopts that choice for the whole clip: our clavicle never returns to our own bind, it sits
143
+ * permanently rotated by whatever the two rigs disagree about — measured across the catalogue at
144
+ * 13.8°, 30.2°, 54.1° and 82.3° depending on which source character the file was exported from.
145
+ * That is exactly why the same body read as droop-shouldered in one clip and shrugging in another.
146
+ *
147
+ * Found by auditing all 165 built-ins for pose quality and then running the SAME AUDIT on the
148
+ * source rigs (ugly-bot's `catalogueSweep.test.ts`). The sources keep their clavicles inside the
149
+ * physiological range; we were inflating them:
150
+ *
151
+ * clip their clavicle ours (aimed) ours (bind-relative)
152
+ * m_run_01 0° 117° 0°
153
+ * m_expr_07 0° 114° 0°
154
+ * f_dance_01 0° 85° 0°
155
+ * f_dance_04 47° 92° 47°
156
+ * m_dance_53 61° 74° 60°
157
+ *
158
+ * Under this rule our clavicle swing equals the clip's own — the last column reproduces the first.
159
+ * `f_dance_01`'s "weird shoulder contortion in the back" was ours, not the animation's.
160
+ *
161
+ * ⚠️ AND THE SWING MUST BE MEASURED IN THE CHEST'S FRAME, or none of the above is visible. The
162
+ * first version of that audit compared world directions, so a breakdancer who turned upside down
163
+ * reported a 174° clavicle and 36 clips came back "not physiological" for rolling over.
164
+ *
165
+ * ⚠️ THIS RETIRES THE CLAVICLE AIM ASSERTION, in this repo's `fbxCalibrate`/`irRetarget` and in
166
+ * all-mine-sky's. A bone on this list has no aim to check. Do not put it back.
167
+ */
168
+ const CLAVICLE = /^(?:Left|Right)Shoulder$/;
127
169
  /** Bones whose clip-side direction is a PLACEMENT CONVENTION rather than a pose, and which
128
170
  * therefore hold our own bind and replay only the clip's motion deltas. */
129
- const bindRelative = (name) => FOOT_CHAIN.test(name) || NECK_HEAD_CHAIN.test(name);
171
+ const bindRelative = (name) => FOOT_CHAIN.test(name) || NECK_HEAD_CHAIN.test(name) || CLAVICLE.test(name);
130
172
  const vNorm = (v) => {
131
173
  const l = Math.hypot(v[0], v[1], v[2]) || 1;
132
174
  return [v[0] / l, v[1] / l, v[2] / l];
@@ -254,12 +296,52 @@ export function calibrate(rig, bind, clipWorld) {
254
296
  calibrated[i] = C;
255
297
  return { S, C };
256
298
  };
299
+ // ⚠️ IS THIS CONTAINER'S STORED REST ACTUALLY A BIND? The two rules answer to
300
+ // the clip's bind very differently, and it decides which one is safe:
301
+ //
302
+ // AIM is INDEPENDENT of it. `ours(t)` points where `clip(t)` points at every
303
+ // frame by construction, whatever the bind was.
304
+ // BIND-RELATIVE is ENTIRELY BUILT ON IT — it replays `clip`'s delta FROM its
305
+ // bind — so a rest that is not a bind becomes a constant rotation error that
306
+ // no frame of animation put there and none takes away.
307
+ //
308
+ // A humanoid bind is bilaterally symmetric. Reflect the left foot's bind
309
+ // direction across the sagittal plane and it must land on the right's. Measured
310
+ // over the real catalogue: Mixamo FBX downloads disagree by 0.2°–1.4°, while
311
+ // several animation-only GLBs disagree by 32°–60°. Those GLBs carry no skin,
312
+ // therefore no `inverseBindMatrices`, therefore no bind at all — glTF never
313
+ // promised the node TRS was one, and for those files it plainly is not.
314
+ // Measured in ugly-bot's `upperBodyProbe.test.ts`, where it showed up as a foot
315
+ // rotated 59° out of true for an entire clip whose own animation was symmetric.
316
+ //
317
+ // Where the test fails the foot chain falls back to AIM, which cannot be
318
+ // poisoned by a bind it does not read. The cost is Mixamo's toes-on-the-ground
319
+ // convention on those clips — the very thing FOOT_CHAIN exists to avoid — so
320
+ // this is the lesser of two known defects, not a fix for the container. A GLB
321
+ // that fails this wants re-exporting.
322
+ const footDir = (side) => {
323
+ const a = clipWorld.get(`${side}Foot`);
324
+ const b = clipWorld.get(`${side}ToeBase`);
325
+ if (!a || !b)
326
+ return null;
327
+ return vNorm([b.p[0] - a.p[0], b.p[1] - a.p[1], b.p[2] - a.p[2]]);
328
+ };
329
+ const l = footDir('Left');
330
+ const r = footDir('Right');
331
+ let footBindTrusted = true;
332
+ if (l && r) {
333
+ // Mirror is a negated X: the sagittal plane is x = 0 in both rigs.
334
+ const dot = Math.max(-1, Math.min(1, -l[0] * r[0] + l[1] * r[1] + l[2] * r[2]));
335
+ footBindTrusted = (Math.acos(dot) * 180) / Math.PI <= MIRROR_TOLERANCE_DEG;
336
+ }
257
337
  const K = Array.from({ length: n }, () => null);
258
338
  for (let i = 0; i < n; i++) {
259
- const cw = clipWorld.get(rig.names[i]);
339
+ const name = rig.names[i];
340
+ const cw = clipWorld.get(name);
260
341
  if (!cw)
261
342
  continue;
262
- K[i] = bindRelative(rig.names[i])
343
+ const useBindRelative = bindRelative(name) && (footBindTrusted || !FOOT_CHAIN.test(name));
344
+ K[i] = useBindRelative
263
345
  ? qMul(qConj(cw.q), worldRest(i))
264
346
  : qMul(qConj(cw.q), pose(i).C);
265
347
  }
@@ -1 +1 @@
1
- {"version":3,"file":"retarget.js","sourceRoot":"","sources":["../../../../src/character/shared/lib/retarget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retarget.js","sourceRoot":"","sources":["../../../../src/character/shared/lib/retarget.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.967";
1
+ export declare const CLI_VERSION = "0.1.969";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.967";
2
+ export const CLI_VERSION = "0.1.969";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ugly-app",
3
3
  "packageManager": "pnpm@10.34.5",
4
- "version": "0.1.968",
4
+ "version": "0.1.970",
5
5
  "type": "module",
6
6
  "comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
7
7
  "files": [
@@ -112,6 +112,16 @@ const TIP = /(?:_End|Hand(?:Thumb|Index|Middle|Ring|Pinky)4)$/;
112
112
  */
113
113
  const FOOT_CHAIN = /^(?:Left|Right)(?:Foot|ToeBase|Toe_End)$/;
114
114
 
115
+ /**
116
+ * How far a container's own bind may depart from bilateral symmetry before it is not a bind.
117
+ *
118
+ * ⚠️ THE GAP IS ENORMOUS, WHICH IS WHY ONE CONSTANT CAN SERVE. Measured over the shipped
119
+ * catalogue: Mixamo FBX 0.2°, 1.4°; animation-only GLBs 32.5°, 60.3°, 60.3°. Anything between 5°
120
+ * and 25° would separate them identically, so this is a threshold with nothing balanced on it.
121
+ * See the trust test in `calibrate`.
122
+ */
123
+ const MIRROR_TOLERANCE_DEG = 10;
124
+
115
125
  /**
116
126
  * The NECK AND HEAD take the bind-relative delta too, for the same reason and by the same rule.
117
127
  *
@@ -156,10 +166,44 @@ const FOOT_CHAIN = /^(?:Left|Right)(?:Foot|ToeBase|Toe_End)$/;
156
166
  */
157
167
  const NECK_HEAD_CHAIN = /^(?:Neck|Head|HeadTop_End)$/;
158
168
 
169
+ /**
170
+ * The CLAVICLES take the bind-relative delta as well — the third instance of the same class, and
171
+ * the one with the widest blast radius.
172
+ *
173
+ * `Shoulder` is a short bone between two joints that every rigger places by convention, so the
174
+ * direction from the shoulder root to the arm root is a RIG CHOICE, not a pose. Aiming ours at the
175
+ * clip's adopts that choice for the whole clip: our clavicle never returns to our own bind, it sits
176
+ * permanently rotated by whatever the two rigs disagree about — measured across the catalogue at
177
+ * 13.8°, 30.2°, 54.1° and 82.3° depending on which source character the file was exported from.
178
+ * That is exactly why the same body read as droop-shouldered in one clip and shrugging in another.
179
+ *
180
+ * Found by auditing all 165 built-ins for pose quality and then running the SAME AUDIT on the
181
+ * source rigs (ugly-bot's `catalogueSweep.test.ts`). The sources keep their clavicles inside the
182
+ * physiological range; we were inflating them:
183
+ *
184
+ * clip their clavicle ours (aimed) ours (bind-relative)
185
+ * m_run_01 0° 117° 0°
186
+ * m_expr_07 0° 114° 0°
187
+ * f_dance_01 0° 85° 0°
188
+ * f_dance_04 47° 92° 47°
189
+ * m_dance_53 61° 74° 60°
190
+ *
191
+ * Under this rule our clavicle swing equals the clip's own — the last column reproduces the first.
192
+ * `f_dance_01`'s "weird shoulder contortion in the back" was ours, not the animation's.
193
+ *
194
+ * ⚠️ AND THE SWING MUST BE MEASURED IN THE CHEST'S FRAME, or none of the above is visible. The
195
+ * first version of that audit compared world directions, so a breakdancer who turned upside down
196
+ * reported a 174° clavicle and 36 clips came back "not physiological" for rolling over.
197
+ *
198
+ * ⚠️ THIS RETIRES THE CLAVICLE AIM ASSERTION, in this repo's `fbxCalibrate`/`irRetarget` and in
199
+ * all-mine-sky's. A bone on this list has no aim to check. Do not put it back.
200
+ */
201
+ const CLAVICLE = /^(?:Left|Right)Shoulder$/;
202
+
159
203
  /** Bones whose clip-side direction is a PLACEMENT CONVENTION rather than a pose, and which
160
204
  * therefore hold our own bind and replay only the clip's motion deltas. */
161
205
  const bindRelative = (name: string): boolean =>
162
- FOOT_CHAIN.test(name) || NECK_HEAD_CHAIN.test(name);
206
+ FOOT_CHAIN.test(name) || NECK_HEAD_CHAIN.test(name) || CLAVICLE.test(name);
163
207
 
164
208
  const vNorm = (v: Vec3): Vec3 => {
165
209
  const l = Math.hypot(v[0], v[1], v[2]) || 1;
@@ -298,11 +342,55 @@ export function calibrate(
298
342
  return { S, C };
299
343
  };
300
344
 
345
+ // ⚠️ IS THIS CONTAINER'S STORED REST ACTUALLY A BIND? The two rules answer to
346
+ // the clip's bind very differently, and it decides which one is safe:
347
+ //
348
+ // AIM is INDEPENDENT of it. `ours(t)` points where `clip(t)` points at every
349
+ // frame by construction, whatever the bind was.
350
+ // BIND-RELATIVE is ENTIRELY BUILT ON IT — it replays `clip`'s delta FROM its
351
+ // bind — so a rest that is not a bind becomes a constant rotation error that
352
+ // no frame of animation put there and none takes away.
353
+ //
354
+ // A humanoid bind is bilaterally symmetric. Reflect the left foot's bind
355
+ // direction across the sagittal plane and it must land on the right's. Measured
356
+ // over the real catalogue: Mixamo FBX downloads disagree by 0.2°–1.4°, while
357
+ // several animation-only GLBs disagree by 32°–60°. Those GLBs carry no skin,
358
+ // therefore no `inverseBindMatrices`, therefore no bind at all — glTF never
359
+ // promised the node TRS was one, and for those files it plainly is not.
360
+ // Measured in ugly-bot's `upperBodyProbe.test.ts`, where it showed up as a foot
361
+ // rotated 59° out of true for an entire clip whose own animation was symmetric.
362
+ //
363
+ // Where the test fails the foot chain falls back to AIM, which cannot be
364
+ // poisoned by a bind it does not read. The cost is Mixamo's toes-on-the-ground
365
+ // convention on those clips — the very thing FOOT_CHAIN exists to avoid — so
366
+ // this is the lesser of two known defects, not a fix for the container. A GLB
367
+ // that fails this wants re-exporting.
368
+ const footDir = (side: 'Left' | 'Right'): Vec3 | null => {
369
+ const a = clipWorld.get(`${side}Foot`);
370
+ const b = clipWorld.get(`${side}ToeBase`);
371
+ if (!a || !b) return null;
372
+ return vNorm([b.p[0] - a.p[0], b.p[1] - a.p[1], b.p[2] - a.p[2]]);
373
+ };
374
+ const l = footDir('Left');
375
+ const r = footDir('Right');
376
+ let footBindTrusted = true;
377
+ if (l && r) {
378
+ // Mirror is a negated X: the sagittal plane is x = 0 in both rigs.
379
+ const dot = Math.max(
380
+ -1,
381
+ Math.min(1, -l[0] * r[0] + l[1] * r[1] + l[2] * r[2]),
382
+ );
383
+ footBindTrusted = (Math.acos(dot) * 180) / Math.PI <= MIRROR_TOLERANCE_DEG;
384
+ }
385
+
301
386
  const K: (Quat | null)[] = Array.from({ length: n }, () => null);
302
387
  for (let i = 0; i < n; i++) {
303
- const cw = clipWorld.get(rig.names[i]!);
388
+ const name = rig.names[i]!;
389
+ const cw = clipWorld.get(name);
304
390
  if (!cw) continue;
305
- K[i] = bindRelative(rig.names[i]!)
391
+ const useBindRelative =
392
+ bindRelative(name) && (footBindTrusted || !FOOT_CHAIN.test(name));
393
+ K[i] = useBindRelative
306
394
  ? qMul(qConj(cw.q), worldRest(i))
307
395
  : qMul(qConj(cw.q), pose(i).C);
308
396
  }
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.967";
2
+ export const CLI_VERSION = "0.1.969";