cozyclay 1.10.0 → 2.0.2

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 (275) hide show
  1. package/CHANGELOG.md +193 -0
  2. package/bin/agent/agent-routes.mjs +82 -72
  3. package/bin/agent/agent-runner.mjs +10 -3
  4. package/bin/agent/motion-runtime.mjs +32 -260
  5. package/bin/agent/providers.mjs +46 -3
  6. package/bin/agent/session-store.mjs +41 -5
  7. package/bin/agent/studio-prompt.mjs +1 -1
  8. package/bin/agent/studio-tools.mjs +48 -11
  9. package/bin/codex-auth.mjs +2 -1
  10. package/bin/cozyclay.mjs +38 -11
  11. package/bin/live/cli.mjs +22 -3
  12. package/bin/mcp-runtime.mjs +45 -20
  13. package/bin/telemetry-state.mjs +5 -2
  14. package/bin/update-check.mjs +15 -0
  15. package/dist/app/index.html +6 -6
  16. package/dist/assets/analytics-MVZOEW8O.js +1 -0
  17. package/dist/assets/app-BxBLC6GT.js +4876 -0
  18. package/dist/assets/app-CJdxvnrl.css +1 -0
  19. package/dist/assets/{demo-B-eg1CT8.js → demo-ByeYp-dY.js} +1 -1
  20. package/dist/assets/{first-shot-handoff-CGgnvNu8.js → first-shot-handoff-DgT28ZiV.js} +1 -1
  21. package/dist/assets/{landing-IbRp3FnQ.js → landing-BaXkpFip.js} +1 -1
  22. package/dist/assets/shot-prompt-CbqWcWYi.css +1 -0
  23. package/dist/assets/shot-prompt-hN0j_O-p.js +17 -0
  24. package/dist/assets/{ticket-BgIzOBOf.js → ticket-BcmsnHn5.js} +1 -1
  25. package/dist/assets/workflow-B5XZwVfe.js +179 -0
  26. package/dist/assets/workflow-DRdwoDBT.css +1 -0
  27. package/dist/cozyclay-package.json +1 -1
  28. package/dist/fonts/IBM-Plex-Sans-OFL.txt +92 -0
  29. package/dist/fonts/JetBrains-Mono-OFL.txt +93 -0
  30. package/dist/fonts/README.md +13 -9
  31. package/dist/fonts/ibm-plex-sans-400-latin.woff2 +0 -0
  32. package/dist/fonts/ibm-plex-sans-500-latin.woff2 +0 -0
  33. package/dist/fonts/ibm-plex-sans-600-latin.woff2 +0 -0
  34. package/dist/fonts/jetbrains-mono-400-latin.woff2 +0 -0
  35. package/dist/fonts/jetbrains-mono-500-latin.woff2 +0 -0
  36. package/dist/index.html +7 -7
  37. package/dist/privacy/index.html +13 -8
  38. package/dist/sitemap.xml +2 -2
  39. package/dist/workflow/index.html +5 -5
  40. package/mcp/live-hub.mjs +35 -93
  41. package/mcp/mesh-file.mjs +48 -0
  42. package/mcp/server.mjs +6 -77
  43. package/mcp/tool-handlers.mjs +219 -376
  44. package/package.json +2 -1
  45. package/src/App.jsx +1275 -9086
  46. package/src/analytics.js +393 -9
  47. package/src/app-context.js +211 -0
  48. package/src/app-stage.jsx +25 -24
  49. package/src/ardy/auto-fix-panel.css +108 -0
  50. package/src/ardy/fix-collisions.js +10 -66
  51. package/src/ardy/ik-drag.js +101 -0
  52. package/src/ardy/ik-key-json.js +43 -0
  53. package/src/ardy/ik.js +97 -67
  54. package/src/ardy/physics-panel.css +2 -0
  55. package/src/ardy/physics-panel.jsx +17 -5
  56. package/src/ardy/platform-fit-panel.css +64 -0
  57. package/src/ardy/platform-fit-panel.jsx +40 -0
  58. package/src/ardy/platform-fit.js +326 -0
  59. package/src/ardy/playback.js +166 -20
  60. package/src/ardy/range-pin.js +299 -0
  61. package/src/ardy/timeline-coordinates.js +26 -0
  62. package/src/ardy/timeline.css +1214 -0
  63. package/src/ardy/timeline.jsx +152 -41
  64. package/src/ardy/waypoints.js +3 -3
  65. package/src/asset-pane.css +462 -0
  66. package/src/asset-pane.jsx +461 -232
  67. package/src/camera-tutorial.jsx +38 -18
  68. package/src/command-bus.js +349 -0
  69. package/src/commands/ai.js +31 -0
  70. package/src/commands/cast.js +140 -0
  71. package/src/commands/elements/character.js +13 -0
  72. package/src/commands/elements/motion.js +14 -0
  73. package/src/commands/elements/object.js +22 -0
  74. package/src/commands/elements/scene.js +16 -0
  75. package/src/commands/elements/shot.js +9 -0
  76. package/src/commands/elements/stage.js +11 -0
  77. package/src/commands/elements.js +155 -0
  78. package/src/commands/export.js +20 -0
  79. package/src/commands/index.js +40 -0
  80. package/src/commands/motion.js +231 -0
  81. package/src/commands/objects.js +174 -0
  82. package/src/commands/project.js +53 -0
  83. package/src/commands/scene.js +81 -0
  84. package/src/commands/shared.js +19 -0
  85. package/src/commands/shot.js +103 -0
  86. package/src/commands/stage.js +17 -0
  87. package/src/commands/view.js +42 -0
  88. package/src/document-store.js +144 -0
  89. package/src/domains/cast.js +1007 -0
  90. package/src/domains/motion.js +3219 -0
  91. package/src/domains/objects.js +932 -0
  92. package/src/domains/scenes.js +823 -0
  93. package/src/domains/shots.js +404 -0
  94. package/src/domains/stage.js +93 -0
  95. package/src/dualview.jsx +113 -57
  96. package/src/facing-marks.js +3 -0
  97. package/src/first-success-guide.jsx +14 -14
  98. package/src/grid-view.js +18 -5
  99. package/src/hierarchy-panel.css +386 -0
  100. package/src/hierarchy-panel.jsx +88 -19
  101. package/src/{fal-motion-client.js → i2v-motion-client.js} +13 -13
  102. package/src/i2v-motion-studio.jsx +180 -0
  103. package/src/ik-camera.js +3 -0
  104. package/src/main.jsx +6 -0
  105. package/src/motion/generation.js +105 -0
  106. package/src/motion-readiness-ui.jsx +4 -4
  107. package/src/motion-readiness.js +11 -0
  108. package/src/motion-trail.js +366 -9
  109. package/src/object-gizmo.jsx +7 -1
  110. package/src/panels/CameraPanel.jsx +60 -0
  111. package/src/panels/CharacterTransformPanel.jsx +48 -0
  112. package/src/panels/EnvironmentPanel.jsx +40 -0
  113. package/src/panels/Foldout.jsx +32 -0
  114. package/src/panels/LightPanel.jsx +24 -0
  115. package/src/panels/ObjectTransformPanel.jsx +554 -0
  116. package/src/panels/PosePanel.jsx +97 -0
  117. package/src/panels/ProjectPanel.jsx +33 -0
  118. package/src/panels/PromptBlocksPanel.jsx +442 -0
  119. package/src/panels/PropsPanel.jsx +70 -0
  120. package/src/panels/ReferenceImageField.jsx +91 -0
  121. package/src/panels/RigControlPanel.jsx +78 -0
  122. package/src/panels/RigPanel.jsx +37 -0
  123. package/src/panels/SubjectBox.jsx +47 -0
  124. package/src/panels/SubjectsPanel.jsx +39 -0
  125. package/src/panels/VideoCapturePanel.jsx +180 -0
  126. package/src/panels/details.css +1171 -0
  127. package/src/panels/motion.css +197 -0
  128. package/src/panels/pose.css +39 -0
  129. package/src/planview.jsx +60 -31
  130. package/src/posestudio.jsx +59 -4
  131. package/src/project-browser.css +1073 -0
  132. package/src/project-browser.jsx +288 -123
  133. package/src/range-pin-object-transform.js +19 -0
  134. package/src/range-pin-panel.css +518 -0
  135. package/src/range-pin-panel.jsx +344 -0
  136. package/src/result-modal.jsx +5 -5
  137. package/src/room.jsx +79 -51
  138. package/src/scenes.js +9 -8
  139. package/src/semantic-edit.js +2 -0
  140. package/src/settings-menu.jsx +39 -105
  141. package/src/shell/BottomDock.jsx +450 -0
  142. package/src/shell/DetailsSlot.jsx +513 -0
  143. package/src/shell/LibrarySlot.jsx +86 -0
  144. package/src/shell/MenuBar.jsx +601 -0
  145. package/src/shell/OutlinerSlot.jsx +50 -0
  146. package/src/shell/PreferencesDialog.jsx +538 -0
  147. package/src/shell/PreferencesSlot.jsx +40 -0
  148. package/src/shell/StatusBar.jsx +125 -0
  149. package/src/shell/StudioShell.jsx +92 -0
  150. package/src/shell/TopBar.jsx +129 -0
  151. package/src/shell/ViewportToolbar.jsx +656 -0
  152. package/src/shell/agent-glass.css +296 -0
  153. package/src/shell/dock.css +93 -0
  154. package/src/shell/glass-regions.css +985 -0
  155. package/src/shell/glass.css +687 -0
  156. package/src/shell/log-store.js +52 -0
  157. package/src/shell/mode.css +9 -0
  158. package/src/shell/preferences.css +651 -0
  159. package/src/shell/shell.css +282 -0
  160. package/src/shell/studio-shell-context.js +19 -0
  161. package/src/shell/topbar.css +435 -0
  162. package/src/shell/viewport.css +451 -0
  163. package/src/store/authored-intent.js +22 -0
  164. package/src/store/runtime-adapters.js +92 -0
  165. package/src/store/scene-stage.js +21 -0
  166. package/src/store/use-document-store.js +14 -0
  167. package/src/studio-actions.js +210 -0
  168. package/src/studio-agent-commands.js +38 -268
  169. package/src/studio-agent-context.js +38 -9
  170. package/src/studio-agent-motion.js +122 -378
  171. package/src/studio-agent-protocol.js +66 -30
  172. package/src/studio-app-binding.js +379 -0
  173. package/src/studio-contact-sheet.js +73 -0
  174. package/src/studio-elements.js +58 -51
  175. package/src/styles/themes.css +200 -0
  176. package/src/styles/tokens.css +69 -0
  177. package/src/styles.css +456 -1748
  178. package/src/theme.js +44 -0
  179. package/src/timeline-extent.js +16 -0
  180. package/src/timeline-fps.js +13 -0
  181. package/src/trail-key-conflicts.js +39 -0
  182. package/src/trail-pick.js +59 -0
  183. package/src/ui.jsx +8 -8
  184. package/src/use-case-question.jsx +66 -0
  185. package/src/workflow/AgentPanel.jsx +86 -71
  186. package/src/workflow/agent-client.js +12 -2
  187. package/src/workflow/agent-panel.css +34 -32
  188. package/src/workflow/cozy-scene-node.css +2 -0
  189. package/src/workflow/workflow.css +2 -0
  190. package/tools/ardy/bridge.mjs +164 -146
  191. package/tools/ardy/visual-qa.mjs +5 -5
  192. package/tools/bench/EXP3.md +61 -0
  193. package/tools/bench/cclay_bench_extract_incam.py +125 -0
  194. package/tools/bench/cclay_bench_extract_obs.py +204 -0
  195. package/tools/bench/cclay_bench_runner.py +42 -0
  196. package/tools/bench/cube-contact.mjs +162 -0
  197. package/tools/bench/exp3.mjs +152 -0
  198. package/tools/bench/extract-bench-lib.mjs +216 -0
  199. package/tools/bench/extract-bench.mjs +302 -0
  200. package/tools/bench/fal-generate.mjs +88 -0
  201. package/tools/bench/fit/README.md +189 -0
  202. package/tools/bench/fit/camera.mjs +59 -0
  203. package/tools/bench/fit/contact.mjs +419 -0
  204. package/tools/bench/fit/footlock.mjs +234 -0
  205. package/tools/bench/fit/motion.mjs +85 -0
  206. package/tools/bench/fit/pin.mjs +27 -0
  207. package/tools/bench/fit/remote.mjs +105 -0
  208. package/tools/bench/fit-bench.mjs +126 -0
  209. package/tools/bench/fit-sanity.mjs +45 -0
  210. package/tools/bench/metrics.mjs +313 -0
  211. package/tools/bench/obs/depth.mjs +258 -0
  212. package/tools/bench/obs/extrinsics.mjs +175 -0
  213. package/tools/bench/obs/fit_mannequin_betas.py +340 -0
  214. package/tools/bench/obs/ground.mjs +294 -0
  215. package/tools/bench/obs/heading.mjs +151 -0
  216. package/tools/bench/obs/ladder.mjs +555 -0
  217. package/tools/bench/obs/mannequin-betas.json +124 -0
  218. package/tools/bench/obs/remote.mjs +83 -0
  219. package/tools/bench/obs/rest_joints.py +52 -0
  220. package/tools/bench/obs/ybot-targets.mjs +49 -0
  221. package/tools/bench/obs-bench.mjs +520 -0
  222. package/tools/bench/score.mjs +343 -0
  223. package/tools/bench/summarize.mjs +86 -0
  224. package/tools/dev/pages/privacy.html +13 -8
  225. package/tools/gt-render/browser.mjs +159 -0
  226. package/tools/gt-render/camera-math.mjs +276 -0
  227. package/tools/gt-render/page.mjs +267 -0
  228. package/tools/gt-render/render.mjs +514 -0
  229. package/tools/gt-render/scene-box.mjs +31 -0
  230. package/tools/gt-render/take-transform.mjs +87 -0
  231. package/tools/qa/css-rule-usage.mjs +283 -0
  232. package/tools/qa/studio-control-count.mjs +70 -32
  233. package/tools/run-tests.mjs +60 -3
  234. package/tools/track/DESIGN.md +513 -0
  235. package/tools/track/backfill-provenance.mjs +116 -0
  236. package/tools/track/budget.mjs +8 -0
  237. package/tools/track/check-rig.mjs +209 -0
  238. package/tools/track/diagnostics.schema.json +60 -0
  239. package/tools/track/export-rig.mjs +256 -0
  240. package/tools/track/fallback.mjs +7 -0
  241. package/tools/track/fk-parity-fixture.mjs +161 -0
  242. package/tools/track/gate.mjs +349 -0
  243. package/tools/track/masks.mjs +318 -0
  244. package/tools/track/metrics.mjs +201 -0
  245. package/tools/track/publish-obs.mjs +108 -0
  246. package/tools/track/py/check_env.py +61 -0
  247. package/tools/track/py/eval_lr.py +229 -0
  248. package/tools/track/py/lr_viterbi.py +294 -0
  249. package/tools/track/py/masks.py +405 -0
  250. package/tools/track/py/objective.py +382 -0
  251. package/tools/track/py/rig.py +508 -0
  252. package/tools/track/py/scene.py +326 -0
  253. package/tools/track/py/test_joint_indices.py +123 -0
  254. package/tools/track/py/test_lr_viterbi.py +195 -0
  255. package/tools/track/py/test_masks.py +229 -0
  256. package/tools/track/py/test_rig.py +288 -0
  257. package/tools/track/py/test_scene.py +354 -0
  258. package/tools/track/py/test_track.py +328 -0
  259. package/tools/track/py/track.py +411 -0
  260. package/tools/track/remote.mjs +140 -0
  261. package/tools/track/rig-dump.mjs +227 -0
  262. package/tools/track/run-box-tests.mjs +14 -0
  263. package/tools/track/run-box.mjs +168 -0
  264. package/tools/track/setup-box.sh +59 -0
  265. package/tools/track/study-2d.mjs +728 -0
  266. package/dist/assets/analytics-B1hnH66c.js +0 -1
  267. package/dist/assets/app-Cu1cexZR.css +0 -1
  268. package/dist/assets/app-Dxdh8kds.js +0 -4861
  269. package/dist/assets/shot-prompt-C_g2BHVc.css +0 -1
  270. package/dist/assets/shot-prompt-HVJRP4Gr.js +0 -17
  271. package/dist/assets/workflow-CJd-PDtV.js +0 -179
  272. package/dist/assets/workflow-DsudxKHF.css +0 -1
  273. package/src/fal-motion-studio.jsx +0 -180
  274. package/src/scene-history.js +0 -129
  275. package/tools/ardy/__pycache__/cclay_gvhmr_worker.cpython-313.pyc +0 -0
