@hraness/slopcamera 3.2.4

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 (441) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +60 -0
  3. package/PRIVACY.md +46 -0
  4. package/README.md +311 -0
  5. package/SECURITY.md +21 -0
  6. package/apps/desktop/README.md +966 -0
  7. package/apps/desktop/analysis/protocol.ts +223 -0
  8. package/apps/desktop/application/capability-binding.ts +594 -0
  9. package/apps/desktop/application/context.ts +97 -0
  10. package/apps/desktop/application/creative-iteration.ts +1385 -0
  11. package/apps/desktop/application/default-registry.ts +146 -0
  12. package/apps/desktop/application/directing-contract.ts +218 -0
  13. package/apps/desktop/application/directing-plan.ts +178 -0
  14. package/apps/desktop/application/errors.ts +18 -0
  15. package/apps/desktop/application/gateway-port.ts +867 -0
  16. package/apps/desktop/application/html-overlay-browser-runtime.ts +687 -0
  17. package/apps/desktop/application/html-overlay-integrity.ts +337 -0
  18. package/apps/desktop/application/html-overlay-renderer.ts +45 -0
  19. package/apps/desktop/application/index.ts +13 -0
  20. package/apps/desktop/application/operation-completion-checkpoint.ts +333 -0
  21. package/apps/desktop/application/operation-effects.ts +94 -0
  22. package/apps/desktop/application/operation.ts +224 -0
  23. package/apps/desktop/application/operations/analysis/faces.ts +244 -0
  24. package/apps/desktop/application/operations/analysis/music.ts +248 -0
  25. package/apps/desktop/application/operations/analysis/project-auto-zooms.ts +302 -0
  26. package/apps/desktop/application/operations/analysis/project-inactivity.ts +381 -0
  27. package/apps/desktop/application/operations/analysis/scenes.ts +272 -0
  28. package/apps/desktop/application/operations/analysis/shared.ts +202 -0
  29. package/apps/desktop/application/operations/derive/edit-batch.ts +967 -0
  30. package/apps/desktop/application/operations/derive/follow-faces.ts +454 -0
  31. package/apps/desktop/application/operations/edit/bind-candidate-revision.ts +91 -0
  32. package/apps/desktop/application/operations/edit/create-candidate-revision.ts +377 -0
  33. package/apps/desktop/application/operations/edit/create-revision.ts +255 -0
  34. package/apps/desktop/application/operations/edit/freeze-revision.ts +182 -0
  35. package/apps/desktop/application/operations/gateway/image.ts +41 -0
  36. package/apps/desktop/application/operations/gateway/index.ts +17 -0
  37. package/apps/desktop/application/operations/gateway/shared.ts +122 -0
  38. package/apps/desktop/application/operations/gateway/speech.ts +41 -0
  39. package/apps/desktop/application/operations/gateway/transcription.ts +42 -0
  40. package/apps/desktop/application/operations/gateway/video.ts +41 -0
  41. package/apps/desktop/application/operations/index.ts +31 -0
  42. package/apps/desktop/application/operations/iteration/create-candidate.ts +240 -0
  43. package/apps/desktop/application/operations/iteration/create-matrix.ts +117 -0
  44. package/apps/desktop/application/operations/iteration/select.ts +155 -0
  45. package/apps/desktop/application/operations/iteration/shared.ts +250 -0
  46. package/apps/desktop/application/operations/media/audio-effects.ts +376 -0
  47. package/apps/desktop/application/operations/media/binding.ts +79 -0
  48. package/apps/desktop/application/operations/media/capabilities.ts +112 -0
  49. package/apps/desktop/application/operations/media/color-grade.ts +343 -0
  50. package/apps/desktop/application/operations/media/html-overlay.ts +802 -0
  51. package/apps/desktop/application/operations/media/index.ts +8 -0
  52. package/apps/desktop/application/operations/media/ingest.ts +303 -0
  53. package/apps/desktop/application/operations/media/overlay.ts +729 -0
  54. package/apps/desktop/application/operations/media/shared.ts +845 -0
  55. package/apps/desktop/application/operations/media/transform-platform.ts +120 -0
  56. package/apps/desktop/application/operations/project/commit-edits.ts +2054 -0
  57. package/apps/desktop/application/operations/project/promote-selection.ts +495 -0
  58. package/apps/desktop/application/operations/project/snapshot.ts +95 -0
  59. package/apps/desktop/application/operations/recording/index.ts +5 -0
  60. package/apps/desktop/application/operations/recording/pause.ts +34 -0
  61. package/apps/desktop/application/operations/recording/resume.ts +34 -0
  62. package/apps/desktop/application/operations/recording/shared.ts +199 -0
  63. package/apps/desktop/application/operations/recording/start.ts +169 -0
  64. package/apps/desktop/application/operations/recording/stop.ts +34 -0
  65. package/apps/desktop/application/operations/render/bind-candidate-output.ts +324 -0
  66. package/apps/desktop/application/operations/render/materialize-selection.ts +322 -0
  67. package/apps/desktop/application/operations/render/project-caption-plan.ts +287 -0
  68. package/apps/desktop/application/operations/render/project-plan.ts +939 -0
  69. package/apps/desktop/application/operations/render/project-spatial-receipt.ts +70 -0
  70. package/apps/desktop/application/operations/render/project.ts +1922 -0
  71. package/apps/desktop/application/operations/shared.ts +67 -0
  72. package/apps/desktop/application/operations/slopcamera-portable.ts +1188 -0
  73. package/apps/desktop/application/operations/slopcamera-visuals.ts +784 -0
  74. package/apps/desktop/application/operations/spatial-project.ts +209 -0
  75. package/apps/desktop/application/operations/spatial-render.ts +415 -0
  76. package/apps/desktop/application/operations/spatial-scene.ts +97 -0
  77. package/apps/desktop/application/operations/studio.ts +143 -0
  78. package/apps/desktop/application/output-publication-lease.ts +163 -0
  79. package/apps/desktop/application/project-publication-lease.ts +233 -0
  80. package/apps/desktop/application/project-store.ts +196 -0
  81. package/apps/desktop/application/receipts.ts +533 -0
  82. package/apps/desktop/application/registry.ts +182 -0
  83. package/apps/desktop/application/spatial-assets.ts +675 -0
  84. package/apps/desktop/application/spatial-compositor-cadence.ts +23 -0
  85. package/apps/desktop/application/spatial-project-authority.ts +35 -0
  86. package/apps/desktop/application/spatial-project-lease.ts +126 -0
  87. package/apps/desktop/application/spatial-project-render-preparation.ts +225 -0
  88. package/apps/desktop/application/spatial-project-store.ts +286 -0
  89. package/apps/desktop/application/spatial-render-projection.ts +201 -0
  90. package/apps/desktop/application/spatial-render.ts +677 -0
  91. package/apps/desktop/application/spatial-spz.ts +44 -0
  92. package/apps/desktop/application/spatial-world-import.ts +135 -0
  93. package/apps/desktop/application/spatial-world-provenance.ts +46 -0
  94. package/apps/desktop/application/studio-port.ts +58 -0
  95. package/apps/desktop/application/verified-receipt-reconciliation.ts +1574 -0
  96. package/apps/desktop/capture/protocol.ts +689 -0
  97. package/apps/desktop/cli/analyzer.ts +406 -0
  98. package/apps/desktop/cli/args.ts +3181 -0
  99. package/apps/desktop/cli/asset-ingest.ts +747 -0
  100. package/apps/desktop/cli/atomic-render-effects.ts +210 -0
  101. package/apps/desktop/cli/atomic-render-platform.ts +205 -0
  102. package/apps/desktop/cli/atomic-render.ts +50 -0
  103. package/apps/desktop/cli/audio-analysis.ts +252 -0
  104. package/apps/desktop/cli/bounded-map.ts +39 -0
  105. package/apps/desktop/cli/bundle-service.ts +256 -0
  106. package/apps/desktop/cli/capabilities.ts +212 -0
  107. package/apps/desktop/cli/capture-bundle.ts +1117 -0
  108. package/apps/desktop/cli/command-host-resources.ts +251 -0
  109. package/apps/desktop/cli/commands.ts +6836 -0
  110. package/apps/desktop/cli/directing-blob.ts +291 -0
  111. package/apps/desktop/cli/directing-media.ts +517 -0
  112. package/apps/desktop/cli/directing-quote.ts +89 -0
  113. package/apps/desktop/cli/directing-service.ts +288 -0
  114. package/apps/desktop/cli/emoji-assets.ts +538 -0
  115. package/apps/desktop/cli/errors.ts +29 -0
  116. package/apps/desktop/cli/face-analysis-service.ts +940 -0
  117. package/apps/desktop/cli/filter-script.ts +76 -0
  118. package/apps/desktop/cli/gateway-application-port.ts +1142 -0
  119. package/apps/desktop/cli/gateway-credential.ts +81 -0
  120. package/apps/desktop/cli/gateway-media-artifacts.ts +723 -0
  121. package/apps/desktop/cli/gateway-media-catalog.ts +922 -0
  122. package/apps/desktop/cli/gateway-media-service.ts +3106 -0
  123. package/apps/desktop/cli/gateway-media-signature.ts +122 -0
  124. package/apps/desktop/cli/gateway-provider-options.ts +562 -0
  125. package/apps/desktop/cli/gateway-scene-provider.ts +391 -0
  126. package/apps/desktop/cli/help.ts +501 -0
  127. package/apps/desktop/cli/html-overlay-gpu.ts +97 -0
  128. package/apps/desktop/cli/html-overlay-renderer.ts +2478 -0
  129. package/apps/desktop/cli/io.ts +290 -0
  130. package/apps/desktop/cli/main.ts +123 -0
  131. package/apps/desktop/cli/media-effects-service.ts +885 -0
  132. package/apps/desktop/cli/media-ingest-model.ts +364 -0
  133. package/apps/desktop/cli/media-ingest-platform.ts +227 -0
  134. package/apps/desktop/cli/media-ingest-program.ts +200 -0
  135. package/apps/desktop/cli/media-ingest.ts +30 -0
  136. package/apps/desktop/cli/music-analysis-service.ts +434 -0
  137. package/apps/desktop/cli/mutation-lock.ts +530 -0
  138. package/apps/desktop/cli/native-assets.d.ts +12 -0
  139. package/apps/desktop/cli/native-media-runtime.macos.ts +7 -0
  140. package/apps/desktop/cli/overlay-playback.ts +177 -0
  141. package/apps/desktop/cli/paths.ts +265 -0
  142. package/apps/desktop/cli/portable-surface.ts +242 -0
  143. package/apps/desktop/cli/project-camera-receipt.ts +112 -0
  144. package/apps/desktop/cli/project-face-camera.ts +394 -0
  145. package/apps/desktop/cli/project-inactivity-service.ts +552 -0
  146. package/apps/desktop/cli/project-media-integrity.ts +121 -0
  147. package/apps/desktop/cli/project-renderer.ts +1526 -0
  148. package/apps/desktop/cli/project-service.ts +519 -0
  149. package/apps/desktop/cli/project-state-transaction.ts +520 -0
  150. package/apps/desktop/cli/query-limits.ts +1 -0
  151. package/apps/desktop/cli/recording-controller.ts +1567 -0
  152. package/apps/desktop/cli/recording-daemon.ts +931 -0
  153. package/apps/desktop/cli/recording-ref.ts +56 -0
  154. package/apps/desktop/cli/renamed-environment.ts +6 -0
  155. package/apps/desktop/cli/renderer.ts +1439 -0
  156. package/apps/desktop/cli/run-cli-test-helper.ts +60 -0
  157. package/apps/desktop/cli/scene-analysis-service.ts +879 -0
  158. package/apps/desktop/cli/spatial-compositor-verifier.ts +213 -0
  159. package/apps/desktop/cli/spatial-project-service.ts +90 -0
  160. package/apps/desktop/cli/spatial-scene-service.ts +105 -0
  161. package/apps/desktop/cli/spatial-world-service.ts +39 -0
  162. package/apps/desktop/cli/speech-analysis-service.ts +682 -0
  163. package/apps/desktop/cli/studio-assemble.ts +58 -0
  164. package/apps/desktop/cli/studio-command.ts +60 -0
  165. package/apps/desktop/cli/studio-custody.ts +60 -0
  166. package/apps/desktop/cli/studio-encode.ts +216 -0
  167. package/apps/desktop/cli/studio-exr.ts +52 -0
  168. package/apps/desktop/cli/studio-files.ts +179 -0
  169. package/apps/desktop/cli/studio-output-validation.ts +162 -0
  170. package/apps/desktop/cli/studio-process.ts +145 -0
  171. package/apps/desktop/cli/studio-runtime.ts +77 -0
  172. package/apps/desktop/cli/studio-scaffold.ts +70 -0
  173. package/apps/desktop/cli/studio-service.ts +301 -0
  174. package/apps/desktop/cli/studio-spatial-asset.ts +248 -0
  175. package/apps/desktop/cli/studio-template-names.ts +3 -0
  176. package/apps/desktop/cli/studio-workflow.ts +19 -0
  177. package/apps/desktop/cli/time.ts +25 -0
  178. package/apps/desktop/cli/workflow-code.ts +584 -0
  179. package/apps/desktop/cli/workflow-runs.ts +576 -0
  180. package/apps/desktop/code/advanced.ts +139 -0
  181. package/apps/desktop/code/application-node-planner.ts +1288 -0
  182. package/apps/desktop/code/compiler.ts +329 -0
  183. package/apps/desktop/code/contracts.ts +13 -0
  184. package/apps/desktop/code/creative-recipes.ts +94 -0
  185. package/apps/desktop/code/define-workflow.ts +115 -0
  186. package/apps/desktop/code/editing.ts +284 -0
  187. package/apps/desktop/code/file-candidate-provenance.ts +420 -0
  188. package/apps/desktop/code/file-candidate.ts +69 -0
  189. package/apps/desktop/code/graph-builder.ts +10 -0
  190. package/apps/desktop/code/host-resource-policy.ts +55 -0
  191. package/apps/desktop/code/plan-contracts.ts +159 -0
  192. package/apps/desktop/code/planning.ts +361 -0
  193. package/apps/desktop/code/public.ts +134 -0
  194. package/apps/desktop/code/reference-projection.ts +62 -0
  195. package/apps/desktop/code/run-contracts.ts +466 -0
  196. package/apps/desktop/code/run-store.ts +2478 -0
  197. package/apps/desktop/code/runtime-identity.ts +328 -0
  198. package/apps/desktop/code/scheduler.ts +3067 -0
  199. package/apps/desktop/code/semantic-builder.ts +1436 -0
  200. package/apps/desktop/code/source-bundle.ts +1641 -0
  201. package/apps/desktop/code/source-typecheck.ts +211 -0
  202. package/apps/desktop/code/testing.ts +79 -0
  203. package/apps/desktop/code/worker-client.ts +1675 -0
  204. package/apps/desktop/code/worker-effects.ts +141 -0
  205. package/apps/desktop/code/worker-entry.ts +435 -0
  206. package/apps/desktop/code/worker-lease-guardian.ts +179 -0
  207. package/apps/desktop/code/worker-process-identity.ts +484 -0
  208. package/apps/desktop/code/worker-protocol.ts +211 -0
  209. package/apps/desktop/code/workflow-effects.ts +132 -0
  210. package/apps/desktop/contracts/analysis.ts +949 -0
  211. package/apps/desktop/contracts/edit.ts +576 -0
  212. package/apps/desktop/contracts/index.ts +9 -0
  213. package/apps/desktop/contracts/media-effects.ts +139 -0
  214. package/apps/desktop/contracts/project-render.ts +644 -0
  215. package/apps/desktop/contracts/project.ts +740 -0
  216. package/apps/desktop/contracts/recording.ts +1434 -0
  217. package/apps/desktop/contracts/render.ts +334 -0
  218. package/apps/desktop/contracts/runtime.ts +155 -0
  219. package/apps/desktop/contracts/spatial-compositor.ts +58 -0
  220. package/apps/desktop/contracts/spatial-project.ts +159 -0
  221. package/apps/desktop/contracts/spatial-world.ts +48 -0
  222. package/apps/desktop/contracts/video-effects.ts +120 -0
  223. package/apps/desktop/core/alignment-apply.ts +400 -0
  224. package/apps/desktop/core/audio-alignment.ts +466 -0
  225. package/apps/desktop/core/auto-zoom.ts +209 -0
  226. package/apps/desktop/core/canonical-json.ts +14 -0
  227. package/apps/desktop/core/emoji.ts +210 -0
  228. package/apps/desktop/core/events.ts +409 -0
  229. package/apps/desktop/core/face-framing.ts +533 -0
  230. package/apps/desktop/core/face-tracks.ts +326 -0
  231. package/apps/desktop/core/inactivity.ts +137 -0
  232. package/apps/desktop/core/index.ts +30 -0
  233. package/apps/desktop/core/intervals.ts +123 -0
  234. package/apps/desktop/core/montage.ts +236 -0
  235. package/apps/desktop/core/music-analysis.ts +518 -0
  236. package/apps/desktop/core/plan.ts +244 -0
  237. package/apps/desktop/core/project-auto-zoom.ts +75 -0
  238. package/apps/desktop/core/project-camera-spatial.ts +676 -0
  239. package/apps/desktop/core/project-camera.ts +403 -0
  240. package/apps/desktop/core/project-captions.ts +888 -0
  241. package/apps/desktop/core/project-inactivity.ts +125 -0
  242. package/apps/desktop/core/project-metadata.ts +927 -0
  243. package/apps/desktop/core/project-plan.ts +375 -0
  244. package/apps/desktop/core/project-render-plan.ts +303 -0
  245. package/apps/desktop/core/project-time.ts +469 -0
  246. package/apps/desktop/core/render-plan.ts +442 -0
  247. package/apps/desktop/core/scene-cache.ts +174 -0
  248. package/apps/desktop/core/scene-sampling.ts +448 -0
  249. package/apps/desktop/core/spatial-compositor.ts +22 -0
  250. package/apps/desktop/core/spatial-durability.ts +99 -0
  251. package/apps/desktop/core/spatial-project.ts +169 -0
  252. package/apps/desktop/core/spatial-shot-clock.ts +32 -0
  253. package/apps/desktop/core/speech-analysis.ts +333 -0
  254. package/apps/desktop/core/storage.ts +970 -0
  255. package/apps/desktop/core/time-map.ts +91 -0
  256. package/apps/desktop/core/time.ts +61 -0
  257. package/apps/desktop/core/video-effects.ts +660 -0
  258. package/apps/desktop/dist/cli/NebulaSans-Bold-26se8aek.otf +0 -0
  259. package/apps/desktop/dist/cli/NebulaSans-Bold-bcz7y08t.woff2 +0 -0
  260. package/apps/desktop/dist/cli/NebulaSans-Book-5ax05zvn.woff2 +0 -0
  261. package/apps/desktop/dist/cli/NebulaSans-Book-8cenzchw.otf +0 -0
  262. package/apps/desktop/dist/cli/main.js +5086 -0
  263. package/apps/desktop/html-overlay/catalog.ts +171 -0
  264. package/apps/desktop/html-overlay/contracts.ts +372 -0
  265. package/apps/desktop/html-overlay/execution-profile.ts +77 -0
  266. package/apps/desktop/html-overlay/index.ts +98 -0
  267. package/apps/desktop/html-overlay/libraries.ts +263 -0
  268. package/apps/desktop/html-overlay/random.ts +49 -0
  269. package/apps/desktop/html-overlay/runtime.ts +813 -0
  270. package/apps/desktop/html-overlay/scaffolds.ts +792 -0
  271. package/apps/desktop/html-overlay/spark-runtime.ts +88 -0
  272. package/apps/desktop/html-overlay/spatial-splat-runtime.ts +60 -0
  273. package/apps/desktop/html-overlay/spatial.ts +720 -0
  274. package/apps/desktop/studio/assets/README.md +39 -0
  275. package/apps/desktop/studio/assets/contracts.ts +129 -0
  276. package/apps/desktop/studio/assets/network.ts +64 -0
  277. package/apps/desktop/studio/assets/poly-haven.ts +148 -0
  278. package/apps/desktop/studio/drivers/blender_driver.py +466 -0
  279. package/apps/desktop/studio/drivers/cadquery_driver.py +176 -0
  280. package/apps/desktop/studio/education/driver.py +308 -0
  281. package/apps/desktop/studio/education/lesson.py +180 -0
  282. package/apps/desktop/studio/education/toolkit.py +249 -0
  283. package/apps/desktop/workflows/chaptered-demo.ts +48 -0
  284. package/apps/desktop/workflows/creative-iteration.ts +107 -0
  285. package/apps/desktop/workflows/creative-selection.ts +92 -0
  286. package/apps/desktop/workflows/fragments.ts +486 -0
  287. package/apps/desktop/workflows/index.ts +93 -0
  288. package/apps/desktop/workflows/polished-screen-demo.ts +128 -0
  289. package/apps/desktop/workflows/scene-direction.ts +12 -0
  290. package/apps/desktop/workflows/social-variants.ts +75 -0
  291. package/apps/desktop/workflows/talking-head-cleanup.ts +53 -0
  292. package/dist/NebulaSans-Bold-26se8aek.otf +0 -0
  293. package/dist/NebulaSans-Bold-bcz7y08t.woff2 +0 -0
  294. package/dist/NebulaSans-Book-5ax05zvn.woff2 +0 -0
  295. package/dist/NebulaSans-Book-8cenzchw.otf +0 -0
  296. package/dist/cli.js +479 -0
  297. package/dist/code/advanced.js +270 -0
  298. package/dist/code/index.js +2240 -0
  299. package/dist/generate.js +24 -0
  300. package/dist/host-resources.js +26 -0
  301. package/dist/index-42zsesc1.js +2257 -0
  302. package/dist/index-7308egqr.js +48 -0
  303. package/dist/index-8txs6fkn.js +712 -0
  304. package/dist/index-mcy8z0br.js +192 -0
  305. package/dist/index-p63wavx0.js +2029 -0
  306. package/dist/index-r7gdhmsp.js +424 -0
  307. package/dist/index-sh6xbav6.js +1219 -0
  308. package/dist/index-z1w83f81.js +4 -0
  309. package/dist/index-z7239b4h.js +2363 -0
  310. package/dist/index-zfeg9hmw.js +2013 -0
  311. package/dist/index.js +241 -0
  312. package/dist/operations.js +29 -0
  313. package/dist/skill-install-dh0ntqba.js +10 -0
  314. package/dist/vectorize/worker.js +142 -0
  315. package/dist/workflow.js +16 -0
  316. package/docs/README.md +38 -0
  317. package/docs/studio.md +215 -0
  318. package/examples/studio/blender/README.md +26 -0
  319. package/examples/studio/blender/character.py +152 -0
  320. package/examples/studio/blender/cloth.py +101 -0
  321. package/examples/studio/blender/color_chart.py +29 -0
  322. package/examples/studio/blender/fluid.py +78 -0
  323. package/examples/studio/blender/import_model.py +74 -0
  324. package/examples/studio/blender/product.py +53 -0
  325. package/examples/studio/blender/shaded_street.py +481 -0
  326. package/examples/studio/blender/studio_scene.py +147 -0
  327. package/examples/studio/cadquery/README.md +13 -0
  328. package/examples/studio/cadquery/bracket.py +36 -0
  329. package/examples/studio/cadquery/import_step.py +12 -0
  330. package/examples/studio/education/README.md +46 -0
  331. package/examples/studio/education/lesson.json +99 -0
  332. package/examples/studio/education/scene.py +7 -0
  333. package/examples/studio/hybrid-scene.ts +96 -0
  334. package/examples/studio/native-workflow.ts +14 -0
  335. package/examples/studio/vgpu/README.md +64 -0
  336. package/examples/studio/vgpu/heat-field.mjs +290 -0
  337. package/package.json +304 -0
  338. package/packages/scene/src/index.ts +1 -0
  339. package/packages/scene/src/scene.ts +215 -0
  340. package/schema/diagram.schema.json +334 -0
  341. package/skills/slopcamera/SKILL.md +45 -0
  342. package/skills/slopcamera/agents/openai.yaml +4 -0
  343. package/skills/slopcamera/references/customization.md +77 -0
  344. package/skills/slopcamera/references/diagrams.md +153 -0
  345. package/skills/slopcamera/references/directed-scenes.md +42 -0
  346. package/skills/slopcamera/references/directing-video.md +18 -0
  347. package/skills/slopcamera/references/educational-video.md +26 -0
  348. package/skills/slopcamera/references/gateway-media.md +134 -0
  349. package/skills/slopcamera/references/install.md +62 -0
  350. package/skills/slopcamera/references/native-studio.md +31 -0
  351. package/skills/slopcamera/references/reference-led-3d.md +140 -0
  352. package/skills/slopcamera/references/rubber-stamp-examples/poster-example-1.jpg +0 -0
  353. package/skills/slopcamera/references/rubber-stamp-examples/poster-example-2.jpg +0 -0
  354. package/skills/slopcamera/references/rubber-stamp-examples/stamp-style-1.png +0 -0
  355. package/skills/slopcamera/references/rubber-stamp-examples/stamp-style-2.png +0 -0
  356. package/skills/slopcamera/references/rubber-stamp-field-notes.md +144 -0
  357. package/skills/slopcamera/references/vectorization.md +29 -0
  358. package/skills/slopcamera/references/video-projects.md +187 -0
  359. package/skills/slopcamera/references/visual-communication.md +120 -0
  360. package/skills/slopcamera/references/workflows-sdk.md +45 -0
  361. package/skills/slopcamera/scripts/compose-rubber-stamp-field-note.ts +229 -0
  362. package/src/artifacts.ts +106 -0
  363. package/src/assets/fonts/nebula-sans/LICENSE.txt +96 -0
  364. package/src/assets/fonts/nebula-sans/NebulaSans-Bold.otf +0 -0
  365. package/src/assets/fonts/nebula-sans/NebulaSans-Bold.woff2 +0 -0
  366. package/src/assets/fonts/nebula-sans/NebulaSans-Book.otf +0 -0
  367. package/src/assets/fonts/nebula-sans/NebulaSans-Book.woff2 +0 -0
  368. package/src/assets/fonts/nebula-sans/PROVENANCE.md +21 -0
  369. package/src/assets.d.ts +9 -0
  370. package/src/cli.ts +601 -0
  371. package/src/cloud-errors.ts +26 -0
  372. package/src/code/advanced.ts +10 -0
  373. package/src/code/boundary.ts +21 -0
  374. package/src/code/canonical-json.ts +129 -0
  375. package/src/code/compiler.ts +953 -0
  376. package/src/code/contracts.ts +576 -0
  377. package/src/code/define-workflow.ts +334 -0
  378. package/src/code/errors.ts +41 -0
  379. package/src/code/graph-builder.ts +945 -0
  380. package/src/code/index.ts +121 -0
  381. package/src/code/json-snapshot.ts +899 -0
  382. package/src/code/json-utf8.ts +88 -0
  383. package/src/code/portable-builder.ts +136 -0
  384. package/src/code/projection.ts +378 -0
  385. package/src/code/public-operations.ts +450 -0
  386. package/src/code/runtime.ts +580 -0
  387. package/src/code/sha256.ts +36 -0
  388. package/src/config.ts +180 -0
  389. package/src/desktop.ts +253 -0
  390. package/src/fs.ts +10 -0
  391. package/src/generate.ts +704 -0
  392. package/src/host-resource-posix.ts +161 -0
  393. package/src/host-resources.ts +1749 -0
  394. package/src/icons.ts +58 -0
  395. package/src/index.ts +200 -0
  396. package/src/label-layout.ts +130 -0
  397. package/src/layout.ts +413 -0
  398. package/src/lint.ts +127 -0
  399. package/src/mcp/boundary.ts +354 -0
  400. package/src/mcp/index.ts +33 -0
  401. package/src/mcp/server.ts +272 -0
  402. package/src/mcp/tools.ts +963 -0
  403. package/src/mcp/types.ts +71 -0
  404. package/src/operations.ts +775 -0
  405. package/src/parse.ts +861 -0
  406. package/src/process-environment.ts +17 -0
  407. package/src/render.ts +437 -0
  408. package/src/skill-install.ts +49 -0
  409. package/src/spatial-scene/authoring.ts +27 -0
  410. package/src/spatial-scene/camera-track.ts +83 -0
  411. package/src/spatial-scene/contracts.ts +277 -0
  412. package/src/spatial-scene/evaluate.ts +145 -0
  413. package/src/spatial-scene/gltf.ts +558 -0
  414. package/src/spatial-scene/identity.ts +260 -0
  415. package/src/spatial-scene/index.ts +10 -0
  416. package/src/spatial-scene/inspect.ts +68 -0
  417. package/src/spatial-scene/math.ts +280 -0
  418. package/src/spatial-scene/patch.ts +131 -0
  419. package/src/spatial-scene/time.ts +53 -0
  420. package/src/studio/contracts.ts +129 -0
  421. package/src/studio/index.ts +2 -0
  422. package/src/studio/plan.ts +156 -0
  423. package/src/studio/shared.ts +41 -0
  424. package/src/theme.ts +68 -0
  425. package/src/tldr.ts +474 -0
  426. package/src/types.ts +212 -0
  427. package/src/vectorize/archive.ts +101 -0
  428. package/src/vectorize/command.ts +797 -0
  429. package/src/vectorize/index.ts +27 -0
  430. package/src/vectorize/limits.ts +61 -0
  431. package/src/vectorize/metrics.ts +351 -0
  432. package/src/vectorize/pixels.ts +323 -0
  433. package/src/vectorize/supervisor.ts +339 -0
  434. package/src/vectorize/svg.ts +188 -0
  435. package/src/vectorize/tool.ts +542 -0
  436. package/src/vectorize/types.ts +113 -0
  437. package/src/vectorize/vectorize.ts +634 -0
  438. package/src/vectorize/worker-protocol.ts +40 -0
  439. package/src/vectorize/worker.ts +209 -0
  440. package/src/version.ts +1 -0
  441. package/src/workflow.ts +409 -0
