@vibesdotdev/media 0.0.0-stage → 1.0.0-rc.3

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.
Files changed (278) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +95 -2
  3. package/dist/analyzers/frame-guard.d.ts +6 -0
  4. package/dist/analyzers/frame-guard.d.ts.map +1 -0
  5. package/dist/analyzers/frame-guard.js +10 -0
  6. package/dist/analyzers/frame-guard.js.map +1 -0
  7. package/dist/analyzers/motion-math.d.ts +66 -0
  8. package/dist/analyzers/motion-math.d.ts.map +1 -0
  9. package/dist/analyzers/motion-math.js +356 -0
  10. package/dist/analyzers/motion-math.js.map +1 -0
  11. package/dist/analyzers/reference-motion-analyzer.impl.d.ts +23 -0
  12. package/dist/analyzers/reference-motion-analyzer.impl.d.ts.map +1 -0
  13. package/dist/analyzers/reference-motion-analyzer.impl.js +69 -0
  14. package/dist/analyzers/reference-motion-analyzer.impl.js.map +1 -0
  15. package/dist/analyzers/reference-motion.descriptor.d.ts +11 -0
  16. package/dist/analyzers/reference-motion.descriptor.d.ts.map +1 -0
  17. package/dist/analyzers/reference-motion.descriptor.js +21 -0
  18. package/dist/analyzers/reference-motion.descriptor.js.map +1 -0
  19. package/dist/capture-client.d.ts +34 -0
  20. package/dist/capture-client.d.ts.map +1 -0
  21. package/dist/capture-client.js +163 -0
  22. package/dist/capture-client.js.map +1 -0
  23. package/dist/config/media.uploads.config.descriptor.d.ts +27 -0
  24. package/dist/config/media.uploads.config.descriptor.d.ts.map +1 -0
  25. package/dist/config/media.uploads.config.descriptor.js +46 -0
  26. package/dist/config/media.uploads.config.descriptor.js.map +1 -0
  27. package/dist/config/uploads.d.ts +11 -0
  28. package/dist/config/uploads.d.ts.map +1 -0
  29. package/dist/config/uploads.js +25 -0
  30. package/dist/config/uploads.js.map +1 -0
  31. package/dist/docs/artifact-references.docs.descriptor.d.ts +4 -0
  32. package/dist/docs/artifact-references.docs.descriptor.d.ts.map +1 -0
  33. package/dist/docs/artifact-references.docs.descriptor.js +69 -0
  34. package/dist/docs/artifact-references.docs.descriptor.js.map +1 -0
  35. package/dist/docs/image-transform.docs.descriptor.d.ts +4 -0
  36. package/dist/docs/image-transform.docs.descriptor.d.ts.map +1 -0
  37. package/dist/docs/image-transform.docs.descriptor.js +52 -0
  38. package/dist/docs/image-transform.docs.descriptor.js.map +1 -0
  39. package/dist/index.d.ts +48 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +49 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/interfaces/capture-provider.d.ts +33 -0
  44. package/dist/interfaces/capture-provider.d.ts.map +1 -0
  45. package/dist/interfaces/capture-provider.js +10 -0
  46. package/dist/interfaces/capture-provider.js.map +1 -0
  47. package/dist/interfaces/image-transformer.d.ts +7 -0
  48. package/dist/interfaces/image-transformer.d.ts.map +1 -0
  49. package/dist/interfaces/image-transformer.js +2 -0
  50. package/dist/interfaces/image-transformer.js.map +1 -0
  51. package/dist/interfaces/index.d.ts +7 -0
  52. package/dist/interfaces/index.d.ts.map +1 -0
  53. package/dist/interfaces/index.js +5 -0
  54. package/dist/interfaces/index.js.map +1 -0
  55. package/dist/interfaces/motion-analyzer.d.ts +55 -0
  56. package/dist/interfaces/motion-analyzer.d.ts.map +1 -0
  57. package/dist/interfaces/motion-analyzer.js +14 -0
  58. package/dist/interfaces/motion-analyzer.js.map +1 -0
  59. package/dist/kinds/capture.d.ts +58 -0
  60. package/dist/kinds/capture.d.ts.map +1 -0
  61. package/dist/kinds/capture.js +34 -0
  62. package/dist/kinds/capture.js.map +1 -0
  63. package/dist/kinds/image-transform.d.ts +91 -0
  64. package/dist/kinds/image-transform.d.ts.map +1 -0
  65. package/dist/kinds/image-transform.js +12 -0
  66. package/dist/kinds/image-transform.js.map +1 -0
  67. package/dist/kinds/index.d.ts +10 -0
  68. package/dist/kinds/index.d.ts.map +1 -0
  69. package/dist/kinds/index.js +7 -0
  70. package/dist/kinds/index.js.map +1 -0
  71. package/dist/kinds/motion.d.ts +57 -0
  72. package/dist/kinds/motion.d.ts.map +1 -0
  73. package/dist/kinds/motion.js +34 -0
  74. package/dist/kinds/motion.js.map +1 -0
  75. package/dist/media.plugin.d.ts +23 -0
  76. package/dist/media.plugin.d.ts.map +1 -0
  77. package/dist/media.plugin.js +48 -0
  78. package/dist/media.plugin.js.map +1 -0
  79. package/dist/schemas/artifact-reference.d.ts +59 -0
  80. package/dist/schemas/artifact-reference.d.ts.map +1 -0
  81. package/dist/schemas/artifact-reference.js +77 -0
  82. package/dist/schemas/artifact-reference.js.map +1 -0
  83. package/dist/schemas/capture-descriptor.d.ts +71 -0
  84. package/dist/schemas/capture-descriptor.d.ts.map +1 -0
  85. package/dist/schemas/capture-descriptor.js +74 -0
  86. package/dist/schemas/capture-descriptor.js.map +1 -0
  87. package/dist/schemas/capture-options.d.ts +51 -0
  88. package/dist/schemas/capture-options.d.ts.map +1 -0
  89. package/dist/schemas/capture-options.js +68 -0
  90. package/dist/schemas/capture-options.js.map +1 -0
  91. package/dist/schemas/capture-parse.d.ts +10 -0
  92. package/dist/schemas/capture-parse.d.ts.map +1 -0
  93. package/dist/schemas/capture-parse.js +30 -0
  94. package/dist/schemas/capture-parse.js.map +1 -0
  95. package/dist/schemas/capture-state.d.ts +77 -0
  96. package/dist/schemas/capture-state.d.ts.map +1 -0
  97. package/dist/schemas/capture-state.js +25 -0
  98. package/dist/schemas/capture-state.js.map +1 -0
  99. package/dist/schemas/image-transform.d.ts +269 -0
  100. package/dist/schemas/image-transform.d.ts.map +1 -0
  101. package/dist/schemas/image-transform.js +161 -0
  102. package/dist/schemas/image-transform.js.map +1 -0
  103. package/dist/schemas/index.d.ts +20 -0
  104. package/dist/schemas/index.d.ts.map +1 -0
  105. package/dist/schemas/index.js +17 -0
  106. package/dist/schemas/index.js.map +1 -0
  107. package/dist/schemas/motion-analysis.d.ts +187 -0
  108. package/dist/schemas/motion-analysis.d.ts.map +1 -0
  109. package/dist/schemas/motion-analysis.js +213 -0
  110. package/dist/schemas/motion-analysis.js.map +1 -0
  111. package/dist/schemas/motion-descriptor.d.ts +53 -0
  112. package/dist/schemas/motion-descriptor.d.ts.map +1 -0
  113. package/dist/schemas/motion-descriptor.js +47 -0
  114. package/dist/schemas/motion-descriptor.js.map +1 -0
  115. package/dist/schemas/motion-frame.d.ts +63 -0
  116. package/dist/schemas/motion-frame.d.ts.map +1 -0
  117. package/dist/schemas/motion-frame.js +86 -0
  118. package/dist/schemas/motion-frame.js.map +1 -0
  119. package/dist/schemas/opaque-id.d.ts +10 -0
  120. package/dist/schemas/opaque-id.d.ts.map +1 -0
  121. package/dist/schemas/opaque-id.js +24 -0
  122. package/dist/schemas/opaque-id.js.map +1 -0
  123. package/dist/schemas/sharing-state.d.ts +43 -0
  124. package/dist/schemas/sharing-state.d.ts.map +1 -0
  125. package/dist/schemas/sharing-state.js +11 -0
  126. package/dist/schemas/sharing-state.js.map +1 -0
  127. package/dist/svelte/CaptureLoader.svelte +29 -0
  128. package/dist/svelte/CaptureLoader.svelte.d.ts +11 -0
  129. package/dist/svelte/CaptureLoader.svelte.d.ts.map +1 -0
  130. package/dist/svelte/CapturePanel.svelte +189 -0
  131. package/dist/svelte/CapturePanel.svelte.d.ts +12 -0
  132. package/dist/svelte/CapturePanel.svelte.d.ts.map +1 -0
  133. package/dist/svelte/MediaUploader.svelte +109 -0
  134. package/dist/svelte/MediaUploader.svelte.d.ts +5 -0
  135. package/dist/svelte/MediaUploader.svelte.d.ts.map +1 -0
  136. package/dist/svelte/capture-parse.d.ts +2 -0
  137. package/dist/svelte/capture-parse.d.ts.map +1 -0
  138. package/dist/svelte/capture-parse.js +1 -0
  139. package/dist/svelte/failure-message.d.ts +2 -0
  140. package/dist/svelte/failure-message.d.ts.map +1 -0
  141. package/dist/svelte/failure-message.js +1 -0
  142. package/dist/svelte/index.d.ts +8 -0
  143. package/dist/svelte/index.d.ts.map +1 -0
  144. package/dist/svelte/index.js +6 -0
  145. package/dist/svelte/runtime-log.d.ts +14 -0
  146. package/dist/svelte/runtime-log.d.ts.map +1 -0
  147. package/dist/svelte/runtime-log.js +19 -0
  148. package/dist/svelte/runtime.d.ts +9 -0
  149. package/dist/svelte/runtime.d.ts.map +1 -0
  150. package/dist/svelte/runtime.js +27 -0
  151. package/dist/svelte/sharing/README.md +38 -0
  152. package/dist/svelte/sharing/components/ShareButton.svelte +57 -0
  153. package/dist/svelte/sharing/components/ShareButton.svelte.d.ts +11 -0
  154. package/dist/svelte/sharing/components/ShareButton.svelte.d.ts.map +1 -0
  155. package/dist/svelte/sharing/components/ShareDialog.svelte +222 -0
  156. package/dist/svelte/sharing/components/ShareDialog.svelte.d.ts +8 -0
  157. package/dist/svelte/sharing/components/ShareDialog.svelte.d.ts.map +1 -0
  158. package/dist/svelte/sharing/components/ShareLoader.svelte +19 -0
  159. package/dist/svelte/sharing/components/ShareLoader.svelte.d.ts +7 -0
  160. package/dist/svelte/sharing/components/ShareLoader.svelte.d.ts.map +1 -0
  161. package/dist/svelte/sharing/index.d.ts +20 -0
  162. package/dist/svelte/sharing/index.d.ts.map +1 -0
  163. package/dist/svelte/sharing/index.js +19 -0
  164. package/dist/svelte/sharing/runtime.d.ts +44 -0
  165. package/dist/svelte/sharing/runtime.d.ts.map +1 -0
  166. package/dist/svelte/sharing/runtime.js +81 -0
  167. package/dist/svelte/sharing/state.svelte.d.ts +28 -0
  168. package/dist/svelte/sharing/state.svelte.d.ts.map +1 -0
  169. package/dist/svelte/sharing/state.svelte.js +101 -0
  170. package/dist/svelte/sharing/styles.css +8 -0
  171. package/dist/svelte/state.svelte.d.ts +38 -0
  172. package/dist/svelte/state.svelte.d.ts.map +1 -0
  173. package/dist/svelte/state.svelte.js +102 -0
  174. package/dist/svelte/styles.css +2 -0
  175. package/dist/svelte/uploader.d.ts +17 -0
  176. package/dist/svelte/uploader.d.ts.map +1 -0
  177. package/dist/svelte/uploader.js +9 -0
  178. package/dist/uploads/adapters/local/index.d.ts +9 -0
  179. package/dist/uploads/adapters/local/index.d.ts.map +1 -0
  180. package/dist/uploads/adapters/local/index.js +12 -0
  181. package/dist/uploads/adapters/local/index.js.map +1 -0
  182. package/dist/uploads/adapters/local/local-storage.descriptor.d.ts +24 -0
  183. package/dist/uploads/adapters/local/local-storage.descriptor.d.ts.map +1 -0
  184. package/dist/uploads/adapters/local/local-storage.descriptor.js +20 -0
  185. package/dist/uploads/adapters/local/local-storage.descriptor.js.map +1 -0
  186. package/dist/uploads/adapters/local/local-storage.impl.d.ts +123 -0
  187. package/dist/uploads/adapters/local/local-storage.impl.d.ts.map +1 -0
  188. package/dist/uploads/adapters/local/local-storage.impl.js +231 -0
  189. package/dist/uploads/adapters/local/local-storage.impl.js.map +1 -0
  190. package/dist/uploads/adapters/local/uploads-adapter-local.plugin.d.ts +9 -0
  191. package/dist/uploads/adapters/local/uploads-adapter-local.plugin.d.ts.map +1 -0
  192. package/dist/uploads/adapters/local/uploads-adapter-local.plugin.js +41 -0
  193. package/dist/uploads/adapters/local/uploads-adapter-local.plugin.js.map +1 -0
  194. package/dist/uploads/client/helper.d.ts +26 -0
  195. package/dist/uploads/client/helper.d.ts.map +1 -0
  196. package/dist/uploads/client/helper.js +27 -0
  197. package/dist/uploads/client/helper.js.map +1 -0
  198. package/dist/uploads/client/index.d.ts +11 -0
  199. package/dist/uploads/client/index.d.ts.map +1 -0
  200. package/dist/uploads/client/index.js +9 -0
  201. package/dist/uploads/client/index.js.map +1 -0
  202. package/dist/uploads/client/sharing-client.d.ts +45 -0
  203. package/dist/uploads/client/sharing-client.d.ts.map +1 -0
  204. package/dist/uploads/client/sharing-client.js +153 -0
  205. package/dist/uploads/client/sharing-client.js.map +1 -0
  206. package/dist/uploads/client/uploads-client.d.ts +200 -0
  207. package/dist/uploads/client/uploads-client.d.ts.map +1 -0
  208. package/dist/uploads/client/uploads-client.js +487 -0
  209. package/dist/uploads/client/uploads-client.js.map +1 -0
  210. package/dist/uploads/docs/uploads.docs.descriptor.d.ts +4 -0
  211. package/dist/uploads/docs/uploads.docs.descriptor.d.ts.map +1 -0
  212. package/dist/uploads/docs/uploads.docs.descriptor.js +65 -0
  213. package/dist/uploads/docs/uploads.docs.descriptor.js.map +1 -0
  214. package/dist/uploads/docs/uploads.share-links.docs.descriptor.d.ts +22 -0
  215. package/dist/uploads/docs/uploads.share-links.docs.descriptor.d.ts.map +1 -0
  216. package/dist/uploads/docs/uploads.share-links.docs.descriptor.js +86 -0
  217. package/dist/uploads/docs/uploads.share-links.docs.descriptor.js.map +1 -0
  218. package/dist/uploads/index.d.ts +12 -0
  219. package/dist/uploads/index.d.ts.map +1 -0
  220. package/dist/uploads/index.js +13 -0
  221. package/dist/uploads/index.js.map +1 -0
  222. package/dist/uploads/schemas/common.d.ts +135 -0
  223. package/dist/uploads/schemas/common.d.ts.map +1 -0
  224. package/dist/uploads/schemas/common.js +152 -0
  225. package/dist/uploads/schemas/common.js.map +1 -0
  226. package/dist/uploads/schemas/forms.d.ts +59 -0
  227. package/dist/uploads/schemas/forms.d.ts.map +1 -0
  228. package/dist/uploads/schemas/forms.js +41 -0
  229. package/dist/uploads/schemas/forms.js.map +1 -0
  230. package/dist/uploads/schemas/index.d.ts +18 -0
  231. package/dist/uploads/schemas/index.d.ts.map +1 -0
  232. package/dist/uploads/schemas/index.js +13 -0
  233. package/dist/uploads/schemas/index.js.map +1 -0
  234. package/dist/uploads/schemas/records.d.ts +81 -0
  235. package/dist/uploads/schemas/records.d.ts.map +1 -0
  236. package/dist/uploads/schemas/records.js +82 -0
  237. package/dist/uploads/schemas/records.js.map +1 -0
  238. package/dist/uploads/schemas/requests.d.ts +32 -0
  239. package/dist/uploads/schemas/requests.d.ts.map +1 -0
  240. package/dist/uploads/schemas/requests.js +30 -0
  241. package/dist/uploads/schemas/requests.js.map +1 -0
  242. package/dist/uploads/schemas/shares.d.ts +67 -0
  243. package/dist/uploads/schemas/shares.d.ts.map +1 -0
  244. package/dist/uploads/schemas/shares.js +39 -0
  245. package/dist/uploads/schemas/shares.js.map +1 -0
  246. package/dist/uploads/server/backend.d.ts +8 -0
  247. package/dist/uploads/server/backend.d.ts.map +1 -0
  248. package/dist/uploads/server/backend.js +11 -0
  249. package/dist/uploads/server/backend.js.map +1 -0
  250. package/dist/uploads/server/config.d.ts +5 -0
  251. package/dist/uploads/server/config.d.ts.map +1 -0
  252. package/dist/uploads/server/config.js +38 -0
  253. package/dist/uploads/server/config.js.map +1 -0
  254. package/dist/uploads/server/service.d.ts +77 -0
  255. package/dist/uploads/server/service.d.ts.map +1 -0
  256. package/dist/uploads/server/service.js +152 -0
  257. package/dist/uploads/server/service.js.map +1 -0
  258. package/dist/uploads/server/storage-client.d.ts +11 -0
  259. package/dist/uploads/server/storage-client.d.ts.map +1 -0
  260. package/dist/uploads/server/storage-client.js +23 -0
  261. package/dist/uploads/server/storage-client.js.map +1 -0
  262. package/dist/uploads/server/storage.d.ts +40 -0
  263. package/dist/uploads/server/storage.d.ts.map +1 -0
  264. package/dist/uploads/server/storage.js +59 -0
  265. package/dist/uploads/server/storage.js.map +1 -0
  266. package/dist/uploads/uploads.plugin.d.ts +11 -0
  267. package/dist/uploads/uploads.plugin.d.ts.map +1 -0
  268. package/dist/uploads/uploads.plugin.js +89 -0
  269. package/dist/uploads/uploads.plugin.js.map +1 -0
  270. package/dist/utils/attempt.d.ts +27 -0
  271. package/dist/utils/attempt.d.ts.map +1 -0
  272. package/dist/utils/attempt.js +39 -0
  273. package/dist/utils/attempt.js.map +1 -0
  274. package/dist/utils/failure-message.d.ts +8 -0
  275. package/dist/utils/failure-message.d.ts.map +1 -0
  276. package/dist/utils/failure-message.js +28 -0
  277. package/dist/utils/failure-message.js.map +1 -0
  278. package/package.json +257 -4