@@ -0,0 +1 @@
1
+ .react-flow{direction:ltr}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1px;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab;position:absolute}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:-webkit-grab;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background:#1a192b;border:1px solid #fff;border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:-4px;left:50%;transform:translate(-50%)}.react-flow__handle-top{top:-4px;left:50%;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{top:50%;right:-4px;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{background:#ffffff80;margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{color:#222;text-align:center;background-color:#fff;border:1px solid #1a192b;border-radius:3px;width:150px;padding:10px;font-size:12px}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:#0059dc14;border:1px dotted #0059dccc}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{box-sizing:content-box;cursor:pointer;-webkit-user-select:none;user-select:none;background:#fefefe;border:none;border-bottom:1px solid #eee;justify-content:center;align-items:center;width:16px;height:16px;padding:5px;display:flex}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__minimap svg{display:block}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:#3367d9;border:1px solid #fff;border-radius:1px;width:4px;height:4px;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border:0 solid #3367d9}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}@layer legacy{:root{color:#edf0fb;font-synthesis:none;background:#101116;font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif}*{box-sizing:border-box}body{background:#101116;min-width:900px;margin:0}#workflow-root{height:100vh}.workflow-app{color:#edf0fb;background:#101116;flex-direction:column;height:100vh;display:flex}.workflow-topbar{background:#171921;border-bottom:1px solid #292d38;justify-content:space-between;align-items:center;height:58px;padding:0 22px;display:flex}.workflow-brand{color:#afb4c6;align-items:center;gap:9px;font-size:14px;display:flex}.workflow-brand strong{color:#f5f7ff;font-size:14px}.workflow-brand-mark{color:#fff;background:linear-gradient(135deg,#ef759d,#6c7cff);border-radius:7px;place-items:center;width:23px;height:23px;font-size:12px;font-weight:800;display:grid}.workflow-divider{color:#555b70;margin-left:3px}.workflow-top-actions{align-items:center;gap:9px;display:flex}.workflow-top-actions button,.workflow-sidebar-bottom button,.workflow-sidebar-bottom a{color:#c8ccdb;font:inherit;cursor:pointer;background:#20232d;border:1px solid #353a4a;border-radius:6px;padding:7px 12px;font-size:12px;text-decoration:none}.workflow-top-actions button:hover,.workflow-sidebar-bottom button:hover,.workflow-sidebar-bottom a:hover{background:#2b3040;border-color:#606b9a}.workflow-status{color:#7f879e;align-items:center;gap:7px;margin-right:8px;font-size:11px;display:flex}.workflow-status i{background:#4dcda4;border-radius:50%;width:6px;height:6px;box-shadow:0 0 8px #4dcda4}.workflow-main{flex:1;min-height:0;display:flex}.workflow-sidebar{background:#171921;border-right:1px solid #292d38;flex-direction:column;flex:none;width:232px;padding:22px 14px;display:flex}.workflow-sidebar-title{letter-spacing:.08em;text-transform:uppercase;color:#f3f5fd;font-size:12px;font-weight:700}.workflow-sidebar-copy{color:#737b92;margin:8px 6px 18px 0;font-size:11px;line-height:1.5}.workflow-node-menu{flex-direction:column;gap:5px;display:flex}.workflow-add-node{color:#bcc2d4;width:100%;font:inherit;text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:10px;padding:9px 10px;font-size:12px;display:flex}.workflow-add-node:hover{color:#f5f7ff;background:#222631;border-color:#373d50}.workflow-add-node span:nth-child(2){flex:1}.workflow-sidebar-bottom{flex-direction:column;gap:8px;margin-top:auto;display:flex}.workflow-sidebar-bottom button,.workflow-sidebar-bottom a{text-align:center;font-size:11px}.workflow-canvas{flex:1;min-width:0;position:relative}.workflow-canvas .react-flow{background:#11141c}.workflow-canvas .react-flow__controls{bottom:22px;left:20px;box-shadow:0 5px 18px #0005}.workflow-canvas .react-flow__controls-button{fill:#aeb5c9;color:#aeb5c9;background:#20242e;border-bottom:1px solid #323744;width:28px;height:28px}.workflow-canvas .react-flow__minimap{border:1px solid #353a49;border-radius:7px;bottom:20px;right:20px;overflow:hidden}.workflow-canvas-panel{margin:14px}.workflow-canvas-panel button{color:#e7eaff;font:inherit;cursor:pointer;background:#27304a;border:1px solid #454d70;border-radius:6px;align-items:center;gap:6px;padding:8px 11px;font-size:11px;display:flex}.workflow-node{color:#e5e8f5;background:#20232d;border:1px solid #3c4152;border-radius:9px;width:230px;position:relative;overflow:visible;box-shadow:0 10px 30px #0004}.workflow-node:hover{border-color:#6877bd}.workflow-node-header{background:#252935;border-bottom:1px solid #343946;border-radius:9px 9px 0 0;align-items:center;gap:8px;padding:10px 11px;font-size:12px;display:flex}.workflow-node-icon{color:#aeb8ff;background:#303648;border-radius:6px;place-items:center;width:23px;height:23px;display:grid}.workflow-node-image .workflow-node-icon{color:#67d8b6}.workflow-node-video .workflow-node-icon{color:#eca56e}.workflow-node-upload .workflow-node-icon{color:#c4a8ef}.workflow-node-concat .workflow-node-icon{color:#e3c969}.workflow-node-scene .workflow-node-icon{color:#ef82a7}.workflow-node-id{color:#6c7389;margin-left:auto;font:10px ui-monospace,monospace}.workflow-node-body{flex-direction:column;gap:7px;padding:11px;display:flex}.workflow-node label{color:#8d95ab;font-size:10px}.workflow-node input,.workflow-node textarea,.workflow-node select{color:#e5e8f5;width:100%;font:inherit;resize:vertical;background:#171a21;border:1px solid #3a3f4e;border-radius:5px;outline:0;padding:7px 8px;font-size:11px}.workflow-node input:focus,.workflow-node textarea:focus,.workflow-node select:focus{border-color:#707dce}.workflow-textarea{height:65px}.workflow-node-foot{color:#737b92;justify-content:space-between;align-items:center;margin-top:3px;font-size:10px;display:flex}.workflow-mini-button,.workflow-run-button{color:#e6e9ff;font:inherit;cursor:pointer;background:#303b71;border:1px solid #4c5aab;border-radius:5px;align-items:center;gap:4px;padding:5px 8px;font-size:10px;display:flex}.workflow-dropzone{color:#78819c;text-align:center;border:1px dashed #49516a;border-radius:6px;justify-content:center;align-items:center;gap:7px;height:74px;font-size:10px;display:flex}.workflow-upload{color:#a89ce4;cursor:pointer;border:1px dashed #525b79;border-radius:6px;flex-direction:column;justify-content:center;align-items:center;gap:5px;height:90px;display:flex;position:relative}.workflow-upload input{opacity:0;cursor:pointer;position:absolute;inset:0}.workflow-schema-fields{border-top:1px solid #323746;flex-direction:column;gap:6px;padding-top:4px;display:flex}.workflow-schema-title{color:#8d95ab;text-transform:uppercase;letter-spacing:.08em;font-size:9px}.workflow-schema-fields label{flex-direction:column;gap:4px;display:flex}.workflow-schema-check{align-items:center;flex-direction:row!important;gap:6px!important;display:flex!important}.workflow-schema-check input{width:auto}.workflow-node-cost{color:#78d9b0;margin-left:4px}.workflow-hint{color:#666e83;margin:0;font-size:9px;line-height:1.35}.workflow-scene-preview{color:#7b849e;background:#171a23;border:1px solid #3d4357;border-radius:6px;justify-content:center;align-items:center;height:80px;font-size:10px;display:flex;position:relative;overflow:hidden}.workflow-scene-grid{opacity:.32;background-color:#0000;background-image:linear-gradient(135deg,#0000 46%,#687090 47%,#0000 49%),linear-gradient(45deg,#0000 46%,#687090 47%,#0000 49%);background-position:0 0,0 0;background-repeat:repeat,repeat;background-size:22px 22px;background-attachment:scroll,scroll;background-origin:padding-box,padding-box;background-clip:border-box,border-box;position:absolute;inset:0}.workflow-scene-preview span{position:relative}.workflow-scene-controls{gap:4px;display:flex}.workflow-scene-controls button{color:#9da5ba;font:inherit;cursor:pointer;background:#292d39;border:1px solid #3b4050;border-radius:4px;flex:1;padding:5px 2px;font-size:9px}.workflow-handle{background:#8994ff;border:2px solid #20232d;width:9px;height:9px}.workflow-handle.target{background:#4c566f}.workflow-node-image .workflow-handle{background:#44c2a4}.workflow-node-video .workflow-handle{background:#d9955b}.workflow-node-scene .workflow-handle{background:#ef759d}.workflow-node-upload .workflow-handle{background:#a88cdb}.workflow-video-preview{background:#11141c;border:1px solid #3d4357;border-radius:6px;width:100%;max-height:150px;display:block}.workflow-provider-hint{color:#737b92;margin-top:-3px;font-size:9px}.workflow-node-search{color:#e5e8f5;width:100%;font:inherit;background:#11141b;border:1px solid #353a4a;border-radius:6px;outline:0;margin:0 0 8px;padding:8px 9px;font-size:11px}.workflow-node-search:focus{border-color:#707dce}.workflow-model-results{background:#12151d;border:1px solid #303545;border-radius:6px;flex-direction:column;gap:2px;margin:0 0 7px;padding:4px;display:flex}.workflow-model-results .workflow-hint{padding:6px}.workflow-node-motion-input .workflow-node-icon{color:#79b5ed}.workflow-motion-upload{height:70px}.workflow-node-motion-input .workflow-handle{background:#79b5ed}.workflow-agent-toggle{position:relative}.workflow-main{position:relative;overflow:hidden}.workflow-image-preview{object-fit:contain;background:#11141c;border:1px solid #3d4357;border-radius:6px;width:100%;max-height:150px;display:block}.workflow-error{color:#ef759d;font-size:9px;line-height:1.35}.workflow-preservation-ok{color:#78d9b0}.workflow-preservation-failed{background:#3a202c;border:1px solid #8b405d;border-radius:5px;padding:6px 7px}.workflow-versions{flex-direction:column;gap:5px;display:flex}.workflow-ab-toggle{cursor:pointer;border-color:#67d8b6;box-shadow:0 0 0 1px #67d8b64d}.workflow-version-bar{align-items:center;gap:4px;display:flex}.workflow-version-bar button{color:#9da5ba;font:inherit;cursor:pointer;background:#292d39;border:1px solid #3b4050;border-radius:4px;padding:4px 7px;font-size:9px;line-height:1}.workflow-version-bar button:hover:not(:disabled){color:#e5e8f5;border-color:#606b9a}.workflow-version-bar button:disabled{opacity:.4;cursor:default}.workflow-version-count{text-align:center;color:#78d9b0;flex:1;font:10px ui-monospace,monospace}.workflow-version-ab.active{color:#78d9b0;background:#25443c;border-color:#4c8f7c}.workflow-version-compare{color:#8d95ab;align-items:center;gap:6px;font-size:9px;flex-direction:row!important;display:flex!important}.workflow-version-compare select{flex:1;width:auto}.workflow-version-pin{color:#8d95ab;font-size:9px}.workflow-version-reuse{color:#e6e9ff;font:inherit;cursor:pointer;background:#303b71;border:1px solid #4c5aab;border-radius:5px;padding:5px 8px;font-size:10px}.workflow-version-reuse:hover{background:#3a468a;border-color:#7180d6}.workflow-node-shot-prompt .workflow-node-icon{color:#8fd4b0}.workflow-node-shot-prompt .workflow-handle{background:#8fd4b0}.workflow-shot-prompt-text{color:#cfe6da;height:92px;font:11px ui-monospace,monospace}.workflow-shot-prompt-copy{color:#a9e6c8;font:inherit;cursor:pointer;background:#25443c;border:1px solid #4c8f7c;border-radius:5px;justify-content:center;align-items:center;gap:5px;padding:5px 8px;font-size:10px;display:flex}.workflow-shot-prompt-copy:hover{background:#2e564b;border-color:#6fc0a2}.workflow-warning{color:#e8c78c;background:#2b2419;border:1px solid #8d6b3d;border-radius:5px;margin:0;padding:6px 7px;font-size:9px;line-height:1.35}.cozy-scene-node{color:#e4e9ef;background:#202631;border:1px solid #3b4756;border-radius:10px;width:318px;font:12px/1.35 Inter,system-ui,sans-serif;position:relative;overflow:visible;box-shadow:0 12px 28px #00000052}.cozy-scene-node.is-selected{border-color:#79b7e8;box-shadow:0 0 0 2px #79b7e842,0 12px 28px #00000052}.cozy-scene-node-header,.cozy-scene-node-footer{justify-content:space-between;align-items:center;gap:10px;padding:11px 13px;display:flex}.cozy-scene-node-kicker{color:#78a9d3;letter-spacing:.14em;font-size:9px;font-weight:800}.cozy-scene-node h3{margin:2px 0 0;font-size:14px;font-weight:700}.cozy-scene-node-status{color:#aebccc;text-align:right;max-width:112px;font-size:10px}.cozy-scene-node-status.has-pack{word-break:break-word;max-width:178px}.status-running{color:#f0c979}.status-complete{color:#8dd5b1}.status-error{color:#f08d8d}.cozy-scene-preview{background:linear-gradient(145deg,#32475d,#121820 70%);border:1px solid #3c4b5d;border-radius:6px;height:134px;margin:0 10px;position:relative;overflow:hidden}.cozy-scene-canvas{position:absolute;inset:0}.cozy-scene-live-frame{transform-origin:0 0;background:#111722;border:0;width:200%;height:200%;position:absolute;top:0;left:0;transform:scale(.5)}.cozy-scene-world-image{filter:saturate(.78)brightness(.82);background-image:url(/media/cozyclay-demo-poster.jpg);background-position:0;background-repeat:no-repeat;background-size:auto 250%;position:absolute;inset:0}.cozy-scene-world-tint{pointer-events:none;background:linear-gradient(#090f160a,#090f169e);position:absolute;inset:0}.cozy-scene-render-thumb{background:#111722;border:1px solid #3c4b5d;border-radius:5px;width:76px;margin:0;position:absolute;bottom:8px;left:8px;overflow:hidden;box-shadow:0 4px 10px #00000057}.cozy-scene-render-thumb img{aspect-ratio:16/9;object-fit:cover;width:100%;display:block}.cozy-scene-render-thumb figcaption{color:#9eb0c2;letter-spacing:.08em;text-transform:uppercase;background:#121722db;padding:2px 5px;font-size:9px;font-weight:800}.cozy-scene-grid{background:repeating-linear-gradient(90deg,#0000 0 19px,#85b4da2e 20px 21px),repeating-linear-gradient(0deg,#0000 0 17px,#85b4da24 18px 19px);position:absolute;inset:45% -25% -55%;transform:perspective(80px)rotateX(58deg)}.cozy-scene-stage-mark{background:#79b7e82e;border:2px solid #b4d7f1b8;border-radius:8px;width:78px;height:78px;position:absolute;top:25px;left:50%;transform:translate(-50%)rotate(45deg)}.cozy-scene-stage-mark span{background:#527c9d;border:1px solid #c3e5ff;border-radius:50%;width:8px;height:8px;position:absolute}.cozy-scene-stage-mark span:first-child{top:-5px;left:-5px}.cozy-scene-stage-mark span:nth-child(2){top:-5px;right:-5px}.cozy-scene-stage-mark span:nth-child(3){bottom:-5px;right:-5px}.cozy-scene-preview-copy{color:#d7e4ef;text-align:right;background:#121722c7;border-radius:5px;gap:1px;padding:4px 7px;display:grid;position:absolute;bottom:8px;right:8px}.cozy-scene-preview-copy strong{font-size:11px}.cozy-scene-preview-copy span{color:#9eb0c2;font-size:10px}.cozy-scene-controls{gap:8px;padding:11px 13px 9px;display:grid}.cozy-scene-control-row{gap:6px;display:flex}.cozy-scene-button,.cozy-scene-send,.cozy-scene-video,.cozy-scene-run,.cozy-scene-camera-row button{color:#d8e5f0;font:inherit;cursor:pointer;background:#2c3846;border:1px solid #465668;border-radius:5px;padding:5px 8px}.cozy-scene-button:hover,.cozy-scene-camera-row button:hover{background:#344658}.cozy-scene-run{background:#35658c;border-color:#5f96c3;margin-left:auto}.cozy-scene-run:disabled,.cozy-scene-send:disabled{cursor:wait;opacity:.7}.cozy-scene-send{color:#cfe6f8;background:#2a4256;border-color:#4d6c88}.cozy-scene-send:hover:not(:disabled){background:#33506a}.cozy-scene-handoff{align-items:center;gap:8px;display:flex}.cozy-scene-video{color:#cfe6f8;background:#2a4256;border-color:#4d6c88;flex:none}.cozy-scene-video:hover{background:#33506a}.cozy-scene-hint{color:#8799aa;margin:0;font-size:10px;line-height:1.3}.cozy-scene-frame-control{color:#acbbc9;grid-template-columns:auto 1fr auto;align-items:center;gap:7px;font-size:10px;display:grid}.cozy-scene-frame-control input{accent-color:#79b7e8;width:100%}.cozy-scene-frame-control output{color:#dce7f1;text-align:right;min-width:40px;font-family:ui-monospace,monospace}.cozy-scene-camera-row{color:#9eafbf;justify-content:center;align-items:center;gap:8px;font-size:10px;display:flex}.cozy-scene-camera-row button{padding:2px 7px}.cozy-scene-node-footer{color:#8799aa;border-top:1px solid #33404e;font-size:10px}.cozy-scene-node-footer span+span{margin-left:auto}.cozy-scene-node-inputs,.cozy-scene-node-outputs{pointer-events:none;width:12px;position:absolute;top:0;bottom:0}.cozy-scene-node-inputs{left:-7px}.cozy-scene-node-outputs{right:-7px}.cozy-scene-handle{pointer-events:auto;background:#243443;border:2px solid #a9d1f0;border-radius:50%;width:10px;height:10px;display:block;position:absolute}.cozy-scene-handle-target{left:0}.cozy-scene-handle-source{right:0}.cozy-scene-handle-asset{top:85px}.cozy-scene-handle-motion{top:115px}.cozy-scene-handle-render{top:108px}.cozy-scene-handle-scene{top:140px}.cozy-scene-reactflow-handle{z-index:5}.cozy-scene-reactflow-handle-asset{top:85px!important}.cozy-scene-reactflow-handle-motion{top:115px!important}.cozy-scene-reactflow-handle-render{top:108px!important}.cozy-scene-reactflow-handle-scene{top:140px!important}}
@@ -1 +1 @@
1
- {"payload":"{\"distribution\":\"npm\",\"package\":\"cozyclay\",\"version\":\"1.10.0\",\"repository\":\"NomaDamas/CozyClay\",\"content_sha256\":\"d40eaae144e99565bfcb314496ff5ab57f68823035cfcb3774b3fb8f769e44ef\"}","signature":"iy9EbC+t3x3evUbrew0Nl69YyoWg3ylAh190z17P5Ah//UfsHVqdurLg4ObooXWp1tGwgIAe2oU8tLSAxpU5Ag=="}
1
+ {"payload":"{\"distribution\":\"npm\",\"package\":\"cozyclay\",\"version\":\"2.0.2\",\"repository\":\"NomaDamas/CozyClay\",\"content_sha256\":\"6b21f4b8112041967b14ed57d28da217b04fae78e0adeb9dd0da143622814822\"}","signature":"72GMEbX6c47ZRDJrLMi7FipjXz9cKt/piGTYyzGUXpUtNNPx3WCkP6GWJp4PoXZdVoaB9mOrEA71YGN9TEktAA=="}
@@ -0,0 +1,92 @@
1
+ Copyright © 2017 IBM Corp. with Reserved Font Name "Plex"
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+ -----------------------------------------------------------
8
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
9
+ -----------------------------------------------------------
10
+
11
+ PREAMBLE
12
+ The goals of the Open Font License (OFL) are to stimulate worldwide
13
+ development of collaborative font projects, to support the font creation
14
+ efforts of academic and linguistic communities, and to provide a free and
15
+ open framework in which fonts may be shared and improved in partnership
16
+ with others.
17
+
18
+ The OFL allows the licensed fonts to be used, studied, modified and
19
+ redistributed freely as long as they are not sold by themselves. The
20
+ fonts, including any derivative works, can be bundled, embedded,
21
+ redistributed and/or sold with any software provided that any reserved
22
+ names are not used by derivative works. The fonts and derivatives,
23
+ however, cannot be released under any other type of license. The
24
+ requirement for fonts to remain under this license does not apply
25
+ to any document created using the fonts or their derivatives.
26
+
27
+ DEFINITIONS
28
+ "Font Software" refers to the set of files released by the Copyright
29
+ Holder(s) under this license and clearly marked as such. This may
30
+ include source files, build scripts and documentation.
31
+
32
+ "Reserved Font Name" refers to any names specified as such after the
33
+ copyright statement(s).
34
+
35
+ "Original Version" refers to the collection of Font Software components as
36
+ distributed by the Copyright Holder(s).
37
+
38
+ "Modified Version" refers to any derivative made by adding to, deleting,
39
+ or substituting -- in part or in whole -- any of the components of the
40
+ Original Version, by changing formats or by porting the Font Software to a
41
+ new environment.
42
+
43
+ "Author" refers to any designer, engineer, programmer, technical
44
+ writer or other person who contributed to the Font Software.
45
+
46
+ PERMISSION & CONDITIONS
47
+ Permission is hereby granted, free of charge, to any person obtaining
48
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
49
+ redistribute, and sell modified and unmodified copies of the Font
50
+ Software, subject to the following conditions:
51
+
52
+ 1) Neither the Font Software nor any of its individual components,
53
+ in Original or Modified Versions, may be sold by itself.
54
+
55
+ 2) Original or Modified Versions of the Font Software may be bundled,
56
+ redistributed and/or sold with any software, provided that each copy
57
+ contains the above copyright notice and this license. These can be
58
+ included either as stand-alone text files, human-readable headers or
59
+ in the appropriate machine-readable metadata fields within text or
60
+ binary files as long as those fields can be easily viewed by the user.
61
+
62
+ 3) No Modified Version of the Font Software may use the Reserved Font
63
+ Name(s) unless explicit written permission is granted by the corresponding
64
+ Copyright Holder. This restriction only applies to the primary font name as
65
+ presented to the users.
66
+
67
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
68
+ Software shall not be used to promote, endorse or advertise any
69
+ Modified Version, except to acknowledge the contribution(s) of the
70
+ Copyright Holder(s) and the Author(s) or with their explicit written
71
+ permission.
72
+
73
+ 5) The Font Software, modified or unmodified, in part or in whole,
74
+ must be distributed entirely under this license, and must not be
75
+ distributed under any other license. The requirement for fonts to
76
+ remain under this license does not apply to any document created
77
+ using the Font Software.
78
+
79
+ TERMINATION
80
+ This license becomes null and void if any of the above conditions are
81
+ not met.
82
+
83
+ DISCLAIMER
84
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
85
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
86
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
87
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
88
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
89
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
90
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
91
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
92
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,93 @@
1
+ Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -1,15 +1,19 @@
1
1
  # Bundled fonts
