@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,140 @@
1
+ # Reference-led Three.js and metallic treatments
2
+
3
+ Use this guide only when Slopcamera's complete local Code Mode host is available.
4
+ It ships in this repository alongside the thin desktop capture shell. The
5
+ portable `@hraness/slopcamera/code` and `@hraness/slopcamera/workflow`
6
+ entrypoints intentionally expose no HTML renderer, Three.js operation, or
7
+ arbitrary source execution. Those capabilities belong to the local host.
8
+
9
+ ## Separate reference generation from source execution
10
+
11
+ An image model may supply a visual reference. It must not supply executable
12
+ authority.
13
+
14
+ 1. Generate or select one reference image and preserve its exact artifact
15
+ record.
16
+ 2. Inspect the subject, silhouette, palette, proportions, negative space, and
17
+ intended polygon character.
18
+ 3. Run `slopcamera html scaffold three --output <scene.html>`. The command does
19
+ not overwrite an existing source.
20
+ 4. Edit only the scaffold's `createSubject()` region unless the requested
21
+ camera, lights, or timing require a reviewed change elsewhere.
22
+ 5. Run Code Mode checks and render a full-length 1x preview.
23
+ 6. Inspect the first, middle, and last frame plus at least two useful angles.
24
+ 7. Change the checked scene source, not a rendered frame. Render a final target
25
+ only after selection.
26
+
27
+ Do not collapse those stages into an operation that accepts JavaScript text.
28
+ Local Code Mode is trusted local code with the current user's authority. It
29
+ is not a sandbox. The reviewed physical source and its imports enter the graph
30
+ identity before an effect can execute.
31
+
32
+ ## Bind the reference to the reviewed scene
33
+
34
+ In a local Code Mode module, use the typed helper with the image artifact
35
+ and its projected media type:
36
+
37
+ ```ts
38
+ const generated = workflow.gateway.image("reference", imageOptions);
39
+ const reference = generated.select("outputs").at(0);
40
+ const binding = createThreeReferenceScaffoldInput(
41
+ reference,
42
+ reference.select("mediaType"),
43
+ );
44
+ const scene = workflow.media.htmlOverlay("scene", {
45
+ ...binding,
46
+ document: { path: "overlays/reviewed-scene.html" },
47
+ canvas: { deviceScaleFactor: 1, height: 1080, width: 1920 },
48
+ parameters: { explode: 0.35, orbitTurns: 1, zoom: 1 },
49
+ project,
50
+ range: { startUs: 0, endUs: 3_000_000 },
51
+ timing: { durationUs: 3_000_000, fps: 30 },
52
+ });
53
+ ```
54
+
55
+ The resource binding verifies path, bytes, SHA-256, and media type. A mismatch
56
+ fails before the browser render. The reference remains execution provenance
57
+ even when the final scene does not display it.
58
+
59
+ If the scene uses the reference as a color texture, load only its declared
60
+ private URL and settle decoding before frame zero:
61
+
62
+ ```js
63
+ const texture = new THREE.TextureLoader()
64
+ .loadAsync(SlopcameraOverlay.asset("reference-image"))
65
+ .then((loaded) => {
66
+ loaded.colorSpace = THREE.SRGBColorSpace;
67
+ return loaded;
68
+ });
69
+ SlopcameraOverlay.ready(texture);
70
+ ```
71
+
72
+ Never load a remote URL, data URL, object URL, undeclared font, environment map,
73
+ or model file from scene code.
74
+
75
+ ## Preserve deterministic motion
76
+
77
+ - Derive every visible state from `progress`, `timeMs`, parameters, or
78
+ `SlopcameraOverlay.randomFor(key)`.
79
+ - Do not use `requestAnimationFrame`, `setAnimationLoop`, wall-clock time,
80
+ mutable random sequences, pointer input, or cumulative per-frame state.
81
+ - Create geometry, materials, textures, vectors, matrices, and arrays before
82
+ `onFrame`. Avoid allocation and asset loading inside the frame callback.
83
+ - Keep the first and last frame loop-compatible when the result is a loop.
84
+ - Use one `renderer.render(scene, camera)` call per frame unless a reviewed
85
+ multipass effect justifies the extra cost.
86
+
87
+ ## Keep generated Three.js inexpensive
88
+
89
+ The starter defaults to 64 draw calls and 200,000 triangles per frame. Keep
90
+ those ceilings unless the user chooses a measured exception.
91
+
92
+ - Reuse geometry and materials. Use `THREE.InstancedMesh` for repeated forms.
93
+ - Prefer flat-shaded primitives, indexed `BufferGeometry`, and a few deliberate
94
+ lights for low-poly subjects.
95
+ - Leave shadows, postprocessing, physics, environment maps, logarithmic depth,
96
+ and high-detail subdivisions off by default.
97
+ - Fit the camera from `Box3` or a bounding sphere rather than hand-tuning it for
98
+ one output ratio.
99
+ - Keep opaque objects opaque. Preserve alpha in the renderer and background,
100
+ rather than making every material transparent.
101
+ - Track every geometry, material, texture, and render target. Dispose them and
102
+ the renderer when the page closes.
103
+ - Set color textures to `THREE.SRGBColorSpace`. Leave normal, roughness, metal,
104
+ and other data textures in their default no-color space.
105
+ - Use a 1x canvas for the full-duration preview. A selected final may raise
106
+ device scale or destination dimensions. Do not shorten the preview to hide a
107
+ late-frame failure.
108
+
109
+ Compare output at each destination aspect ratio. Camera fit, negative space,
110
+ caption-safe areas, and transparent edges can fail even when the source scene
111
+ is valid.
112
+
113
+ ## Create a metallic logo candidate
114
+
115
+ Use the supplied logo image as the sole shape authority. The treatment has
116
+ three literal creative variables: brand name, background color, and object
117
+ color. Model selection is separate because image-reference support changes by
118
+ provider.
119
+
120
+ ```ts
121
+ const candidate = workflow.gateway.image("metallic-logo",
122
+ createMetallicLogoImageRequest({
123
+ backgroundColor: "warm gray",
124
+ brandName: "Hraness",
125
+ model: input.imageModel,
126
+ objectColor: "brushed cobalt",
127
+ reference: input.logo,
128
+ }));
129
+ ```
130
+
131
+ For direct local CLI use, choose a live image model that accepts reference
132
+ images, then pass the exact logo with `--image` and the required
133
+ `--allow-cloud-upload`. Inspect model capabilities before dispatch. Do not
134
+ silently upload a local brand asset.
135
+
136
+ Treat every output as a candidate. Reject it when the silhouette, negative
137
+ space, proportions, orientation, or existing lettering changes. Reject added
138
+ text, duplicated marks, invented symbols, cropped edges, implausible bevels,
139
+ dirty reflections, or a background that contaminates the mark. Preserve the
140
+ reference and prompt receipt beside an accepted derivative.
@@ -0,0 +1,144 @@
1
+ # Rubber-stamp travel field notes
2
+
3
+ Use this when the user wants travel photos turned into «橡皮章旅行田野笔记»
4
+ posters: photograph on the left, a small multi-color rubber-stamp vignette and
5
+ typewriter field notes on warm paper on the right.
6
+
7
+ Reference look: https://x.com/Hamburgerai/status/2090683415104557406
8
+
9
+ Do **not** ask a generative model to redraw the whole poster. Keep the source
10
+ photograph as real pixels. Generate only the stamp (and optionally a stamp-on-paper
11
+ crop), then assemble with the local compositor.
12
+
13
+ ## Inputs
14
+
15
+ Per poster, collect:
16
+
17
+ - one absolute path to the source photograph;
18
+ - place name in English (`VENICE`, `ROME`, …);
19
+ - serial number (`01`, `02`, …);
20
+ - three short English keywords joined with ` / `;
21
+ - year (`2026` unless the user names another).
22
+
23
+ If the user does not supply place / keywords / year, derive them from the photo
24
+ and say what you assumed. Never invent a brand slogan.
25
+
26
+ ## Layout contract
27
+
28
+ - One independent poster per photo. No multi-photo collage.
29
+ - Aspect ratio **4:3** landscape (default `1600×1200`).
30
+ - Left ≈ **58%**: the source photo, cover-cropped. Preserve subject identity,
31
+ terrain, architecture, plants, people, spatial relationships, natural light,
32
+ real texture, and the photo's color character. Only restrained publication-grade
33
+ grading and a touch of fine film grain are allowed. Natural crop for the frame
34
+ is fine; never stretch, warp, move, replace, or redraw the subject.
35
+ - Right ≈ **42%**: warm off-white aged paper with fiber, matte feel, and generous
36
+ unprinted blank space. No hard vertical divider.
37
+ - Stamp sits mid-lower on the paper, about **30–38%** of the right panel's height,
38
+ with ample margin. It is a small rubber stamp, not a full illustration, logo, or
39
+ landscape painting.
40
+
41
+ ## Stamp generation (Gateway only)
42
+
43
+ Generate **only** the stamp vignette (square-ish, on transparent or warm paper),
44
+ using a current image model that accepts a reference photo. Prefer
45
+ `bfl/flux-kontext-pro` when available; otherwise discover with
46
+ `slopcamera ai models list --type image --json` and pick a reference-capable model.
47
+
48
+ Write the brief to a prompt file. Example shape:
49
+
50
+ ```text
51
+ Using the attached travel photograph as the only reference, create ONE small
52
+ multi-color rubber-stamp vignette of this place for a field notebook.
53
+
54
+ Compress the scene into the least information needed to recognize the location:
55
+ keep the dominant silhouette, a few stepped color blocks, and key terrain / shore /
56
+ road relationships. Delete crowds, cars, dense windows, repeated buildings,
57
+ busy foliage, and decorative clutter.
58
+
59
+ 2–4 spot-ink colors sampled from the photo after desaturation (charcoal, deep
60
+ green, brick, ochre, gray-blue, gray-brown). One small accent color only.
61
+
62
+ Each color layer must look hand-carved and hand-stamped: uneven hatch, broken
63
+ edges, dry ink, paper show-through, pressure variation, slight 1–2mm misregistration.
64
+ Not a smooth vector logo, not a filtered photo, not a full landscape painting.
65
+
66
+ Center the stamp on a warm off-white paper square with generous blank margin.
67
+ No typewriter text in this image. No Chinese seals, round postmarks, stamp
68
+ perforations, wax seals, stickers, or collage.
69
+ ```
70
+
71
+ Pass the source photo first, then one packaged style reference from
72
+ `references/rubber-stamp-examples/stamp-style-1.png` (or
73
+ `references/rubber-stamp-examples/stamp-style-2.png`)
74
+ so the model copies the hand-stamped ink language without copying that place.
75
+
76
+ Resolve the version-matched packaged skill inside each executable shell step.
77
+ Do not assume the current directory is a Slopcamera source checkout or use the
78
+ agent runner's copied skill path. The [source installation](install.md) supplies `SLOPCAMERA_SOURCE_ROOT`; restore that exact checkout in a new shell. Vercel launches the built Bun entrypoint because it cannot execute the source-install shell function. Run through the linked Vercel project:
79
+
80
+ ```sh
81
+ skill_root="$(slopcamera skill path)"
82
+ vercel env run -- bun "$SLOPCAMERA_SOURCE_ROOT/apps/desktop/dist/cli/main.js" ai image generate \
83
+ --model bfl/flux-kontext-pro \
84
+ --prompt-file stamp-brief.txt \
85
+ --image /absolute/source-photo.png \
86
+ --image "$skill_root/references/rubber-stamp-examples/stamp-style-1.png" \
87
+ --aspect-ratio 1:1 \
88
+ --allow-cloud-upload \
89
+ --json --timeout 180s
90
+ ```
91
+
92
+ Remux awkward JPEGs to PNG first if Slopcamera's FFprobe rejects them. If Gateway
93
+ decode validation fails but bytes exist under `artifacts/slopcamera/generated/…`,
94
+ inspect the file; a valid image may still be usable after a local remux.
95
+
96
+ ## Compose with code
97
+
98
+ Assemble the final poster with the packaged compositor so the photograph stays
99
+ literal:
100
+
101
+ ```sh
102
+ skill_root="$(slopcamera skill path)"
103
+ bun "$skill_root/scripts/compose-rubber-stamp-field-note.ts" \
104
+ --photo /absolute/source-photo.jpg \
105
+ --stamp /absolute/generated-stamp.png \
106
+ --output /absolute/field-note.jpg \
107
+ --place "VENICE" \
108
+ --number "01" \
109
+ --keywords "brick / bell / lagoon" \
110
+ --year "2026"
111
+ ```
112
+
113
+ The compositor cover-crops the photo into the left panel, draws warm paper on
114
+ the right, places the stamp mid-lower, and sets typewriter text beneath it:
115
+
116
+ ```text
117
+ PLACE
118
+ No. NN
119
+ keyword / keyword / keyword
120
+ YEAR
121
+ ```
122
+
123
+ Use a small monospace face. Keep the copy like a traveler's field record, not
124
+ an advertisement.
125
+
126
+ ## Avoid
127
+
128
+ Hard center dividers, round Chinese seals, postage perforations, wax seals,
129
+ sticker collage, souvenir templates, smooth vector city icons, full rebuilds of
130
+ every building, dense carving, cartoon or child-craft looks, 3D plastic renders,
131
+ smooth digital gradients, oversaturation, excess copy, decorative pile-up, and
132
+ any redraw of the left-side photograph.
133
+
134
+ ## Save and show
135
+
136
+ - Prefer `/home/box/media/images/slopcamera/YYYY-MM-DD-<place-slug>-field-note.jpg`
137
+ for Slopcamera library copies.
138
+ - Show the finished poster to the user.
139
+ - Keep the stamp artifact and receipt for iteration.
140
+
141
+ ## Batch
142
+
143
+ Process one photo at a time. Reuse the same serial numbering scheme across a
144
+ trip. Do not stitch multiple photos into one poster unless the user asks.
@@ -0,0 +1,29 @@
1
+ # Vectorize raster artwork
2
+
3
+ When the user asks to convert caller-owned raster artwork to SVG, keep the
4
+ raster as the source and treat the SVG as a replaceable derivative:
5
+
6
+ ```sh
7
+ slopcamera image vectorize path/to/input.png --output path/to/input.svg --json
8
+ ```
9
+
10
+ - Do not provide a credential for vectorization. The conversion keeps image bytes local; the initial tool provisioning can download a verified VTracer release.
11
+ - Do not redraw, relabel, crop, recolor, or simplify the subject beyond the
12
+ trace mechanics the command measures.
13
+ - Use `--duotone '#primary,#secondary'` only when the user explicitly asks for
14
+ that two-color adaptation.
15
+ - Preserve the emitted receipt in task output or an adjacent provenance record
16
+ when auditability matters.
17
+ - Do not bypass input, decoded-pixel, duration, path, byte, or fidelity gates.
18
+ - Inspect the SVG at its intended size. A successful trace is not evidence
19
+ that an unfamiliar symbol communicates the intended concept.
20
+
21
+ VTracer downloads from its checksum-pinned official release on first use. Use
22
+ `SLOPCAMERA_VTRACER_PATH` only for a compatible local 0.6.4 binary; Slopcamera still
23
+ records its hash. Never add an upscaling model, embedded raster fallback, or
24
+ commercial font to make a trace pass.
25
+
26
+ Bounded vectorization is currently supported on macOS and Linux. On Windows,
27
+ report the deliberate `tool_platform` failure; do not bypass it with an
28
+ unbounded temporary output file.
29
+
@@ -0,0 +1,187 @@
1
+ # Edit a video project
2
+
3
+ Use this workflow for screen recordings, talking-head videos, product demos,
4
+ imported camera or audio takes, captions, motion layers, creative alternatives,
5
+ and multi-format delivery. Slopcamera records editing decisions in a local project
6
+ and leaves original media unchanged.
7
+
8
+ ## Define the finished result
9
+
10
+ Before editing, identify:
11
+
12
+ - the source recording or existing project;
13
+ - the intended audience and approximate duration;
14
+ - what should be removed, emphasized, or left untouched;
15
+ - whether the project needs generated images, video, speech, or transcripts;
16
+ - the required captions, logo, overlays, music, and audio treatment; and
17
+ - the final aspect ratios and clean or captioned versions.
18
+
19
+ Ask only when a missing choice would materially change the edit. Do not invent
20
+ brand assets, remove content merely to make the video shorter, or select a creative alternative outside the user’s supplied criteria.
21
+
22
+ ## Inspect the host and project
23
+
24
+ Run these before building exact commands:
25
+
26
+ ```sh
27
+ slopcamera doctor --json
28
+ slopcamera recordings list --json
29
+ slopcamera projects list --json
30
+ slopcamera workflows list --json
31
+ ```
32
+
33
+ Use `slopcamera inspect <recording> --json` for a recording bundle and
34
+ `slopcamera project inspect <project> --json` for a project. Read IDs, streams,
35
+ placements, synchronization, analyses, and current edit state from those
36
+ results. Never guess them.
37
+
38
+ Check the bootstrap before promising a file-only edit. There is no public empty-project or arbitrary-media project creator: `projects create` requires a real stopped Slopcamera recording, and `project add` / SDK `media.ingest` require an existing project. Current-source `studio assemble` creates one from a real successful native sequence; `direct assemble` uses accepted generated takes. Neither is a generic file import. Do not fabricate recording manifests or receipts, run paid generation to obtain an empty project, or hand-edit private state. If the request permits, use a standalone spatial scene for visuals and disclose any separate local audio/editor step; otherwise report the missing project bootstrap precisely.
39
+
40
+ If the work begins with a new Slopcamera recording, create the project from that
41
+ recording, then add any independent footage or audio:
42
+
43
+ ```sh
44
+ slopcamera projects create --from-recording <recording-id> --name '<name>' --json
45
+ slopcamera project add <project-id> camera.mov --role camera --json
46
+ slopcamera project add <project-id> narration.wav --role dialogue --json
47
+ ```
48
+
49
+ Imported media begins with unverified synchronization. When timing with another
50
+ track matters, inspect and apply audio alignment before cuts, filler removal,
51
+ camera moves, or rendering depend on it.
52
+
53
+ ## Analyze before changing the edit
54
+
55
+ Use only the evidence the requested edit needs:
56
+
57
+ - `slopcamera analyze inactivity` for long still or silent ranges;
58
+ - `slopcamera analyze speech` and `slopcamera fillers list` for words and safe filler
59
+ candidates;
60
+ - `slopcamera analyze faces` and `slopcamera faces list` for local face geometry used
61
+ by framing;
62
+ - `slopcamera analyze music` before applying filler removal that must protect music;
63
+ - `slopcamera analyze scenes` for scene boundaries or bounded scene descriptions;
64
+ and
65
+ - recording events for cursor, click, keystroke, focused-input, and typed-text
66
+ timing.
67
+
68
+ Face analysis is local geometry tracking, not recognition. Scene descriptions
69
+ upload only selected derived frames and require `--allow-cloud-upload`.
70
+ Speech analysis may use the configured local Whisper runtime; Gateway
71
+ transcription is the separate workflow in
72
+ [gateway-media.md](gateway-media.md).
73
+
74
+ ## Make non-destructive editorial changes
75
+
76
+ Run `slopcamera help project` for the current grammar. The project editor supports:
77
+
78
+ - cuts, trims, and speed changes in project time;
79
+ - camera push, reframe, arbitrary camera paths, and local face-follow framing;
80
+ - screen zooms tied to a rectangle, point, cursor, window, or focused input;
81
+ - cursor, click, keystroke, and typed-text presentation;
82
+ - direct image, SVG, GIF, video and emoji overlays;
83
+ - captions and interaction metadata; and
84
+ - captions, clean outputs, and captioned outputs.
85
+
86
+ Preserve the original recording and imported media. Apply changes to the
87
+ project or its editable scene source, then inspect the resulting project hash.
88
+ When an edit depends on evidence, use the evidence identifier returned by its
89
+ analysis rather than recomputing or approximating it.
90
+
91
+ Direct `project edit` does not accept HTML or arbitrary audio/color filters. Render HTML/Canvas/Three/WGSL through the local workflow `media.htmlOverlay` operation, then use its returned video as a project layer. `media audio` and `media color` produce separate controlled derivatives.
92
+
93
+ Overlay `--position x,y` is an offset from its selected anchor. Use `--anchor center --position 0,0` to center a layer, or `--anchor top-left --position 42,70` for an actual top-left pixel position. A full-frame overlay uses top-left at `0,0`. Do not add half the canvas dimensions to center offsets.
94
+
95
+ For independently authored media, explicit `project add --at` timing may be appropriate. Rendering with `--allow-unverified-sync` acknowledges provisional synchronization; it does not turn authored times into measured alignment. Finish ordinary edits before V2 spatial migration, because ordinary editing rejects the migrated head.
96
+
97
+ ## Choose one HTML authoring surface
98
+
99
+ Run `slopcamera html catalog` before creating a transparent HTML overlay. Choose the
100
+ profile by its primary job:
101
+
102
+ - `plain` for document layout, CSS, SVG, and native browser drawing;
103
+ - `motion` for seekable DOM or SVG choreography;
104
+ - `p5` for an immediate-mode Canvas 2D sketch;
105
+ - `two` for a retained vector 2D scene;
106
+ - `paper-shaders` for a parameterized texture or gradient;
107
+ - `three` for a retained 3D scene; and
108
+ - `vgpu` for explicit WGSL, compute, or pass-level GPU control.
109
+
110
+ Slopcamera owns the clock and declared assets in every profile. Keep p5 in P2D instance
111
+ mode with an empty startup draw, `noLoop()`, and one awaited `redraw()`. Keep
112
+ Two.js on its explicit WebGL renderer with `autostart: false` and one manual
113
+ `render()`. Derive all visible state from the absolute Slopcamera frame and
114
+ `SlopcameraOverlay.randomFor`; never add a CDN, live input, ambient asset loader, or
115
+ second frame loop.
116
+
117
+ ## Use vgpu for explicit WebGPU effects
118
+
119
+ Choose `slopcamera html scaffold vgpu --output <file.html>` for a reviewed fullscreen
120
+ WGSL effect or a composition that needs explicit WebGPU passes. The
121
+ starter is one transparent pass; extend its checked source for bounded
122
+ multipass work instead of introducing a second animation clock.
123
+
124
+ - Derive motion from the absolute `timeMs` supplied by `SlopcameraOverlay.onFrame`.
125
+ - Submit explicit `frame()` passes and wait for both frame completion and GPU
126
+ settlement before the callback resolves.
127
+ - Keep the transparent clear and premultiplied-alpha contract intact.
128
+ - Expect the render to fail closed when WebGPU or its adapter is unavailable;
129
+ do not add a silent Canvas, WebGL, or static-image fallback.
130
+
131
+ Prefer Motion for DOM animation, Paper Shaders for its existing texture and
132
+ gradient treatments, and Three.js for full 3D scenes. vgpu is not a reason to
133
+ rewrite an overlay that already fits one of those paths.
134
+
135
+ ## Prefer a built-in workflow for a complete known job
136
+
137
+ Inspect the exact input schema with
138
+ `slopcamera workflows show <id> --json` before preparing its JSON input.
139
+
140
+ - `talking-head-cleanup` removes long pauses, keeps local face evidence, and
141
+ renders a final landscape talking-head video.
142
+ - `polished-screen-demo` analyzes inactivity, screen actions, faces, and
143
+ music before applying cleanup, interaction effects, and face-aware framing.
144
+ - `chaptered-demo` adds a reviewed overlay composition and renders an exact
145
+ final video.
146
+ - `social-variants` renders 16:9, 9:16, 1:1, and 4:5 branches, with clean and
147
+ optional captioned outputs.
148
+ - `creative-iteration` makes two to sixteen independent preview candidates
149
+ from one frozen project.
150
+ - `creative-selection` records an explicit human or task selection, promotes
151
+ it when requested, and materializes named deliveries.
152
+
153
+ Read [workflows and SDK](workflows-sdk.md) for custom Bun authoring, exact plan approval and durable recovery. The seventh built-in, `directed-scene`, consumes prepared V2 scene render inputs.
154
+
155
+ Plan a workflow before running it. Do not choose or promote a creative
156
+ candidate unless the user has selected it or the request supplies a
157
+ deterministic selection rule.
158
+
159
+ ## Preview before final delivery
160
+
161
+ For substantial edits:
162
+
163
+ 1. inspect the current project;
164
+ 2. plan or apply the requested edits;
165
+ 3. render the complete timeline at preview quality;
166
+ 4. inspect picture, sound, captions, transitions, framing, and the first and
167
+ last frames;
168
+ 5. revise the project, not the preview file; and
169
+ 6. render final outputs from the selected project state.
170
+
171
+ Ordinary project render `--output` paths are relative to that project’s directory. Under the default workspace, `--output renders/final.mp4` means `artifacts/slopcamera/projects/<project-id>/renders/final.mp4`. Resolve returned relative receipt paths against that project, not the shell directory.
172
+
173
+ Preview and final use the same timeline and composition. A preview is evidence
174
+ about the final edit, but still check the final file's duration, dimensions,
175
+ streams, and output path.
176
+
177
+ ## Report the creative result
178
+
179
+ Tell the user:
180
+
181
+ - which recording or project was edited;
182
+ - what was generated, analyzed, removed, added, or reframed;
183
+ - which decisions remain alternatives rather than the current project state;
184
+ - the preview path they can review;
185
+ - every final output path and aspect ratio; and
186
+ - any upload, model, synchronization, or local-tool limitation that affected
187
+ the result.
@@ -0,0 +1,120 @@
1
+ # Slopcamera visual communication rules
2
+
3
+ Use these rules to turn supplied content into a diagram without adding content.
4
+
5
+ ## Start with the claim
6
+
7
+ A diagram should make one relationship, comparison, sequence, or hierarchy easy
8
+ to perceive. Write down that supplied claim privately before placing shapes.
9
+ Every primary mark must help the viewer perceive it. Remove marks that merely
10
+ repeat styling.
11
+
12
+ Keep the semantic inventory small:
13
+
14
+ - Three to seven primary objects is a useful default for a high-level overview.
15
+ - A viewer should be able to name the reading order after a quick glance.
16
+ - Labels should normally be one to three words. Use a second diagram when the
17
+ only way to fit the content is paragraph-sized labels.
18
+
19
+ These are compression rules, not permission to omit facts the user explicitly
20
+ asked to show.
21
+
22
+ ## Make visual grammar consistent
23
+
24
+ Similarity implies shared meaning. Proximity implies grouping. Alignment implies
25
+ relationship. Encode those implications deliberately:
26
+
27
+ - Equal roles use equal geometry and treatment.
28
+ - A size change must encode a supplied magnitude or hierarchy.
29
+ - A color change must encode a supplied category or state.
30
+ - A different shape must encode a different kind of object.
31
+ - Group with whitespace and position before adding a new enclosing border.
32
+ - Do not mix rounded and hard corners for peers.
33
+
34
+ When appearance varies without a reason, a viewer spends attention searching
35
+ for a distinction that does not exist.
36
+
37
+ ## Route relationships clearly
38
+
39
+ Connectors need room to be seen as connectors.
40
+
41
+ - Keep at least 96px of visible connector between shape boundaries; prefer
42
+ 120–200px.
43
+ - Bind each semantic arrow to its source and target.
44
+ - Point arrowheads into open space at the target edge.
45
+ - Avoid crossings. If a crossing is unavoidable, change the layout before
46
+ adding bridge decorations.
47
+ - Keep connector labels short and off the path.
48
+ - Separate repeated fan-in and fan-out arrowheads with distinct endpoint
49
+ positions. A shared side-center port makes several relationships look like
50
+ one heavy or broken connector.
51
+ - Looking from a source toward a target, positive bend is on the viewer's
52
+ right side of the chord and negative bend is on the left. For a
53
+ left-to-right chord, that means positive bends down and negative bends up.
54
+ Reverse paired signs when branches should bow toward their open interior.
55
+ - Do not use an arrow where proximity or containment already states the
56
+ relationship.
57
+
58
+ Longer arrows are the default because a short arrow can collapse into the
59
+ neighboring strokes and make two objects look like one component.
60
+
61
+ ## Use icons as recognition cues
62
+
63
+ - Use one icon family and one stroke language in a diagram.
64
+ - Keep peer icons the same optical size.
65
+ - Render an icon bare inside its existing card or shape.
66
+ - Do not add a second bordered icon container inside a bordered card.
67
+ - Pair an icon with a short label when the glyph is not universally understood.
68
+ - Never let an icon introduce a fact absent from the prompt.
69
+
70
+ ## Build hierarchy without prose
71
+
72
+ Use position, whitespace, and restrained contrast before size or saturation.
73
+ Make the important path visually continuous. Keep supporting objects quieter.
74
+ Avoid shadows, gradients, textures, and ornamental strokes unless they encode
75
+ requested meaning.
76
+
77
+ When one supplied object contains two distinct text roles, use measured label
78
+ rows rather than punctuation or manual vertical offsets. A compact mono row can
79
+ name a type, identifier, or relation while a larger default-family row carries
80
+ the human-readable value. Keep peer rows consistent and center the complete
81
+ icon, gaps, and wrapped line boxes as one group.
82
+
83
+ Use one color distinction by default. When the supplied system contains stable
84
+ roles across several diagrams, a restrained family palette can reduce relearning:
85
+
86
+ - blue for sources, evidence, and observed records;
87
+ - purple for proposed structure, transforms, or system-generated candidates;
88
+ - yellow for named-human review or authority;
89
+ - green for accepted, versioned, or published outputs;
90
+ - red or orange for correction, retraction, or failure; and
91
+ - neutral for ordinary supporting objects.
92
+
93
+ Use only the roles the content actually supplies. Preserve the same mapping
94
+ throughout the diagram family, and keep text or icons sufficient when color is
95
+ unavailable.
96
+
97
+ For light and dark variants:
98
+
99
+ - Preserve the same geometry and semantic contrast.
100
+ - Test text and thin strokes against their immediate background.
101
+ - Do not encode meaning only by hue.
102
+ - Keep axis and connector strokes single and opaque enough to avoid a faint
103
+ inner-line effect.
104
+
105
+ ## Sources behind the rules
106
+
107
+ These defaults synthesize established work rather than copying a house style:
108
+
109
+ - Gestalt principles of proximity, similarity, continuity, and enclosure.
110
+ - Colin Ware, *Information Visualization: Perception for Design*, on
111
+ preattentive features and visual queries.
112
+ - Stephen Kosslyn, *Graph Design for the Eye and Mind*, on perceptual grouping
113
+ and correspondence between visual marks and meaning.
114
+ - Richard Mayer's coherence principle: exclude extraneous material that
115
+ competes with the intended explanation.
116
+ - Barbara Tversky's work on spatial representations and diagrams as external
117
+ structures for inference.
118
+
119
+ The practical test is semantic: if a visual difference makes a reasonable
120
+ viewer infer a difference that the prompt did not supply, remove it.