package/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 VIBES DEV LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
6
+ associated documentation files (the "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
9
+ following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all copies or substantial
12
+ portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
15
+ LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
16
+ EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
18
+ USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,96 @@
1
- # Temporary Holding Version
1
+ # @vibesdotdev/media
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Universal media contracts for the vibes platform: stable artifact-revision identity plus three runtime kinds — `media/capture` (pixels in), `media/image-transform` (bytes in, bytes out), and `media/motion` (what the pixels are doing across time) — with runtime-resolved uploads and Svelte adapters on top.
4
+
5
+ ## Install
6
+
7
+ The package is workspace-only:
8
+
9
+ ```jsonc
10
+ // package.json
11
+ "dependencies": {
12
+ "@vibesdotdev/media": "workspace:*"
13
+ }
14
+ ```
15
+
16
+ ## Use
17
+
18
+ Capture a screenshot through a provider, transform image bytes, or upload a file — always through the runtime, never through direct imports of a provider:
19
+
20
+ ```ts
21
+ import type { CaptureProvider } from '@vibesdotdev/media';
22
+
23
+ const provider = (await runtime
24
+ .query('media/capture')
25
+ .withId('bridge.screen')
26
+ .resolve()) as CaptureProvider;
27
+
28
+ const shot = await provider.capture({ format: 'png' });
29
+ // shot.data is Uint8Array
30
+ ```
31
+
32
+ ```ts
33
+ import { getVibesUploadsClient } from '@vibesdotdev/media/uploads/client';
34
+
35
+ const uploads = await getVibesUploadsClient(runtime);
36
+ const file = await uploads.upload({
37
+ file: buffer,
38
+ kind: 'chat',
39
+ sourceApp: 'chat',
40
+ sourceId: roomId
41
+ });
42
+ ```
43
+
44
+ ## Contracts
45
+
46
+ - [SPEC.md](./SPEC.md) — package contract: artifact references, the three runtime kinds, hard rules, full entrypoint list.
47
+ - [src/svelte/SPEC.md](./src/svelte/SPEC.md) — tree-bound capture composition and compatibility handoff.
48
+ - [src/uploads/SPEC.md](./src/uploads/SPEC.md) — uploads surface: `uploads/store` kind, client, schemas, local adapter.
49
+ - [src/svelte/sharing/SPEC.md](./src/svelte/sharing/SPEC.md) — revocable share-link Svelte surface.
50
+ - [src/uploads/README.md](./src/uploads/README.md) — uploads quick tour.
51
+
52
+ ## Upload storage and validation
53
+
54
+ Hosts set `config['media.uploads'].localPath` and compose
55
+ `@vibesdotdev/media/uploads/adapters/local/node`. The runtime-resolved local
56
+ adapter uses that root for save, read, and delete. Relative roots resolve
57
+ against the bound workspace; an omitted root uses `uploads`. Absolute roots
58
+ are supported, and paths cannot escape the selected root.
59
+
60
+ `validateUpload` and `uploadLimitsSchema` are exported from `./uploads/schemas`.
61
+ The default cap is 50 MiB with the exported MIME allowlist. A caller may replace
62
+ either limit. Caps must be positive safe integers; a malformed cap or allowlist
63
+ is refused instead of compared against. `validateUpload` returns
64
+ `INVALID_INPUT/upload-limits-invalid` with legacy code `INVALID_LIMITS` and
65
+ consumes the parsed snapshot; the HTTP client reports the same schema's
66
+ malformed caps as `upload-limits-invalid`, while an unreadable or throwing
67
+ request is `upload-options-invalid`. Valid caps still reject oversized files
68
+ as `upload-file-too-large`.
69
+
70
+ The root entrypoint contains the universal media contract and semantic capture
71
+ client. Implementations resolve through runtime kinds; Svelte components and
72
+ state are available only through explicit `./svelte` subpaths. Universal plugins
73
+ contain no consumer, CLI, or process implementation loaders.
74
+
75
+ ## Verification
76
+
77
+ ```bash
78
+ bun run lint
79
+ bun run rules
80
+ bun run check
81
+ bun run test
82
+ bun run build
83
+ ```
84
+
85
+ Capture UI hosts compose mediaPlugin and runtimeClientPlugin. Retain one
86
+ createMediaCaptureState() result for a sibling loader/panel, or wrap the panel
87
+ in CaptureLoader for context. mediaCaptureState is a factory alias, so former
88
+ singleton callers must migrate. The runtime owns byte sessions; each tree owns
89
+ its browser URLs. The uploads plugin separately registers uploads and
90
+ uploads-storage clients.
91
+
92
+ Check includes source, tests, fixtures and Svelte TypeScript. Tests combine
93
+ Bun contracts with real in-process Svelte mounting under Vitest/Happy DOM.
94
+ Sharing and uploader helpers have helper proof; they are not component proof.
95
+ Build emits core declarations/JavaScript and separately packages Svelte
96
+ components/styles, excluding tests and fixtures.
@@ -0,0 +1,6 @@
1
+ import { type Frame } from '../schemas/motion-frame.ts';
2
+ export { MAX_FRAME_PIXELS } from '../schemas/motion-frame.ts';
3
+ /** Compatibility guards delegate geometry and buffer validation to the schema owner. */
4
+ export declare function assertFrame(frame: Frame): void;
5
+ export declare function assertFrameSequence(frames: readonly Frame[]): void;
6
+ //# sourceMappingURL=frame-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-guard.d.ts","sourceRoot":"","sources":["../../src/analyzers/frame-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAE5G,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE9C;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,IAAI,CAElE"}
@@ -0,0 +1,10 @@
1
+ import { FrameSchema, FrameSequenceSchema, parseMotionInput } from "../schemas/motion-frame.js";
2
+ export { MAX_FRAME_PIXELS } from "../schemas/motion-frame.js";
3
+ /** Compatibility guards delegate geometry and buffer validation to the schema owner. */
4
+ export function assertFrame(frame) {
5
+ parseMotionInput(FrameSchema, frame);
6
+ }
7
+ export function assertFrameSequence(frames) {
8
+ parseMotionInput(FrameSequenceSchema, [...frames]);
9
+ }
10
+ //# sourceMappingURL=frame-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-guard.js","sourceRoot":"","sources":["../../src/analyzers/frame-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAc,MAAM,4BAA4B,CAAC;AAE5G,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,wFAAwF;AACxF,MAAM,UAAU,WAAW,CAAC,KAAY;IACvC,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAwB;IAC3D,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Motion Math — pure kernels
3
+ *
4
+ * The numeric core of the `media/motion` reference analyzer, kept free of any
5
+ * runtime/schema wiring so it can be unit-tested directly and reused by other
6
+ * providers. Everything here operates on `Frame` structs and typed arrays; no
7
+ * FS, no native, no async.
8
+ *
9
+ * Luma convention: values are kept in 0..255 float space through reduction,
10
+ * then scalar summaries are normalized to 0..1 at the boundary. Motion energy
11
+ * works on per-frame zero-mean, unit-variance luma so cross-correlation lands
12
+ * in ~[-1, 1] and the opponent subtraction cleanly cancels non-directional
13
+ * structure.
14
+ */
15
+ import type { Frame } from '../schemas/motion-frame.ts';
16
+ import type { FrameDiffResult, TemporalStatsResult, OpticalFlowResult, MotionEnergyResult, MotionDirection } from '../schemas/motion-analysis.ts';
17
+ /** A luma plane reduced from a frame. */
18
+ export interface LumaPlane {
19
+ data: Float32Array;
20
+ width: number;
21
+ height: number;
22
+ }
23
+ /**
24
+ * Reduce a frame to a single-channel luma plane, optionally box-downsampled by
25
+ * an integer factor. Multi-channel frames are collapsed via Rec.601 luma.
26
+ */
27
+ export declare function toLuma(frame: Frame, downscale?: number): LumaPlane;
28
+ /** Absolute luma difference between two frames. */
29
+ export declare function frameDiff(a: Frame, b: Frame, opts?: {
30
+ downscale?: number;
31
+ threshold?: number;
32
+ includeMap?: boolean;
33
+ }): FrameDiffResult;
34
+ /** Per-pixel temporal mean + std (Welford) over a sequence. */
35
+ export declare function temporalStats(frames: Frame[], opts?: {
36
+ downscale?: number;
37
+ includeMaps?: boolean;
38
+ }): TemporalStatsResult;
39
+ /** Block-matching optical flow between two frames. */
40
+ export declare function opticalFlow(a: Frame, b: Frame, opts?: {
41
+ downscale?: number;
42
+ blockSize?: number;
43
+ searchRadius?: number;
44
+ step?: number;
45
+ minConfidence?: number;
46
+ }): OpticalFlowResult;
47
+ /** Pick an integer downscale so the longer edge is ≤ maxDim. */
48
+ export declare function autoDownscale(frame: Frame, maxDim: number): number;
49
+ /**
50
+ * Reichardt / lag-1 opponent motion energy over a sequence.
51
+ *
52
+ * For every consecutive pair (t, t+1) and every candidate shift s, accumulate
53
+ * the normalized cross-correlation corr(s). The opponent response for a
54
+ * direction is R(s) = mean_t[corr(s)] − mean_t[corr(−s)]: coherent drift by
55
+ * velocity v drives corr(v)→high, corr(−v)→low, so R(v) is large; temporally
56
+ * independent twinkle gives corr(any)≈0 so R≈0. That subtraction is what
57
+ * separates a motion carrier from a static or twinkling background.
58
+ */
59
+ export declare function motionEnergy(frames: Frame[], opts?: {
60
+ downscale?: number;
61
+ maxDim?: number;
62
+ directions?: MotionDirection[];
63
+ shiftRadius?: number;
64
+ includeMap?: boolean;
65
+ }): MotionEnergyResult;
66
+ //# sourceMappingURL=motion-math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-math.d.ts","sourceRoot":"","sources":["../../src/analyzers/motion-math.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EACX,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EAEjB,kBAAkB,EAClB,eAAe,EAGf,MAAM,+BAA+B,CAAC;AAEvC,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAID;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,SAAI,GAAG,SAAS,CAgC7D;AAGD,mDAAmD;AACnD,wBAAgB,SAAS,CACxB,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,KAAK,EACR,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACzE,eAAe,CA2CjB;AAED,+DAA+D;AAC/D,wBAAgB,aAAa,CAC5B,MAAM,EAAE,KAAK,EAAE,EACf,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtD,mBAAmB,CAgDrB;AAwBD,sDAAsD;AACtD,wBAAgB,WAAW,CAC1B,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,KAAK,EACR,IAAI,GAAE;IACL,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CAClB,GACJ,iBAAiB,CA6DnB;AAmDD,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIlE;AAeD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,KAAK,EAAE,EACf,IAAI,GAAE;IACL,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CAChB,GACJ,kBAAkB,CAwEpB"}
@@ -0,0 +1,356 @@
1
+ /**
2
+ * Motion Math — pure kernels
3
+ *
4
+ * The numeric core of the `media/motion` reference analyzer, kept free of any
5
+ * runtime/schema wiring so it can be unit-tested directly and reused by other
6
+ * providers. Everything here operates on `Frame` structs and typed arrays; no
7
+ * FS, no native, no async.
8
+ *
9
+ * Luma convention: values are kept in 0..255 float space through reduction,
10
+ * then scalar summaries are normalized to 0..1 at the boundary. Motion energy
11
+ * works on per-frame zero-mean, unit-variance luma so cross-correlation lands
12
+ * in ~[-1, 1] and the opponent subtraction cleanly cancels non-directional
13
+ * structure.
14
+ */
15
+ const REC_601 = { r: 0.299, g: 0.587, b: 0.114 };
16
+ /**
17
+ * Reduce a frame to a single-channel luma plane, optionally box-downsampled by
18
+ * an integer factor. Multi-channel frames are collapsed via Rec.601 luma.
19
+ */
20
+ export function toLuma(frame, downscale = 1) {
21
+ const { data, width, height } = frame;
22
+ const channels = frame.channels ?? 1;
23
+ const ds = Math.max(1, Math.floor(downscale));
24
+ const outW = Math.max(1, Math.floor(width / ds));
25
+ const outH = Math.max(1, Math.floor(height / ds));
26
+ const out = new Float32Array(outW * outH);
27
+ for (let oy = 0; oy < outH; oy++) {
28
+ for (let ox = 0; ox < outW; ox++) {
29
+ let sum = 0;
30
+ let count = 0;
31
+ for (let by = 0; by < ds; by++) {
32
+ const y = oy * ds + by;
33
+ if (y >= height)
34
+ break;
35
+ const row = y * width;
36
+ for (let bx = 0; bx < ds; bx++) {
37
+ const x = ox * ds + bx;
38
+ if (x >= width)
39
+ break;
40
+ const idx = (row + x) * channels;
41
+ const luma = channels === 1
42
+ ? data[idx]
43
+ : REC_601.r * data[idx] + REC_601.g * data[idx + 1] + REC_601.b * data[idx + 2];
44
+ sum += luma;
45
+ count++;
46
+ }
47
+ }
48
+ out[oy * outW + ox] = count > 0 ? sum / count : 0;
49
+ }
50
+ }
51
+ return { data: out, width: outW, height: outH };
52
+ }
53
+ /** Absolute luma difference between two frames. */
54
+ export function frameDiff(a, b, opts = {}) {
55
+ const ds = opts.downscale ?? 1;
56
+ const la = toLuma(a, ds);
57
+ const lb = toLuma(b, ds);
58
+ const n = la.data.length;
59
+ const thr = (opts.threshold ?? 0.08) * 255;
60
+ const map = opts.includeMap ? new Float32Array(n) : undefined;
61
+ let sumDiff = 0;
62
+ let changed = 0;
63
+ let minX = la.width;
64
+ let minY = la.height;
65
+ let maxX = -1;
66
+ let maxY = -1;
67
+ for (let i = 0; i < n; i++) {
68
+ const d = Math.abs(la.data[i] - lb.data[i]);
69
+ sumDiff += d;
70
+ if (map)
71
+ map[i] = d / 255;
72
+ if (d > thr) {
73
+ changed++;
74
+ const x = i % la.width;
75
+ const y = (i / la.width) | 0;
76
+ if (x < minX)
77
+ minX = x;
78
+ if (y < minY)
79
+ minY = y;
80
+ if (x > maxX)
81
+ maxX = x;
82
+ if (y > maxY)
83
+ maxY = y;
84
+ }
85
+ }
86
+ const bbox = maxX >= 0 ? { x: minX, y: minY, width: maxX - minX + 1, height: maxY - minY + 1 } : null;
87
+ const result = {
88
+ magnitude: sumDiff / n / 255,
89
+ changedFraction: changed / n,
90
+ width: la.width,
91
+ height: la.height,
92
+ bbox
93
+ };
94
+ if (map)
95
+ result.map = map;
96
+ return result;
97
+ }
98
+ /** Per-pixel temporal mean + std (Welford) over a sequence. */
99
+ export function temporalStats(frames, opts = {}) {
100
+ const ds = opts.downscale ?? 1;
101
+ const planes = frames.map((f) => toLuma(f, ds));
102
+ const { width, height } = planes[0];
103
+ const n = width * height;
104
+ const mean = new Float32Array(n);
105
+ const m2 = new Float32Array(n);
106
+ for (let t = 0; t < planes.length; t++) {
107
+ const plane = planes[t].data;
108
+ const count = t + 1;
109
+ for (let i = 0; i < n; i++) {
110
+ const x = plane[i];
111
+ const delta = x - mean[i];
112
+ mean[i] += delta / count;
113
+ m2[i] += delta * (x - mean[i]);
114
+ }
115
+ }
116
+ const std = new Float32Array(n);
117
+ let sumStd = 0;
118
+ let peak = 0;
119
+ const t = planes.length;
120
+ for (let i = 0; i < n; i++) {
121
+ const s = Math.sqrt(m2[i] / t);
122
+ std[i] = s;
123
+ sumStd += s;
124
+ if (s > peak)
125
+ peak = s;
126
+ }
127
+ const result = {
128
+ meanStd: sumStd / n / 255,
129
+ peakStd: peak / 255,
130
+ width,
131
+ height
132
+ };
133
+ if (opts.includeMaps) {
134
+ const stdNorm = new Float32Array(n);
135
+ const meanNorm = new Float32Array(n);
136
+ for (let i = 0; i < n; i++) {
137
+ stdNorm[i] = std[i] / 255;
138
+ meanNorm[i] = mean[i] / 255;
139
+ }
140
+ result.std = stdNorm;
141
+ result.mean = meanNorm;
142
+ }
143
+ return result;
144
+ }
145
+ /** Sum of absolute differences for a block of `a` against `b` shifted by (dx,dy). */
146
+ function blockSad(a, b, width, bx, by, block, dx, dy) {
147
+ let sad = 0;
148
+ for (let yy = 0; yy < block; yy++) {
149
+ const ay = (by + yy) * width;
150
+ const bBy = (by + dy + yy) * width;
151
+ for (let xx = 0; xx < block; xx++) {
152
+ sad += Math.abs(a[ay + bx + xx] - b[bBy + bx + dx + xx]);
153
+ }
154
+ }
155
+ return sad;
156
+ }
157
+ /** Block-matching optical flow between two frames. */
158
+ export function opticalFlow(a, b, opts = {}) {
159
+ const ds = opts.downscale ?? 1;
160
+ const la = toLuma(a, ds);
161
+ const lb = toLuma(b, ds);
162
+ const { width, height } = la;
163
+ const block = Math.max(2, opts.blockSize ?? 16);
164
+ const search = Math.max(1, opts.searchRadius ?? 8);
165
+ const step = Math.max(1, opts.step ?? block);
166
+ const minConf = opts.minConfidence ?? 0.05;
167
+ const vectors = [];
168
+ let sumDx = 0;
169
+ let sumDy = 0;
170
+ let sumConf = 0;
171
+ let used = 0;
172
+ for (let by = 0; by + block <= height; by += step) {
173
+ for (let bx = 0; bx + block <= width; bx += step) {
174
+ let best = Infinity;
175
+ let second = Infinity;
176
+ let bestDx = 0;
177
+ let bestDy = 0;
178
+ for (let dy = -search; dy <= search; dy++) {
179
+ if (by + dy < 0 || by + dy + block > height)
180
+ continue;
181
+ for (let dx = -search; dx <= search; dx++) {
182
+ if (bx + dx < 0 || bx + dx + block > width)
183
+ continue;
184
+ const sad = blockSad(la.data, lb.data, width, bx, by, block, dx, dy);
185
+ if (sad < best) {
186
+ second = best;
187
+ best = sad;
188
+ bestDx = dx;
189
+ bestDy = dy;
190
+ }
191
+ else if (sad < second) {
192
+ second = sad;
193
+ }
194
+ }
195
+ }
196
+ const confidence = Number.isFinite(second) && second > 0 ? Math.min(1, (second - best) / second) : 0;
197
+ vectors.push({ x: bx, y: by, dx: bestDx, dy: bestDy, confidence });
198
+ if (confidence >= minConf) {
199
+ sumDx += bestDx * confidence;
200
+ sumDy += bestDy * confidence;
201
+ sumConf += confidence;
202
+ used++;
203
+ }
204
+ }
205
+ }
206
+ return {
207
+ vectors,
208
+ meanDx: sumConf > 0 ? sumDx / sumConf : 0,
209
+ meanDy: sumConf > 0 ? sumDy / sumConf : 0,
210
+ meanConfidence: used > 0 ? sumConf / used : 0,
211
+ width,
212
+ height,
213
+ blockSize: block
214
+ };
215
+ }
216
+ /** Reduce a frame to a zero-mean, unit-variance luma plane. */
217
+ function normalizedPlane(frame, downscale) {
218
+ const plane = toLuma(frame, downscale);
219
+ const n = plane.data.length;
220
+ let sum = 0;
221
+ for (let i = 0; i < n; i++)
222
+ sum += plane.data[i];
223
+ const mean = sum / n;
224
+ let varSum = 0;
225
+ for (let i = 0; i < n; i++) {
226
+ const d = plane.data[i] - mean;
227
+ varSum += d * d;
228
+ }
229
+ const std = Math.sqrt(varSum / n) || 1;
230
+ const out = new Float32Array(n);
231
+ for (let i = 0; i < n; i++)
232
+ out[i] = (plane.data[i] - mean) / std;
233
+ return { data: out, width: plane.width, height: plane.height };
234
+ }
235
+ /**
236
+ * Normalized cross-correlation between planes `a` and `b` where `b` is sampled
237
+ * at a spatial shift (dx,dy). Averaged over the in-bounds overlap only, so the
238
+ * normalization stays fair near the borders. Inputs are unit-variance, so the
239
+ * result is ~[-1, 1].
240
+ */
241
+ function shiftedCorrelation(a, b, width, height, dx, dy) {
242
+ let sum = 0;
243
+ let count = 0;
244
+ for (let y = 0; y < height; y++) {
245
+ const yb = y + dy;
246
+ if (yb < 0 || yb >= height)
247
+ continue;
248
+ const rowA = y * width;
249
+ const rowB = yb * width;
250
+ for (let x = 0; x < width; x++) {
251
+ const xb = x + dx;
252
+ if (xb < 0 || xb >= width)
253
+ continue;
254
+ sum += a[rowA + x] * b[rowB + xb];
255
+ count++;
256
+ }
257
+ }
258
+ return count > 0 ? sum / count : 0;
259
+ }
260
+ /** Pick an integer downscale so the longer edge is ≤ maxDim. */
261
+ export function autoDownscale(frame, maxDim) {
262
+ const longer = Math.max(frame.width, frame.height);
263
+ if (longer <= maxDim)
264
+ return 1;
265
+ return Math.max(1, Math.ceil(longer / maxDim));
266
+ }
267
+ function generateDirections(radius) {
268
+ const dirs = [];
269
+ const r2 = radius * radius;
270
+ for (let dy = -radius; dy <= radius; dy++) {
271
+ for (let dx = -radius; dx <= radius; dx++) {
272
+ if (dx === 0 && dy === 0)
273
+ continue;
274
+ if (dx * dx + dy * dy > r2)
275
+ continue;
276
+ dirs.push({ dx, dy });
277
+ }
278
+ }
279
+ return dirs;
280
+ }
281
+ /**
282
+ * Reichardt / lag-1 opponent motion energy over a sequence.
283
+ *
284
+ * For every consecutive pair (t, t+1) and every candidate shift s, accumulate
285
+ * the normalized cross-correlation corr(s). The opponent response for a
286
+ * direction is R(s) = mean_t[corr(s)] − mean_t[corr(−s)]: coherent drift by
287
+ * velocity v drives corr(v)→high, corr(−v)→low, so R(v) is large; temporally
288
+ * independent twinkle gives corr(any)≈0 so R≈0. That subtraction is what
289
+ * separates a motion carrier from a static or twinkling background.
290
+ */
291
+ export function motionEnergy(frames, opts = {}) {
292
+ const ds = opts.downscale ?? autoDownscale(frames[0], opts.maxDim ?? 96);
293
+ const planes = frames.map((f) => normalizedPlane(f, ds));
294
+ const { width, height } = planes[0];
295
+ const directions = opts.directions ?? generateDirections(opts.shiftRadius ?? 4);
296
+ // Correlation is symmetric under (frame-swap + shift-negate), so a single
297
+ // key per axis-signed shift lets us look up corr(−s) for the opponent term.
298
+ const key = (dx, dy) => `${dx},${dy}`;
299
+ const corrAccum = new Map();
300
+ // Every shift we will need a correlation for: the candidates and their
301
+ // negations.
302
+ const needed = new Map();
303
+ for (const d of directions) {
304
+ needed.set(key(d.dx, d.dy), d);
305
+ needed.set(key(-d.dx, -d.dy), { dx: -d.dx, dy: -d.dy });
306
+ }
307
+ const pairs = planes.length - 1;
308
+ for (let t = 0; t < pairs; t++) {
309
+ const a = planes[t].data;
310
+ const b = planes[t + 1].data;
311
+ for (const [k, d] of needed) {
312
+ const c = shiftedCorrelation(a, b, width, height, d.dx, d.dy);
313
+ corrAccum.set(k, (corrAccum.get(k) ?? 0) + c);
314
+ }
315
+ }
316
+ const meanCorr = (dx, dy) => (corrAccum.get(key(dx, dy)) ?? 0) / pairs;
317
+ const perDirection = directions.map((d) => ({
318
+ dx: d.dx,
319
+ dy: d.dy,
320
+ strength: meanCorr(d.dx, d.dy) - meanCorr(-d.dx, -d.dy)
321
+ }));
322
+ perDirection.sort((p, q) => q.strength - p.strength);
323
+ const dominant = perDirection[0] ?? { dx: 0, dy: 0, strength: 0 };
324
+ const coherence = Math.max(0, Math.min(1, dominant.strength));
325
+ const result = {
326
+ coherence,
327
+ dominant,
328
+ perDirection: perDirection.slice(0, 8),
329
+ width,
330
+ height
331
+ };
332
+ if (opts.includeMap) {
333
+ // Per-pixel motion energy for the dominant direction, averaged over pairs.
334
+ const map = new Float32Array(width * height);
335
+ for (let t = 0; t < pairs; t++) {
336
+ const a = planes[t].data;
337
+ const b = planes[t + 1].data;
338
+ for (let y = 0; y < height; y++) {
339
+ const yb = y + dominant.dy;
340
+ if (yb < 0 || yb >= height)
341
+ continue;
342
+ const rowA = y * width;
343
+ const rowB = yb * width;
344
+ for (let x = 0; x < width; x++) {
345
+ const xb = x + dominant.dx;
346
+ if (xb < 0 || xb >= width)
347
+ continue;
348
+ map[rowA + x] += (a[rowA + x] * b[rowB + xb]) / pairs;
349
+ }
350
+ }
351
+ }
352
+ result.map = map;
353
+ }
354
+ return result;
355
+ }
356
+ //# sourceMappingURL=motion-math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-math.js","sourceRoot":"","sources":["../../src/analyzers/motion-math.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Reference Motion Analyzer — `media/motion` implementation
3
+ *
4
+ * Pure-TS `MotionAnalyzer` built on the `motion-math` kernels. Universal: no
5
+ * FS, no native, no async I/O — runs identically on consumer machines and in
6
+ * Cloudflare workers, which is why it ships inside `@vibesdotdev/media` rather
7
+ * than a provider package. A heavier provider (WASM SIMD, native, GPU) can
8
+ * register its own `media/motion` descriptor and win resolution in its scope.
9
+ *
10
+ * The runtime instantiates the default-exported class for each resolving runtime.
11
+ */
12
+ import type { Frame } from '../schemas/motion-frame.ts';
13
+ import type { MotionAnalyzer } from '../interfaces/motion-analyzer.ts';
14
+ import type { FrameDiffOptions, FrameDiffResult, TemporalStatsOptions, TemporalStatsResult, OpticalFlowOptions, OpticalFlowResult, MotionEnergyOptions, MotionEnergyResult, MotionSummaryOptions, MotionSummary } from '../schemas/motion-analysis.ts';
15
+ export declare class ReferenceMotionAnalyzer implements MotionAnalyzer {
16
+ frameDiff(a: Frame, b: Frame, options?: FrameDiffOptions): Promise<FrameDiffResult>;
17
+ temporalStats(frames: Frame[], options?: TemporalStatsOptions): Promise<TemporalStatsResult>;
18
+ opticalFlow(a: Frame, b: Frame, options?: OpticalFlowOptions): Promise<OpticalFlowResult>;
19
+ motionEnergy(frames: Frame[], options?: MotionEnergyOptions): Promise<MotionEnergyResult>;
20
+ summarize(frames: Frame[], options?: MotionSummaryOptions): Promise<MotionSummary>;
21
+ }
22
+ export default ReferenceMotionAnalyzer;
23
+ //# sourceMappingURL=reference-motion-analyzer.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-motion-analyzer.impl.d.ts","sourceRoot":"","sources":["../../src/analyzers/reference-motion-analyzer.impl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EACX,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,MAAM,+BAA+B,CAAC;AAQvC,qBAAa,uBAAwB,YAAW,cAAc;IACvD,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAKvF,aAAa,CAClB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,mBAAmB,CAAC;IAIzB,WAAW,CAChB,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,KAAK,EACR,OAAO,GAAE,kBAAuB,GAC9B,OAAO,CAAC,iBAAiB,CAAC;IAKvB,YAAY,CACjB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,mBAAwB,GAC/B,OAAO,CAAC,kBAAkB,CAAC;IAIxB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC;CAsC5F;AAED,eAAe,uBAAuB,CAAC"}