2
2
 
3
3
  The `.woff2` files in this directory are redistributed with CozyClay under the
4
- SIL Open Font License 1.1, which permits bundling them with software provided
5
- each copy carries the copyright notice and the licence. Those are the two
6
- `-OFL.txt` files here; keep them alongside the fonts.
4
+ SIL Open Font License 1.1. Each family has its upstream OFL text beside the
5
+ font files. The existing Inter and Instrument Serif files remain until their
6
+ later cleanup todo.
7
7
 
8
- | File | Family | Copyright | Licence |
9
- | --- | --- | --- | --- |
10
- | `inter-latin.woff2` | [Inter](https://github.com/rsms/inter) | Copyright (c) 2016 The Inter Project Authors | [OFL-1.1](Inter-OFL.txt) |
11
- | `instrument-serif-latin.woff2`, `instrument-serif-italic-latin.woff2` | [Instrument Serif](https://github.com/Instrument/instrument-serif) | Copyright 2022 The Instrument Serif Project Authors | [OFL-1.1](InstrumentSerif-OFL.txt) |
8
+ | Files | Family | Upstream release | Copyright | Licence |
9
+ | --- | --- | --- | --- | --- |
10
+ | `ibm-plex-sans-400-latin.woff2`, `ibm-plex-sans-500-latin.woff2`, `ibm-plex-sans-600-latin.woff2` | IBM Plex Sans | [`@ibm/plex-sans@1.1.0`](https://github.com/IBM/plex/releases/tag/%40ibm/plex-sans%401.1.0) ([asset](https://github.com/IBM/plex/releases/download/%40ibm/plex-sans%401.1.0/ibm-plex-sans.zip)) | Copyright (c) 2017 IBM Corp. with Reserved Font Name "Plex" | [OFL-1.1](IBM-Plex-Sans-OFL.txt) |
11
+ | `jetbrains-mono-400-latin.woff2`, `jetbrains-mono-500-latin.woff2` | JetBrains Mono | [`v2.304`](https://github.com/JetBrains/JetBrainsMono/releases/tag/v2.304) ([asset](https://github.com/JetBrains/JetBrainsMono/releases/download/v2.304/JetBrainsMono-2.304.zip)) | Copyright 2020 The JetBrains Mono Project Authors | [OFL-1.1](JetBrains-Mono-OFL.txt) |
12
+ | `inter-latin.woff2` | [Inter](https://github.com/rsms/inter) | existing bundle | Copyright (c) 2016 The Inter Project Authors | [OFL-1.1](Inter-OFL.txt) |
13
+ | `instrument-serif-latin.woff2`, `instrument-serif-italic-latin.woff2` | [Instrument Serif](https://github.com/Instrument/instrument-serif) | existing bundle | Copyright 2022 The Instrument Serif Project Authors | [OFL-1.1](InstrumentSerif-OFL.txt) |
12
14
 
13
- Both are subsets. Under OFL a modified copy may not use the Reserved Font Name,
14
- so if a subset is ever renamed or edited beyond subsetting, check clause 3 before
15
+ The IBM Plex Sans files are the upstream Latin1 webfont subsets. Korean text
16
+ continues through the Pretendard and Noto Sans KR fallbacks in `--sans`.
17
+ Under the OFL, a modified copy may not use the Reserved Font Name, so if a
18
+ subset is ever renamed or edited beyond subsetting, check clause 3 before
15
19
  shipping it.
package/dist/index.html CHANGED
@@ -272,9 +272,9 @@
272
272
  header.site nav { gap: 14px; width: 100%; margin-left: 0; padding-bottom: 10px; }
273
273
  }
274
274
  </style>
275
- <script type="module" crossorigin src="/assets/landing-IbRp3FnQ.js"></script>
276
- <link rel="modulepreload" crossorigin href="/assets/analytics-B1hnH66c.js">
277
- <link rel="modulepreload" crossorigin href="/assets/first-shot-handoff-CGgnvNu8.js">
275
+ <script type="module" crossorigin src="/assets/landing-BaXkpFip.js"></script>
276
+ <link rel="modulepreload" crossorigin href="/assets/analytics-MVZOEW8O.js">
277
+ <link rel="modulepreload" crossorigin href="/assets/first-shot-handoff-DgT28ZiV.js">
278
278
  </head>
279
279
  <body>
280
280
  <header class="site">
@@ -331,7 +331,7 @@
331
331
  <a class="btn ghost" href="https://github.com/NomaDamas/CozyClay">View on GitHub</a>
332
332
  </div>
333
333
  <p class="note">
334
- Or run it on your machine: <code>npx cozyclay</code>. No Blender, no Unity. Open a saved <code>.cclayproject</code> from the first dialog.
334
+ Or run it on your machine: <code>npx cozyclay --via site</code>. No Blender, no Unity. Open a saved <code>.cclayproject</code> from the first dialog.
335
335
  </p>
336
336
  </div>
337
337
 
@@ -343,7 +343,7 @@
343
343
  <button class="playground-cover" id="playground-start" type="button" aria-label="Start the playground">
344
344
  <span class="btn primary">Play with the scene</span>
345
345
  <small>Loads the studio in this box (about 2 MB)</small>
346
- <span class="playground-phone">Needs a mouse and keyboard. Come back on a computer, or run <code>npx cozyclay</code>.</span>
346
+ <span class="playground-phone">Needs a mouse and keyboard. Come back on a computer, or run <code>npx cozyclay --via site</code>.</span>
347
347
  </button>
348
348
  <div class="playground-loading">Loading the studio…</div>
349
349
  <div class="tutorial-card" id="tutorial-card" aria-live="polite">
@@ -354,7 +354,7 @@
354
354
  <div class="playground-bar">
355
355
  <div class="tutorial-done" id="tutorial-done" hidden>
356
356
  <p>Take your shot with you. Video export is not offered in this embedded Playground.</p>
357
- <p>Download your edited project, run <code>npx cozyclay</code>, and open the downloaded <code>.cclayproject</code> in the local Studio. Use its existing Export menu for video.</p>
357
+ <p>Download your edited project, run <code>npx cozyclay --via playground</code>, and open the downloaded <code>.cclayproject</code> in the local Studio. Use its existing Export menu for video.</p>
358
358
  <button type="button" id="playground-download" class="copy">Download my project</button>
359
359
  <button type="button" id="playground-handoff-dismiss">Continue editing</button>
360
360
  </div>
@@ -392,7 +392,7 @@
392
392
  <section id="start">
393
393
  <h2>Quick start</h2>
394
394
  <p class="sub">Node.js 22.13+ and a Chromium browser.</p>
395
- <pre class="with-copy"><code>npx cozyclay</code><button type="button" class="copy" data-copy="npx cozyclay">Copy</button></pre>
395
+ <pre class="with-copy"><code>npx cozyclay --via site</code><button type="button" class="copy" data-copy="npx cozyclay --via site">Copy</button></pre>
396
396
  <p class="sub">Or from source:</p>
397
397
  <pre><code>git clone https://github.com/NomaDamas/CozyClay.git
398
398
  cd CozyClay
@@ -85,6 +85,8 @@
85
85
  CLI restarts, ports and browser storage resets. The browser's memory-only SDK starts with this
86
86
  anonymous ID on each launch. Independent state files receive independent random IDs, without
87
87
  fingerprinting, account linking or cross-device matching; do not copy the state file between users.
88
+ A copied start command such as <code>npx cozyclay --via site</code> stores that one source label
89
+ with the first-launch receipt instead of asking where you heard about CozyClay.
88
90
  Prompt text, asset names,
89
91
  file names, project content, local paths and any user-entered text are never collected. Session
90
92
  duration and action counts are bucketed. Source checkouts, forks, development servers, CI and tests
@@ -129,20 +131,20 @@ cclay telemetry on</code></pre>
129
131
  <table>
130
132
  <thead><tr><th>Event</th><th>Purpose</th></tr></thead>
131
133
  <tbody>
132
- <tr><td>install:first_launch, app:session_started, app:session_ended</td><td>Counting installs and sessions; duration and action counts are bucketed</td></tr>
133
- <tr><td>feature:used</td><td>One signal per feature per session</td></tr>
134
+ <tr><td>install:first_launch, app:session_started, app:session_ended</td><td>Counting installs and sessions; duration and action counts are bucketed. install:first_launch may carry heard_from (x, hn, reddit, github, friend, other, site or playground), from the first-launch prompt or a copied <code>npx cozyclay --via</code> command. app:session_ended also carries per-session edit gesture counts in five groups, pose_edit_bucket, camera_edit_bucket, object_edit_bucket, shot_edit_bucket and prompt_edit_bucket, each bucketed (0, 1-3, 4-10 or gte11); never what was edited</td></tr>
135
+ <tr><td>feature:used</td><td>One signal per feature per session: a fixed feature name such as pose_edit (a real bone or pose change), pose_save (saving a pose to the library), fal_motion_open (opening the AI video A/B card), camera_fly or export_video</td></tr>
134
136
  <tr><td>$pageview, scene:created, scene:loaded, craft:first_action, activation:completed</td><td>Funnel and drop-off analysis</td></tr>
135
137
  <tr><td>craft:first_edit</td><td>First successful Studio authoring change per editor mount; only a fixed edit-kind label and definition version 1 (not camera navigation, playback, loading, restore, or undo/redo)</td></tr>
136
138
  <tr><td>playground:first_edit</td><td>The same versioned first-edit definition for Playground, counted separately from Studio; no prompts or scene contents</td></tr>
137
139
  <tr><td>project:saved, project:opened</td><td>Whether people keep their work (object counts and ages are bucketed; never names or paths)</td></tr>
138
140
  <tr><td>motion:backend_state</td><td>Session capability baseline: backend (none, local_kimodo or hosted) and boolean host_configured, never a host address</td></tr>
139
- <tr><td>motion:generate_requested</td><td>Explicit generation intent, not prompt-block editing: initiating surface (timeline, line_edit, trail or mcp), input_mode (prompt, pose or edit) and an ephemeral random request_id</td></tr>
140
- <tr><td>motion:preflight_blocked</td><td>Request readiness refusal: request_id, surface and normalized reason (unconfigured, unreachable or unsupported_route)</td></tr>
141
- <tr><td>motion:preflight_passed</td><td>Request readiness accepted, before job start: request_id, surface and backend (none, local_kimodo or hosted)</td></tr>
141
+ <tr><td>motion:generate_requested</td><td>Explicit generation intent, not prompt-block editing: initiating surface (timeline, line_edit, trail, mcp, fal_card or agent), input_mode (prompt, pose, edit, a_to_b or still) and an ephemeral random request_id</td></tr>
142
+ <tr><td>motion:preflight_blocked</td><td>Request readiness refusal: request_id, surface and normalized reason (unconfigured, unreachable, unsupported_route, locked or missing_input). locked means the AI video route is not enabled for the account yet; missing_input means the A/B captures were incomplete</td></tr>
143
+ <tr><td>motion:preflight_passed</td><td>Request readiness accepted, before job start: request_id, surface and backend (none, local_kimodo, hosted or fal)</td></tr>
142
144
  <tr><td>motion:job_started</td><td>Generation execution started: request_id, backend and input_mode</td></tr>
143
145
  <tr><td>motion:job_succeeded</td><td>Generation completed before result application: request_id, backend, input_mode and bucketed duration_bucket (lt1s, 1-3s, 3-10s, 10-30s or gte30s)</td></tr>
144
- <tr><td>motion:job_failed</td><td>Generation failure or real cancellation: request_id, backend, input_mode, duration_bucket and normalized error_code (aborted, unsupported_route, generation_failed or unknown), never raw error messages</td></tr>
145
- <tr><td>motion:result_applied</td><td>A generated result was applied to its requesting character: request_id and backend. Job success alone does not prove application.</td></tr>
146
+ <tr><td>motion:job_failed</td><td>Generation failure or real cancellation: request_id, backend, input_mode, duration_bucket and normalized error_code (aborted, unsupported_route, generation_failed, quota or unknown), never raw error messages</td></tr>
147
+ <tr><td>motion:result_applied</td><td>A generated result was applied to its requesting character: request_id and backend. For the fal AI video route, applied means the generated clip was loaded into the Studio for extraction. Job success alone does not prove application.</td></tr>
146
148
  <tr><td>workflow:run_requested</td><td>Workflow execution requests: surface (workflow), ephemeral run_id and node_count_bucket (0, 1-3, 4-10 or gte11). No graph contents, node labels or outputs.</td></tr>
147
149
  <tr><td>workflow:run_succeeded, workflow:run_failed, workflow:run_cancelled</td><td>Workflow outcomes paired by run_id, with duration_bucket (lt1s, 1-3s, 3-10s, 10-30s or gte30s); failures and actual cancellations also include failure_code (aborted, capture_failed, generation_failed or unknown). Starting another run does not imply cancellation.</td></tr>
148
150
  <tr><td>workflow:result_applied</td><td>Captured or generated image/video output was written to the Workflow canvas: run_id only, at most once per run, independently of a later failure. No image bytes or output contents.</td></tr>
@@ -157,6 +159,9 @@ cclay telemetry on</code></pre>
157
159
  <tr><td>export:attempt_started, export:attempt_succeeded, export:attempt_failed, export:attempt_cancelled</td><td>Export attempts and outcomes, paired by an ephemeral random attempt_id; export_kind (video, depth_video, frame or keyframe_pack), format (mp4, png or zip) and initiating surface (studio, workflow or embed). Terminal events include a bucketed duration_bucket; failures and real cancellations include only a normalized failure_code (unsupported_codec, encode_failed, render_failed, aborted or unknown), never raw error messages, filenames, URLs, paths, prompts or scene content. Success means pipeline completion or download handoff, not confirmation that the OS saved a file.</td></tr>
158
160
  <tr><td>export:keyframe_pack</td><td>Legacy Workflow pack handoffs, with numeric entries count and source=workflow; not an additional export attempt</td></tr>
159
161
  <tr><td>playground:opened, playground:first_action</td><td>Whether the home-page playground gets used</td></tr>
162
+ <tr><td>app:error</td><td>Uncaught errors and unhandled promise rejections, at most ten distinct per session: error_kind (error or unhandled_rejection), error_type (a built-in name such as TypeError or DOMException, other or non_error), error_source (app, extension, external or unknown) and, only for the app's own scripts, error_file (the bundle file name), error_line and error_col. Never the error message, stack text, URLs, query strings, paths, prompts or scene content.</td></tr>
163
+ <tr><td>device:profile</td><td>Once per session, whether the studio can run smoothly: gpu_vendor (nvidia, amd, intel, apple, qualcomm, arm, software, other or unknown), gpu_class (discrete, integrated, software or unknown), webgl (webgl2, webgl1 or none), cpu_bucket (1-4, 5-8, 9-16, gte17 or unknown), memory_bucket (lt4, 4-7, gte8 or unknown) and frame_rate_bucket (lt20, 20-40, 40-55, gte55 or unknown) from one three-second sample. The GPU renderer string and exact hardware values never leave the browser.</td></tr>
164
+ <tr><td>survey:use_case</td><td>An optional question shown at most once after a successful export, only while telemetry is on: use_case (animation, film, game, ad_mv, personal, other or skip) and team (team, solo or skip). Closed choices only; no free text.</td></tr>
160
165
  <tr><td>hosted:composer_viewed, hosted:login_started, hosted:ticket_created, hosted:result_opened, hosted:opened_in_studio</td><td>Hosted demo funnel</td></tr>
161
166
  <tr><td>tutorial:started</td><td>Camera tutorial attempts on surface (studio or playground), with numeric tutorial_version 1 and start_source (query, settings or landing). Restarting starts a new attempt; no tutorial attempt identifier or user text is sent.</td></tr>
162
167
  <tr><td>tutorial:step_entered, tutorial:dismissed</td><td>Entered steps and explicit dismissal of an unfinished tutorial; surface (studio or playground), numeric tutorial_version 1 and step_kind (fly, walk, dolly, orbit, shot, rail or play). Missing completion can indicate abandonment or missing telemetry; browser close does not promise a dismissal event.</td></tr>
@@ -166,7 +171,7 @@ cclay telemetry on</code></pre>
166
171
  </table>
167
172
  </div>
168
173
  <p class="note">Motion request_id values are fresh random 32-character hexadecimal values, held only for one request; they are not persisted or derived from prompts, hosts, credentials, project content or other identifiers. The ambiguous motion:generate_blocked event stopped being emitted in the September 15, 2026 issue #273 contract. Historical events are not relabeled and are excluded from the new explicit-demand metric. Automatic line previews and prompt-block edits are not explicit Generate requests.</p>
169
- <p class="note">Every regular app event and session-end beacon carries the same distribution (npm or hosted), app_version when available, origin_kind (local or hosted), internal_qa boolean, coarse operating-system label and, for npm sessions, install_kind (npx or global). PostHog's free plan retains events for one year.</p>
174
+ <p class="note">Every regular app event and session-end beacon carries the same distribution (npm or hosted), app_version when available, origin_kind (local or hosted), internal_qa boolean, coarse operating-system label and, for npm sessions, install_kind (npx or global) and update_status (latest, outdated or unknown), read from the package's own cached update check. PostHog's free plan retains events for one year.</p>
170
175
  <p class="note">Workflow run_id, Agent turn_id and MCP request_id values are fresh random 32-character hexadecimal values held only for one execution. Execution telemetry contains only closed categories, outcomes and elapsed-time buckets; missing telemetry is left unknown, and a disconnected MCP editor is not backfilled.</p>
171
176
  </section>
172
177
 
package/dist/sitemap.xml CHANGED
@@ -2,7 +2,7 @@
2
2
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3
3
  <url>
4
4
  <loc>https://cozyclay.org/</loc>
5
- <lastmod>2026-09-15</lastmod>
5
+ <lastmod>2026-10-01</lastmod>
6
6
  </url>
7
7
  <url>
8
8
  <loc>https://cozyclay.org/greybox-to-video/</loc>
@@ -22,6 +22,6 @@
22
22
  </url>
23
23
  <url>
24
24
  <loc>https://cozyclay.org/privacy/</loc>
25
- <lastmod>2026-09-15</lastmod>
25
+ <lastmod>2026-10-01</lastmod>
26
26
  </url>
27
27
  </urlset>
@@ -8,12 +8,12 @@
8
8
  <meta name="theme-color" content="#101116" />
9
9
  <meta name="description" content="CozyClay visual workflow builder" />
10
10
  <title>CozyClay Workflow</title>
11
- <script type="module" crossorigin src="/assets/workflow-CJd-PDtV.js"></script>
11
+ <script type="module" crossorigin src="/assets/workflow-B5XZwVfe.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
13
- <link rel="modulepreload" crossorigin href="/assets/analytics-B1hnH66c.js">
14
- <link rel="modulepreload" crossorigin href="/assets/shot-prompt-HVJRP4Gr.js">
15
- <link rel="stylesheet" crossorigin href="/assets/shot-prompt-C_g2BHVc.css">
16
- <link rel="stylesheet" crossorigin href="/assets/workflow-DsudxKHF.css">
13
+ <link rel="modulepreload" crossorigin href="/assets/analytics-MVZOEW8O.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/shot-prompt-hN0j_O-p.js">
15
+ <link rel="stylesheet" crossorigin href="/assets/shot-prompt-CbqWcWYi.css">
16
+ <link rel="stylesheet" crossorigin href="/assets/workflow-DRdwoDBT.css">
17
17
  </head>
18
18
  <body>
19
19
  <div id="workflow-root"></div>