@@ -0,0 +1,469 @@
1
+ import type { SourceInterval } from "../contracts/edit";
2
+ import {
3
+ ProjectEditPlanV1Schema,
4
+ type ProjectEditPlanV1,
5
+ type ProjectPlacementV1,
6
+ type ProjectSyncMap,
7
+ } from "../contracts/project";
8
+
9
+ export interface ProjectSyncSegment {
10
+ readonly asset: SourceInterval;
11
+ readonly project: SourceInterval;
12
+ }
13
+
14
+ export interface ProjectOutputSegment {
15
+ readonly output: SourceInterval;
16
+ readonly project: SourceInterval;
17
+ readonly speed: number;
18
+ }
19
+
20
+ export interface ProjectOutputTimeMap {
21
+ readonly durationUs: number;
22
+ readonly segments: readonly ProjectOutputSegment[];
23
+ }
24
+
25
+ export interface PlacementProjectSlice {
26
+ readonly asset: SourceInterval;
27
+ readonly placementId: ProjectPlacementV1["placementId"];
28
+ readonly project: SourceInterval;
29
+ }
30
+
31
+ export interface PlacementOutputSlice extends PlacementProjectSlice {
32
+ readonly output: SourceInterval;
33
+ readonly speed: number;
34
+ }
35
+
36
+ function requireSafeInteger(value: number, label: string): void {
37
+ if (!Number.isSafeInteger(value)) {
38
+ throw new RangeError(`${label} must be a safe integer.`);
39
+ }
40
+ }
41
+
42
+ function roundedRatio(numerator: bigint, denominator: bigint): bigint {
43
+ if (denominator <= 0n || numerator < 0n) {
44
+ throw new RangeError("Interpolation requires a nonnegative numerator and positive denominator.");
45
+ }
46
+ const quotient = numerator / denominator;
47
+ const remainder = numerator % denominator;
48
+ return quotient + (remainder * 2n >= denominator ? 1n : 0n);
49
+ }
50
+
51
+ /**
52
+ * Interpolate one integer-microsecond clock onto another without an unsafe
53
+ * intermediate Number multiplication. Endpoints are exact and interior values
54
+ * use deterministic half-up rounding.
55
+ */
56
+ export function interpolateMicroseconds(
57
+ value: number,
58
+ inputStartUs: number,
59
+ inputEndUs: number,
60
+ outputStartUs: number,
61
+ outputEndUs: number,
62
+ ): number {
63
+ for (const [candidate, label] of [
64
+ [value, "value"],
65
+ [inputStartUs, "inputStartUs"],
66
+ [inputEndUs, "inputEndUs"],
67
+ [outputStartUs, "outputStartUs"],
68
+ [outputEndUs, "outputEndUs"],
69
+ ] as const) {
70
+ requireSafeInteger(candidate, label);
71
+ }
72
+ if (inputEndUs <= inputStartUs || outputEndUs <= outputStartUs) {
73
+ throw new RangeError("Interpolation ranges must increase strictly.");
74
+ }
75
+ if (value < inputStartUs || value > inputEndUs) {
76
+ throw new RangeError("Interpolation value lies outside its input range.");
77
+ }
78
+ if (value === inputStartUs) return outputStartUs;
79
+ if (value === inputEndUs) return outputEndUs;
80
+
81
+ const inputDelta = BigInt(inputEndUs) - BigInt(inputStartUs);
82
+ const outputDelta = BigInt(outputEndUs) - BigInt(outputStartUs);
83
+ const offset = BigInt(value) - BigInt(inputStartUs);
84
+ const result = BigInt(outputStartUs) + roundedRatio(offset * outputDelta, inputDelta);
85
+ const output = Number(result);
86
+ if (!Number.isSafeInteger(output)) {
87
+ throw new RangeError("Interpolated microseconds exceed the safe integer range.");
88
+ }
89
+ return output;
90
+ }
91
+
92
+ export function projectSyncSegments(sync: ProjectSyncMap): readonly ProjectSyncSegment[] {
93
+ const segments: ProjectSyncSegment[] = [];
94
+ for (let index = 1; index < sync.anchors.length; index += 1) {
95
+ const left = sync.anchors[index - 1];
96
+ const right = sync.anchors[index];
97
+ if (left === undefined || right === undefined) continue;
98
+ segments.push({
99
+ asset: { endUs: right.assetTimeUs, startUs: left.assetTimeUs },
100
+ project: { endUs: right.projectTimeUs, startUs: left.projectTimeUs },
101
+ });
102
+ }
103
+ return segments;
104
+ }
105
+
106
+ function firstProjectAnchorAtLeast(
107
+ sync: ProjectSyncMap,
108
+ projectTimeUs: number,
109
+ ): number {
110
+ let low = 0;
111
+ let high = sync.anchors.length;
112
+ while (low < high) {
113
+ const middle = low + Math.floor((high - low) / 2);
114
+ if (sync.anchors[middle]!.projectTimeUs < projectTimeUs) {
115
+ low = middle + 1;
116
+ } else {
117
+ high = middle;
118
+ }
119
+ }
120
+ return low;
121
+ }
122
+
123
+ function firstProjectAnchorAfter(
124
+ sync: ProjectSyncMap,
125
+ projectTimeUs: number,
126
+ ): number {
127
+ let low = 0;
128
+ let high = sync.anchors.length;
129
+ while (low < high) {
130
+ const middle = low + Math.floor((high - low) / 2);
131
+ if (sync.anchors[middle]!.projectTimeUs <= projectTimeUs) {
132
+ low = middle + 1;
133
+ } else {
134
+ high = middle;
135
+ }
136
+ }
137
+ return low;
138
+ }
139
+
140
+ function projectSubrangeMapsToAssetDuration(
141
+ sync: ProjectSyncMap,
142
+ segmentIndex: number,
143
+ startUs: number,
144
+ endUs: number,
145
+ ): boolean {
146
+ const left = sync.anchors[segmentIndex];
147
+ const right = sync.anchors[segmentIndex + 1];
148
+ if (left === undefined || right === undefined || endUs <= startUs) {
149
+ return false;
150
+ }
151
+ return interpolateMicroseconds(
152
+ endUs,
153
+ left.projectTimeUs,
154
+ right.projectTimeUs,
155
+ left.assetTimeUs,
156
+ right.assetTimeUs,
157
+ ) > interpolateMicroseconds(
158
+ startUs,
159
+ left.projectTimeUs,
160
+ right.projectTimeUs,
161
+ left.assetTimeUs,
162
+ right.assetTimeUs,
163
+ );
164
+ }
165
+
166
+ /**
167
+ * Checks complete placement coverage without materializing or linearly
168
+ * scanning every sync segment. Only the two partial edge segments can collapse
169
+ * under integer clock interpolation; complete interior segments are strictly
170
+ * increasing by contract.
171
+ */
172
+ export function projectIntervalHasCompleteSyncCoverage(
173
+ sync: ProjectSyncMap,
174
+ range: SourceInterval,
175
+ ): boolean {
176
+ const first = sync.anchors[0];
177
+ const last = sync.anchors.at(-1);
178
+ if (
179
+ first === undefined
180
+ || last === undefined
181
+ || range.endUs <= range.startUs
182
+ || range.startUs < first.projectTimeUs
183
+ || range.endUs > last.projectTimeUs
184
+ ) {
185
+ return false;
186
+ }
187
+ const startSegment = firstProjectAnchorAfter(
188
+ sync,
189
+ range.startUs,
190
+ ) - 1;
191
+ const endSegment = firstProjectAnchorAtLeast(
192
+ sync,
193
+ range.endUs,
194
+ ) - 1;
195
+ if (startSegment < 0 || endSegment < startSegment) return false;
196
+ if (startSegment === endSegment) {
197
+ return projectSubrangeMapsToAssetDuration(
198
+ sync,
199
+ startSegment,
200
+ range.startUs,
201
+ range.endUs,
202
+ );
203
+ }
204
+ const firstSegmentEndUs = sync.anchors[startSegment + 1]?.projectTimeUs;
205
+ const lastSegmentStartUs = sync.anchors[endSegment]?.projectTimeUs;
206
+ return firstSegmentEndUs !== undefined
207
+ && lastSegmentStartUs !== undefined
208
+ && projectSubrangeMapsToAssetDuration(
209
+ sync,
210
+ startSegment,
211
+ range.startUs,
212
+ firstSegmentEndUs,
213
+ )
214
+ && projectSubrangeMapsToAssetDuration(
215
+ sync,
216
+ endSegment,
217
+ lastSegmentStartUs,
218
+ range.endUs,
219
+ );
220
+ }
221
+
222
+ function segmentAt(
223
+ segments: readonly ProjectSyncSegment[],
224
+ value: number,
225
+ clock: "asset" | "project",
226
+ ): ProjectSyncSegment | undefined {
227
+ const containing = segments.find(segment => (
228
+ segment[clock].startUs <= value && value < segment[clock].endUs
229
+ ));
230
+ if (containing !== undefined) return containing;
231
+ const final = segments.at(-1);
232
+ return final?.[clock].endUs === value ? final : undefined;
233
+ }
234
+
235
+ export function assetToProjectUs(sync: ProjectSyncMap, assetTimeUs: number): number | null {
236
+ const segment = segmentAt(projectSyncSegments(sync), assetTimeUs, "asset");
237
+ return segment === undefined
238
+ ? null
239
+ : interpolateMicroseconds(
240
+ assetTimeUs,
241
+ segment.asset.startUs,
242
+ segment.asset.endUs,
243
+ segment.project.startUs,
244
+ segment.project.endUs,
245
+ );
246
+ }
247
+
248
+ export function projectToAssetUs(sync: ProjectSyncMap, projectTimeUs: number): number | null {
249
+ const segment = segmentAt(projectSyncSegments(sync), projectTimeUs, "project");
250
+ return segment === undefined
251
+ ? null
252
+ : interpolateMicroseconds(
253
+ projectTimeUs,
254
+ segment.project.startUs,
255
+ segment.project.endUs,
256
+ segment.asset.startUs,
257
+ segment.asset.endUs,
258
+ );
259
+ }
260
+
261
+ function intersection(left: SourceInterval, right: SourceInterval): SourceInterval | null {
262
+ const startUs = Math.max(left.startUs, right.startUs);
263
+ const endUs = Math.min(left.endUs, right.endUs);
264
+ return endUs > startUs ? { endUs, startUs } : null;
265
+ }
266
+
267
+ export function mapAssetIntervalToProjectSlices(
268
+ placement: ProjectPlacementV1,
269
+ assetRange: SourceInterval,
270
+ ): readonly PlacementProjectSlice[] {
271
+ return projectSyncSegments(placement.sync).flatMap(segment => {
272
+ const asset = intersection(assetRange, segment.asset);
273
+ if (asset === null) return [];
274
+ const projectStartUs = interpolateMicroseconds(
275
+ asset.startUs,
276
+ segment.asset.startUs,
277
+ segment.asset.endUs,
278
+ segment.project.startUs,
279
+ segment.project.endUs,
280
+ );
281
+ const projectEndUs = interpolateMicroseconds(
282
+ asset.endUs,
283
+ segment.asset.startUs,
284
+ segment.asset.endUs,
285
+ segment.project.startUs,
286
+ segment.project.endUs,
287
+ );
288
+ if (projectEndUs <= projectStartUs) return [];
289
+ return [{
290
+ asset,
291
+ placementId: placement.placementId,
292
+ project: { endUs: projectEndUs, startUs: projectStartUs },
293
+ }];
294
+ });
295
+ }
296
+
297
+ export function mapProjectIntervalToAssetSlices(
298
+ placement: ProjectPlacementV1,
299
+ projectRange: SourceInterval,
300
+ ): readonly PlacementProjectSlice[] {
301
+ return projectSyncSegments(placement.sync).flatMap(segment => {
302
+ const project = intersection(projectRange, segment.project);
303
+ if (project === null) return [];
304
+ const assetStartUs = interpolateMicroseconds(
305
+ project.startUs,
306
+ segment.project.startUs,
307
+ segment.project.endUs,
308
+ segment.asset.startUs,
309
+ segment.asset.endUs,
310
+ );
311
+ const assetEndUs = interpolateMicroseconds(
312
+ project.endUs,
313
+ segment.project.startUs,
314
+ segment.project.endUs,
315
+ segment.asset.startUs,
316
+ segment.asset.endUs,
317
+ );
318
+ if (assetEndUs <= assetStartUs) return [];
319
+ return [{
320
+ asset: { endUs: assetEndUs, startUs: assetStartUs },
321
+ placementId: placement.placementId,
322
+ project,
323
+ }];
324
+ });
325
+ }
326
+
327
+ function speedAt(plan: ProjectEditPlanV1, projectTimeUs: number): number {
328
+ return plan.speed.find(speed => (
329
+ speed.range.startUs <= projectTimeUs && projectTimeUs < speed.range.endUs
330
+ ))?.rate ?? plan.baseSpeed;
331
+ }
332
+
333
+ export function buildProjectOutputTimeMap(input: ProjectEditPlanV1): ProjectOutputTimeMap {
334
+ const plan = ProjectEditPlanV1Schema.parse(input);
335
+ const segments: ProjectOutputSegment[] = [];
336
+ let outputCursorUs = 0;
337
+ for (const keep of plan.keep) {
338
+ const boundaries = new Set<number>([keep.startUs, keep.endUs]);
339
+ for (const speed of plan.speed) {
340
+ if (speed.range.startUs > keep.startUs && speed.range.startUs < keep.endUs) {
341
+ boundaries.add(speed.range.startUs);
342
+ }
343
+ if (speed.range.endUs > keep.startUs && speed.range.endUs < keep.endUs) {
344
+ boundaries.add(speed.range.endUs);
345
+ }
346
+ }
347
+ const ordered = [...boundaries].sort((left, right) => left - right);
348
+ for (let index = 1; index < ordered.length; index += 1) {
349
+ const startUs = ordered[index - 1];
350
+ const endUs = ordered[index];
351
+ if (startUs === undefined || endUs === undefined || endUs <= startUs) continue;
352
+ const speed = speedAt(plan, startUs);
353
+ const outputDurationUs = Math.max(1, Math.round((endUs - startUs) / speed));
354
+ segments.push({
355
+ output: { endUs: outputCursorUs + outputDurationUs, startUs: outputCursorUs },
356
+ project: { endUs, startUs },
357
+ speed,
358
+ });
359
+ outputCursorUs += outputDurationUs;
360
+ }
361
+ }
362
+ return { durationUs: outputCursorUs, segments };
363
+ }
364
+
365
+ function outputSegmentAt(
366
+ map: ProjectOutputTimeMap,
367
+ value: number,
368
+ clock: "output" | "project",
369
+ ): ProjectOutputSegment | undefined {
370
+ const containing = map.segments.find(segment => (
371
+ segment[clock].startUs <= value && value < segment[clock].endUs
372
+ ));
373
+ if (containing !== undefined) return containing;
374
+ if (clock === "project") {
375
+ return [...map.segments].reverse().find(segment => segment.project.endUs === value);
376
+ }
377
+ const final = map.segments.at(-1);
378
+ return final?.output.endUs === value ? final : undefined;
379
+ }
380
+
381
+ export function projectToOutputUs(map: ProjectOutputTimeMap, projectTimeUs: number): number | null {
382
+ const segment = outputSegmentAt(map, projectTimeUs, "project");
383
+ return segment === undefined
384
+ ? null
385
+ : interpolateMicroseconds(
386
+ projectTimeUs,
387
+ segment.project.startUs,
388
+ segment.project.endUs,
389
+ segment.output.startUs,
390
+ segment.output.endUs,
391
+ );
392
+ }
393
+
394
+ export function outputToProjectUs(map: ProjectOutputTimeMap, outputTimeUs: number): number | null {
395
+ const segment = outputSegmentAt(map, outputTimeUs, "output");
396
+ return segment === undefined
397
+ ? null
398
+ : interpolateMicroseconds(
399
+ outputTimeUs,
400
+ segment.output.startUs,
401
+ segment.output.endUs,
402
+ segment.project.startUs,
403
+ segment.project.endUs,
404
+ );
405
+ }
406
+
407
+ export function mapProjectIntervalToOutputSlices(
408
+ map: ProjectOutputTimeMap,
409
+ projectRange: SourceInterval,
410
+ ): readonly {
411
+ readonly output: SourceInterval;
412
+ readonly project: SourceInterval;
413
+ readonly speed: number;
414
+ }[] {
415
+ return map.segments.flatMap(segment => {
416
+ const project = intersection(projectRange, segment.project);
417
+ if (project === null) return [];
418
+ const outputStartUs = interpolateMicroseconds(
419
+ project.startUs,
420
+ segment.project.startUs,
421
+ segment.project.endUs,
422
+ segment.output.startUs,
423
+ segment.output.endUs,
424
+ );
425
+ const outputEndUs = interpolateMicroseconds(
426
+ project.endUs,
427
+ segment.project.startUs,
428
+ segment.project.endUs,
429
+ segment.output.startUs,
430
+ segment.output.endUs,
431
+ );
432
+ if (outputEndUs <= outputStartUs) return [];
433
+ return [{
434
+ output: { endUs: outputEndUs, startUs: outputStartUs },
435
+ project,
436
+ speed: segment.speed,
437
+ }];
438
+ });
439
+ }
440
+
441
+ export function mapPlacementToOutputSlices(
442
+ placement: ProjectPlacementV1,
443
+ map: ProjectOutputTimeMap,
444
+ ): readonly PlacementOutputSlice[] {
445
+ return map.segments.flatMap(outputSegment => (
446
+ mapProjectIntervalToAssetSlices(placement, outputSegment.project).flatMap(slice => {
447
+ const outputStartUs = interpolateMicroseconds(
448
+ slice.project.startUs,
449
+ outputSegment.project.startUs,
450
+ outputSegment.project.endUs,
451
+ outputSegment.output.startUs,
452
+ outputSegment.output.endUs,
453
+ );
454
+ const outputEndUs = interpolateMicroseconds(
455
+ slice.project.endUs,
456
+ outputSegment.project.startUs,
457
+ outputSegment.project.endUs,
458
+ outputSegment.output.startUs,
459
+ outputSegment.output.endUs,
460
+ );
461
+ if (outputEndUs <= outputStartUs) return [];
462
+ return [{
463
+ ...slice,
464
+ output: { endUs: outputEndUs, startUs: outputStartUs },
465
+ speed: outputSegment.speed,
466
+ }];
467
+ })
468
+ ));
469
+ }