@bubo-squared/gyroview 0.4.0 → 0.4.1

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/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
3
3
  What changed for a page using the package, newest first. Until 1.0, a minor version may change
4
4
  the API.
5
5
 
6
+ ## 0.4.1 (2026-10-01)
7
+
8
+ What a page may notice:
9
+
10
+ - An Insta360 X4 Air recording is stabilized about the right axes: its IMU frame is measured
11
+ (ADR 0009) where it was assumed. The `ready` event's `imuFrame` is
12
+ `{ name: 'X4 Air', isVerified: true }` where it was the unverified aligned frame, and the load
13
+ no longer warns (`recording-degraded`) that the IMU frame has not been verified on a recording.
14
+ - A camera is given a measured IMU frame only by its whole model name: a model whose name merely
15
+ begins with a measured camera's, such as a later "X5 Pro", gets the unverified frame and its
16
+ warning until a recording of it is measured.
17
+
6
18
  ## 0.4.0 (2026-10-01)
7
19
 
8
20
  New:
package/README.md CHANGED
@@ -45,10 +45,10 @@ A page without a bundler loads the standalone file, which has Three.js and media
45
45
  ```html
46
46
  <script
47
47
  type="module"
48
- src="https://cdn.jsdelivr.net/npm/@bubo-squared/gyroview@0.3/dist/standalone.js"
48
+ src="https://cdn.jsdelivr.net/npm/@bubo-squared/gyroview@0.4/dist/standalone.js"
49
49
  ></script>
50
50
  <script type="module">
51
- import { inspectRecording } from 'https://cdn.jsdelivr.net/npm/@bubo-squared/gyroview@0.3/dist/standalone.js';
51
+ import { inspectRecording } from 'https://cdn.jsdelivr.net/npm/@bubo-squared/gyroview@0.4/dist/standalone.js';
52
52
  </script>
53
53
  ```
54
54
 
@@ -102,6 +102,11 @@ var X5_IMU_FRAME = measuredImuFrame("X5", QUARTER_TURN_ABOUT_LATERAL);
102
102
  */
103
103
  var X6_IMU_FRAME = measuredImuFrame("X6", QUARTER_TURN_ABOUT_LATERAL);
104
104
  /**
105
+ * Measured on one X4 Air recording (ADR 0009): the X5's arrangement again, which the ranking puts
106
+ * first, the aligned frame third.
107
+ */
108
+ var X4_AIR_IMU_FRAME = measuredImuFrame("X4 Air", QUARTER_TURN_ABOUT_LATERAL);
109
+ /**
105
110
  * Until a recording proves otherwise, the IMU is assumed aligned with the body.
106
111
  */
107
112
  var ALIGNED_IMU_FRAME = assumedImuFrame("aligned (unverified)", [
@@ -109,13 +114,21 @@ var ALIGNED_IMU_FRAME = assumedImuFrame("aligned (unverified)", [
109
114
  "y",
110
115
  "z"
111
116
  ]);
112
- var IMU_FRAMES_BY_MODEL = [["Insta360 X5", X5_IMU_FRAME], ["Insta360 X6", X6_IMU_FRAME]];
117
+ /**
118
+ * Keyed by the whole model name: a name that extends a measured one ("X4 Air" of "X4", an "X5
119
+ * Pro") is another camera, unmeasured until a recording of it is ranked.
120
+ */
121
+ var IMU_FRAMES_BY_MODEL = /* @__PURE__ */ new Map([
122
+ ["Insta360 X4 Air", X4_AIR_IMU_FRAME],
123
+ ["Insta360 X5", X5_IMU_FRAME],
124
+ ["Insta360 X6", X6_IMU_FRAME]
125
+ ]);
113
126
  /**
114
127
  * The IMU frame for a recording, chosen from the camera model the file names. A starting point
115
128
  * the recording's own data can be checked against with the ranking test, never the last word.
116
129
  */
117
130
  function imuFrameFor(hints) {
118
- return IMU_FRAMES_BY_MODEL.find(([prefix]) => hints.model?.startsWith(prefix))?.[1] ?? ALIGNED_IMU_FRAME;
131
+ return IMU_FRAMES_BY_MODEL.get(hints.model?.trim() ?? "") ?? ALIGNED_IMU_FRAME;
119
132
  }
120
133
  //#endregion
121
- export { ALIGNED_IMU_FRAME, X5_IMU_FRAME, X6_IMU_FRAME, assumedImuFrame, imuFrameFor, isProperRotation, toBodyFrame };
134
+ export { ALIGNED_IMU_FRAME, X4_AIR_IMU_FRAME, X5_IMU_FRAME, X6_IMU_FRAME, assumedImuFrame, imuFrameFor, isProperRotation, toBodyFrame };