cozyclay 3.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +95 -0
- package/INSTALL_FOR_AGENTS.md +146 -0
- package/README.md +74 -192
- package/THIRD_PARTY_NOTICES.md +0 -21
- package/bin/agent/agent-routes.mjs +22 -56
- package/bin/agent/agent-runner.mjs +5 -3
- package/bin/agent/main-agent.mjs +70 -0
- package/bin/agent/main-prompt.mjs +17 -0
- package/bin/agent/session-store.mjs +2 -2
- package/bin/agent/studio-prompt.mjs +1 -1
- package/bin/agent/studio-task-routes.mjs +185 -0
- package/bin/agent/studio-tasks.mjs +156 -0
- package/bin/agent/studio-tools.mjs +3 -2
- package/bin/agent/studio-turn-transaction.mjs +76 -0
- package/bin/cozyclay.mjs +5 -7
- package/dist/app/index.html +7 -6
- package/dist/assets/TaskBoard-DdDXMgZm.js +1 -0
- package/dist/assets/app-B2BpfCl2.js +5088 -0
- package/dist/assets/app-BlwOpest.css +1 -0
- package/dist/assets/compile-worker-D0pKioa0.js +5 -0
- package/dist/assets/landing-y3EqDgSZ.js +1 -0
- package/dist/assets/modulepreload-polyfill-P2Xu9kJm.js +1 -0
- package/dist/assets/motion3-compile-B887n77J.js +1 -0
- package/dist/assets/scene-asset-sync-COGOlF5T.css +1 -0
- package/dist/assets/scene-asset-sync-CQzEdsqu.js +13 -0
- package/dist/assets/task-board-BKaM7d-9.js +14 -0
- package/dist/assets/workflow-B8Dhzexj.js +179 -0
- package/dist/assets/x-bot-tpose-body-BusyR3eg.json +1 -0
- package/dist/assets/y-bot-tpose-body-Dy1VKChZ.json +1 -0
- package/dist/cozyclay-package.json +1 -1
- package/dist/greybox-to-video/index.html +2 -3
- package/dist/index.html +7 -57
- package/dist/llms.txt +2 -1
- package/dist/previs-software/index.html +2 -2
- package/dist/privacy/index.html +3 -7
- package/dist/seedance-camera-control/index.html +2 -2
- package/dist/sitemap.xml +5 -5
- package/dist/sw.js +5 -1
- package/dist/thumbs/blank-stage-dark.webp +0 -0
- package/dist/thumbs/blank-stage-light.webp +0 -0
- package/dist/workflow/index.html +5 -4
- package/mcp/mesh-file.mjs +3 -1
- package/mcp/server.mjs +3 -0
- package/package.json +3 -3
- package/src/App.jsx +50 -281
- package/src/analytics.js +3 -148
- package/src/app-stage.jsx +1 -1
- package/src/asset-pane.jsx +5 -10
- package/src/auto-flat.js +10 -0
- package/src/bus-task-scopes.js +69 -0
- package/src/bus-task-targets.js +48 -0
- package/src/bus-tasks.js +181 -0
- package/src/command-bus.js +15 -40
- package/src/command-history.js +36 -0
- package/src/commands/cast.js +10 -3
- package/src/commands/motion.js +2 -1
- package/src/commands/motion3-compile.js +51 -27
- package/src/commands/motion3.js +13 -7
- package/src/commands/project.js +1 -1
- package/src/commands/shared.js +9 -0
- package/src/commands/shot.js +16 -4
- package/src/controls.jsx +0 -11
- package/src/cuts.js +11 -0
- package/src/domains/cast.js +3 -2
- package/src/domains/motion.js +3 -10
- package/src/domains/playback.js +32 -0
- package/src/domains/scenes.js +3 -22
- package/src/domains/shots.js +5 -5
- package/src/dualview.jsx +11 -15
- package/src/hierarchy-panel.css +18 -4
- package/src/hierarchy-panel.jsx +12 -11
- package/src/kits/held.js +3 -2
- package/src/light-blockers.js +2 -2
- package/src/main.jsx +5 -0
- package/src/motion/ground.js +5 -14
- package/src/motion/playback-frame-store.js +79 -0
- package/src/motion/playback-probe.js +16 -0
- package/src/motion/playback-subject.js +7 -0
- package/src/motion/timeline.css +43 -5
- package/src/motion/timeline.jsx +4 -3
- package/src/motion3/body.js +37 -5
- package/src/motion3/carried.js +11 -3
- package/src/motion3/compile-job.js +1 -1
- package/src/motion3/compiler/anchors.js +33 -5
- package/src/motion3/compiler/compile.js +27 -4
- package/src/motion3/compiler/finger-close.js +137 -0
- package/src/motion3/compiler/grip.js +9 -3
- package/src/motion3/compiler/limbs.js +18 -3
- package/src/motion3/compiler/pose.js +6 -0
- package/src/motion3/compiler/socket-grip.js +34 -10
- package/src/motion3/compiler/validate-objects.js +17 -2
- package/src/motion3/compiler/validate-parts.js +2 -1
- package/src/motion3/compiler/vocab.js +4 -4
- package/src/motion3/describe.js +2 -2
- package/src/motion3/docs.js +1 -1
- package/src/motion3/fix/index.js +7 -3
- package/src/motion3/flight.js +38 -0
- package/src/motion3/free-motion.js +10 -7
- package/src/motion3/load.js +125 -0
- package/src/motion3/mass.js +23 -0
- package/src/motion3/object-keys.js +11 -6
- package/src/motion3/object-pose.js +11 -3
- package/src/motion3/pipeline.js +5 -0
- package/src/motion3/qa/explain.js +3 -1
- package/src/motion3/qa/grasp-checks.js +123 -0
- package/src/motion3/qa/hints-grasp.js +71 -0
- package/src/motion3/qa/index.js +3 -1
- package/src/motion3/qa/object-checks.js +7 -2
- package/src/motion3/qa/patch.js +2 -1
- package/src/motion3/qa/spec-checks.js +21 -1
- package/src/motion3/schema/fields.js +3 -3
- package/src/motion3/schema/topics.js +11 -10
- package/src/motion3/schema/types.js +5 -1
- package/src/motion3/seat.js +84 -0
- package/src/motion3/settle.js +11 -6
- package/src/motion3/shapes.js +70 -0
- package/src/motion3/skills/basic.js +61 -13
- package/src/motion3/skills/catch.js +71 -0
- package/src/motion3/skills/index.js +13 -4
- package/src/motion3/skills/info.js +14 -1
- package/src/motion3/skills/reach-human.js +139 -0
- package/src/motion3/skills/stance.js +92 -0
- package/src/motion3/skills/throw.js +72 -0
- package/src/motion3/sockets.js +21 -4
- package/src/motion3/views.js +28 -5
- package/src/object-catalog.jsx +0 -4
- package/src/object-gizmo.jsx +2 -1
- package/src/object-path.js +1 -1
- package/src/panels/ProjectPanel.jsx +42 -21
- package/src/panels/details.css +15 -4
- package/src/popover.js +37 -0
- package/src/posestudio.jsx +15 -10
- package/src/project-browser-art.jsx +19 -0
- package/src/project-browser.css +74 -121
- package/src/project-browser.jsx +36 -60
- package/src/props.jsx +4 -7
- package/src/retired-kinds.js +37 -0
- package/src/scene-objects.js +3 -7
- package/src/scenes.js +4 -5
- package/src/settings-menu.jsx +1 -20
- package/src/shell/BottomDock.jsx +9 -9
- package/src/shell/MenuBar.jsx +1 -9
- package/src/shell/PreferencesDialog.jsx +3 -4
- package/src/shell/ViewportToolbar.jsx +3 -3
- package/src/shell/add-camera-shot.js +11 -0
- package/src/shell/glass-regions.css +3 -2
- package/src/shell/glass.css +0 -5
- package/src/shell/lens-scrub-math.js +51 -0
- package/src/shell/lens-scrub.css +73 -0
- package/src/shell/lens-scrub.jsx +98 -0
- package/src/shell/mode.css +6 -5
- package/src/shell/preferences.css +1 -32
- package/src/shell/shell.css +18 -1
- package/src/shell/studio-shell-context.js +5 -0
- package/src/shot-frame.js +26 -0
- package/src/stage-canvas-rigs.jsx +7 -8
- package/src/stage-characters.jsx +26 -0
- package/src/stage-gizmo.js +43 -0
- package/src/stage-labels-ko.js +0 -6
- package/src/stage-startup-defaults.js +3 -9
- package/src/starter-scenes.js +5 -11
- package/src/studio-agent-commands.js +2 -2
- package/src/studio-agent-protocol.js +2 -7
- package/src/studio-app-binding.js +3 -3
- package/src/studio-elements.js +1 -1
- package/src/studio-error-codes.js +1 -1
- package/src/studio-motion-visual.js +4 -4
- package/src/styles/themes.css +13 -0
- package/src/styles.css +6 -674
- package/src/text/text-object.jsx +1 -1
- package/src/ui.jsx +8 -16
- package/src/use-embed-bridge.js +3 -6
- package/src/use-render-activity.js +3 -1
- package/src/view-ghosts.jsx +5 -3
- package/src/viewport-visible-rect.js +37 -0
- package/src/workflow/AgentPanel.jsx +75 -42
- package/src/workflow/AgentProgressCard.jsx +1 -1
- package/src/workflow/TaskBoard.jsx +102 -0
- package/src/workflow/TaskInline.jsx +114 -0
- package/src/workflow/agent-client.js +11 -25
- package/src/workflow/agent-panel.css +14 -1
- package/src/workflow/attachment-image.js +10 -3
- package/src/workflow/attachment-video.js +91 -0
- package/src/workflow/task-board.css +98 -0
- package/src/workflow/task-board.js +169 -0
- package/tools/check-eslint.mjs +2 -1
- package/tools/check-knip.mjs +2 -1
- package/tools/dev/pages/greybox-to-video.html +2 -3
- package/tools/dev/pages/previs-software.html +2 -2
- package/tools/dev/pages/privacy.html +3 -7
- package/tools/dev/pages/seedance-camera-control.html +2 -2
- package/tools/dev-full.mjs +11 -2
- package/tools/eslint-baseline.json +6 -6
- package/tools/knip-baseline.json +0 -11
- package/tools/loc-baseline.json +30 -31
- package/tools/metrics-snapshot.mjs +43 -5
- package/tools/render-start-thumbs.mjs +175 -0
- package/tools/run-tests.mjs +7 -14
- package/tools/sitemap.mjs +1 -1
- package/dist/assets/analytics-DbKG0NgD.js +0 -6
- package/dist/assets/app-34i-iUy1.js +0 -5088
- package/dist/assets/app-f-fkV5uP.css +0 -1
- package/dist/assets/compile-worker-DYpa2nvO.js +0 -5
- package/dist/assets/first-shot-handoff-CrGZ3n_O.js +0 -1
- package/dist/assets/landing-mq5bnqFE.js +0 -1
- package/dist/assets/scene-asset-sync-7J-w5oNh.js +0 -20
- package/dist/assets/scene-asset-sync-_S8NQl5B.css +0 -1
- package/dist/assets/workflow-dUhurYUc.js +0 -179
- package/dist/scenes/city-block.cclayproject +0 -1
- package/src/burn-in.js +0 -91
- package/src/camera-tutorial.jsx +0 -520
- package/src/facing-marks.js +0 -88
- package/src/first-shot-handoff.js +0 -44
- package/src/panels/motion.css +0 -197
- package/src/set-pieces.jsx +0 -183
- package/src/tutorial-analytics.js +0 -86
- package/src/tutorial-walk.js +0 -17
- package/src/use-camera-tutorial.js +0 -50
- package/src/use-semantic-state.js +0 -12
- package/tools/metrics/archive-traffic.mjs +0 -138
- package/tools/perf/ik-camera-drag.mjs +0 -138
|
@@ -1 +1 @@
|
|
|
1
|
-
{"payload":"{\"distribution\":\"npm\",\"package\":\"cozyclay\",\"version\":\"3.0
|
|
1
|
+
{"payload":"{\"distribution\":\"npm\",\"package\":\"cozyclay\",\"version\":\"3.1.0\",\"repository\":\"NomaDamas/CozyClay\",\"content_sha256\":\"a82f58c8669edb7800fcdb79939b1cfc242616a17675fdf278927d7f4f5d016e\"}","signature":"EmIwI46B/uZyNSY0QYgaR43ElVC4MFt2ROKPMaDioTSwJytnF2kwqj3qWkaJIPvqeVR4sN5qglBO6Ya+mOprCQ=="}
|
|
@@ -185,9 +185,8 @@
|
|
|
185
185
|
<h2>Do it in the browser</h2>
|
|
186
186
|
<p>
|
|
187
187
|
CozyClay is open source previs that runs in a Chromium tab. It exists for exactly this loop: block,
|
|
188
|
-
camera, export, generate. The <a href="/#try">playground on the home page</a>
|
|
189
|
-
|
|
190
|
-
opens that set on your machine.
|
|
188
|
+
camera, export, generate. The <a href="/#try">playground on the home page</a> runs the studio in the page, and
|
|
189
|
+
<code>npx cozyclay</code> runs it on your machine.
|
|
191
190
|
</p>
|
|
192
191
|
<div class="cta">
|
|
193
192
|
<a class="btn primary" href="/#try">Try it in your browser</a>
|
package/dist/index.html
CHANGED
|
@@ -159,23 +159,9 @@
|
|
|
159
159
|
a.card { color: var(--ink); text-decoration: none; font-size: 19px; font-weight: 600; min-height: 96px; transition: transform .2s; }
|
|
160
160
|
a.card:hover { transform: translateY(-2px); }
|
|
161
161
|
|
|
162
|
-
/* Playground. The ids and data-state values belong to the
|
|
163
|
-
/* The steps sit in the window's title bar so the studio gets the full
|
|
164
|
-
content width and height; started, the demo scrolls up to fill the screen. */
|
|
162
|
+
/* Playground. The ids and data-state values belong to the script below. */
|
|
165
163
|
.demo { scroll-margin-top: 76px; }
|
|
166
164
|
.demo .window { min-width: 0; box-shadow: 0 2px 6px rgba(0, 0, 0, .06), 0 24px 48px rgba(0, 0, 0, .14); }
|
|
167
|
-
.tutorial-steps { flex: 1; min-width: 0; display: flex; justify-content: center; gap: 4px; margin: 0 52px 0 0; padding: 0; list-style: none; overflow: hidden; }
|
|
168
|
-
.tutorial-steps[hidden] { display: none; }
|
|
169
|
-
.tutorial-steps li {
|
|
170
|
-
display: flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 10px; border-radius: 999px; white-space: nowrap;
|
|
171
|
-
background: var(--panel); border: 1px solid var(--line); color: var(--ink); font-size: 14px;
|
|
172
|
-
opacity: .55; transition: opacity .2s, background .15s;
|
|
173
|
-
}
|
|
174
|
-
.playground-live .tutorial-steps li { opacity: 1; }
|
|
175
|
-
.tutorial-steps li[data-done="1"] { color: var(--ok); border-color: var(--ok); }
|
|
176
|
-
.tutorial-steps li[data-done="1"]::after { content: "✓"; font-weight: 700; }
|
|
177
|
-
.tutorial-steps li[data-current="1"] { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
|
|
178
|
-
|
|
179
165
|
.playground {
|
|
180
166
|
position: relative;
|
|
181
167
|
/* Header 64 + margin 12 + title bar 40 + bottom bar 52 + 12. */
|
|
@@ -216,26 +202,6 @@
|
|
|
216
202
|
.playground-bar .spacer { flex: 1; }
|
|
217
203
|
button.copy[data-state="copied"] { border-color: var(--ok); color: var(--ok); }
|
|
218
204
|
|
|
219
|
-
.tutorial-card {
|
|
220
|
-
position: absolute; left: 14px; top: 14px; z-index: 2; max-width: 46%;
|
|
221
|
-
display: flex; gap: 10px; align-items: baseline;
|
|
222
|
-
padding: 10px 14px; border-radius: 10px; pointer-events: none;
|
|
223
|
-
background: rgba(255, 255, 255, .92); border: 1px solid var(--line); color: var(--ink);
|
|
224
|
-
font-size: 17px; line-height: 1.45; backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
|
|
225
|
-
box-shadow: var(--shadow-card);
|
|
226
|
-
}
|
|
227
|
-
.tutorial-card[hidden] { display: none; }
|
|
228
|
-
.tutorial-card-step { color: var(--accent); font-size: 14px; font-weight: 600; white-space: nowrap; }
|
|
229
|
-
.tutorial-card b { color: var(--accent); font-weight: 600; }
|
|
230
|
-
.tutorial-card kbd, .tutorial-done kbd {
|
|
231
|
-
padding: 2px 6px; border-radius: 5px;
|
|
232
|
-
border: 1px solid var(--line-strong); background: var(--bg); color: var(--ink);
|
|
233
|
-
}
|
|
234
|
-
.tutorial-card kbd[data-done="1"] { border-color: var(--ok); color: var(--ok); background: #e6f2e7; }
|
|
235
|
-
.tutorial-done { flex-basis: 100%; margin: 0 0 4px; color: var(--ink); display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
|
|
236
|
-
.tutorial-done[hidden] { display: none; }
|
|
237
|
-
.tutorial-done p { flex-basis: 100%; margin: 0; }
|
|
238
|
-
#playground-download-status, #playground-download-error { flex-basis: 100%; margin: 0; }
|
|
239
205
|
.demo-note { margin: 24px 0 0; }
|
|
240
206
|
|
|
241
207
|
/* Quick start */
|
|
@@ -285,11 +251,8 @@
|
|
|
285
251
|
.playground-cover .btn, .playground-cover small { display: none; }
|
|
286
252
|
.playground-phone { display: block; font-size: 14px; padding: 0 24px; text-align: center; }
|
|
287
253
|
.playground-cover { cursor: default; }
|
|
288
|
-
/* No playground here, so no steps squeezed into the title bar. */
|
|
289
|
-
.tutorial-steps { visibility: hidden; }
|
|
290
254
|
}
|
|
291
255
|
@media (max-width: 720px) {
|
|
292
|
-
.tutorial-card { max-width: 90%; }
|
|
293
256
|
section { padding: 64px 0; }
|
|
294
257
|
.hero { padding: 56px 0 40px; }
|
|
295
258
|
.proof { padding-bottom: 64px; }
|
|
@@ -298,12 +261,11 @@
|
|
|
298
261
|
}
|
|
299
262
|
@media (prefers-reduced-motion: reduce) {
|
|
300
263
|
html { scroll-behavior: auto; }
|
|
301
|
-
.btn, a.card, .seg button
|
|
264
|
+
.btn, a.card, .seg button { transition: none; }
|
|
302
265
|
}
|
|
303
266
|
</style>
|
|
304
|
-
<script type="module" crossorigin src="/assets/landing-
|
|
305
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
306
|
-
<link rel="modulepreload" crossorigin href="/assets/first-shot-handoff-CrGZ3n_O.js">
|
|
267
|
+
<script type="module" crossorigin src="/assets/landing-y3EqDgSZ.js"></script>
|
|
268
|
+
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-P2Xu9kJm.js">
|
|
307
269
|
</head>
|
|
308
270
|
<body>
|
|
309
271
|
<header class="site">
|
|
@@ -383,28 +345,16 @@
|
|
|
383
345
|
<h2>Try it</h2>
|
|
384
346
|
<div class="demo">
|
|
385
347
|
<div class="window">
|
|
386
|
-
<div class="titlebar"
|
|
348
|
+
<div class="titlebar" aria-hidden="true"><i></i><i></i><i></i><span>CozyClay</span></div>
|
|
387
349
|
<div class="playground" id="playground" style="background-image: url('/media/playground-poster.jpg')">
|
|
388
350
|
<button class="playground-cover" id="playground-start" type="button" aria-label="Start the playground">
|
|
389
|
-
<span class="btn primary">
|
|
351
|
+
<span class="btn primary">Open the studio here</span>
|
|
390
352
|
<small>About 2 MB</small>
|
|
391
353
|
<span class="playground-phone">Needs a mouse and keyboard. Come back on a computer, or run <code>npx cozyclay --via site</code>.</span>
|
|
392
354
|
</button>
|
|
393
355
|
<div class="playground-loading">Loading the studio…</div>
|
|
394
|
-
<div class="tutorial-card" id="tutorial-card" aria-live="polite">
|
|
395
|
-
<span class="tutorial-card-step" id="tutorial-card-step"></span>
|
|
396
|
-
<span class="tutorial-card-text" id="tutorial-now"></span>
|
|
397
|
-
</div>
|
|
398
356
|
</div>
|
|
399
357
|
<div class="playground-bar">
|
|
400
|
-
<div class="tutorial-done" id="tutorial-done" hidden>
|
|
401
|
-
<p>Take your shot with you. Video export is not offered in this embedded Playground.</p>
|
|
402
|
-
<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>
|
|
403
|
-
<button type="button" id="playground-download" class="copy">Download my project</button>
|
|
404
|
-
<button type="button" id="playground-handoff-dismiss">Continue editing</button>
|
|
405
|
-
</div>
|
|
406
|
-
<p id="playground-download-status" role="status" hidden></p>
|
|
407
|
-
<p id="playground-download-error" role="alert" hidden></p>
|
|
408
358
|
<span class="spacer"></span>
|
|
409
359
|
<button type="button" id="playground-full">Fullscreen</button>
|
|
410
360
|
<a href="/app/" target="_blank" rel="noopener">Open studio ↗</a>
|
|
@@ -422,7 +372,7 @@
|
|
|
422
372
|
<div class="cards">
|
|
423
373
|
<div class="card">
|
|
424
374
|
<h3>Stage a scene</h3>
|
|
425
|
-
<p>Primitives,
|
|
375
|
+
<p>Primitives, imported models, plan view.</p>
|
|
426
376
|
</div>
|
|
427
377
|
<div class="card">
|
|
428
378
|
<h3>Move through the set</h3>
|
package/dist/llms.txt
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Pages
|
|
6
6
|
|
|
7
|
-
- [Home](https://cozyclay.org/): what it does, demo reels, an in-browser playground
|
|
7
|
+
- [Home](https://cozyclay.org/): what it does, demo reels, an in-browser playground running the studio, quick start.
|
|
8
8
|
- [Greybox to AI video](https://cozyclay.org/greybox-to-video/): why a grey blockout is the most reliable input to a video model, and the block-then-generate workflow.
|
|
9
9
|
- [Previs software compared](https://cozyclay.org/previs-software/): free, open source and browser-based previs tools side by side.
|
|
10
10
|
- [Seedance 2.5 camera control](https://cozyclay.org/seedance-camera-control/): getting the same camera every take with a reference clip instead of camera prompts.
|
|
@@ -28,4 +28,5 @@ For source-checkout CI, start the same Studio in owned headless Chrome with `nod
|
|
|
28
28
|
## Source
|
|
29
29
|
|
|
30
30
|
- GitHub: https://github.com/NomaDamas/CozyClay
|
|
31
|
+
- Agent install guide: https://github.com/NomaDamas/CozyClay/blob/main/INSTALL_FOR_AGENTS.md
|
|
31
32
|
- npm: https://www.npmjs.com/package/cozyclay
|
|
@@ -124,8 +124,8 @@
|
|
|
124
124
|
<p>
|
|
125
125
|
The honest split is time, not money. Blender can do everything on this page and will take an
|
|
126
126
|
afternoon to learn just the camera. CozyClay does one thing (block, camera, cut, export) and expects
|
|
127
|
-
you to be productive in the first ten minutes;
|
|
128
|
-
|
|
127
|
+
you to be productive in the first ten minutes; the <a href="/#try">playground on the home page</a>
|
|
128
|
+
runs it in the page.
|
|
129
129
|
</p>
|
|
130
130
|
</section>
|
|
131
131
|
|
package/dist/privacy/index.html
CHANGED
|
@@ -132,12 +132,11 @@ cclay telemetry on</code></pre>
|
|
|
132
132
|
<thead><tr><th>Event</th><th>Purpose</th></tr></thead>
|
|
133
133
|
<tbody>
|
|
134
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),
|
|
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), camera_fly or export_video</td></tr>
|
|
136
136
|
<tr><td>$pageview, scene:created, scene:loaded, craft:first_action, activation:completed</td><td>Funnel and drop-off analysis</td></tr>
|
|
137
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>
|
|
138
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>
|
|
139
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>
|
|
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>
|
|
141
140
|
<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
141
|
<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
142
|
<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>
|
|
@@ -163,10 +162,6 @@ cclay telemetry on</code></pre>
|
|
|
163
162
|
<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
163
|
<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>
|
|
165
164
|
<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>
|
|
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>
|
|
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>
|
|
168
|
-
<tr><td>tutorial:step_completed</td><td>One completion per step per attempt; surface (studio or playground), numeric tutorial_version 1, step_kind (fly, walk, dolly, orbit, shot, rail or play) and elapsed_bucket (lt1s, 1-3s, 3-10s, 10-30s or gte30s) since entering that step. No raw timing, prompts, scene contents, names or paths.</td></tr>
|
|
169
|
-
<tr><td>tutorial:completed</td><td>All seven steps completed; surface (studio or playground), numeric tutorial_version 1 and elapsed_bucket (lt1s, 1-3s, 3-10s, 10-30s or gte30s) since tutorial start. Sample loading and camera playback do not count as a user edit.</td></tr>
|
|
170
165
|
</tbody>
|
|
171
166
|
</table>
|
|
172
167
|
</div>
|
|
@@ -178,7 +173,8 @@ cclay telemetry on</code></pre>
|
|
|
178
173
|
<section>
|
|
179
174
|
<h2>The hosted demo (Google sign-in)</h2>
|
|
180
175
|
<p>
|
|
181
|
-
The hosted
|
|
176
|
+
The hosted demo is not open to the public right now. This section describes what it handled while it
|
|
177
|
+
was running. The hosted motion demo asks you to sign in with Google so that the daily generation cap can be
|
|
182
178
|
enforced per account. It receives your Google account's email address and basic profile only, stores
|
|
183
179
|
a session cookie signed by our server, and keeps your prompt and the generated result for up to 30
|
|
184
180
|
days so the ticket link keeps working. Results are stored on Cloudflare R2 and deleted after that
|
|
@@ -146,8 +146,8 @@
|
|
|
146
146
|
Any 3D tool that renders flat can make the reference. Blender works with a clay material and a
|
|
147
147
|
workbench render. CozyClay, open source and in the browser, exports the flat clip directly with the
|
|
148
148
|
delivery ratio and a camera timeline built in; the reel at the top of this page came out of it.
|
|
149
|
-
The <a href="/#try">home-page playground</a>
|
|
150
|
-
|
|
149
|
+
The <a href="/#try">home-page playground</a> runs the studio in the page, and
|
|
150
|
+
<code>npx cozyclay</code> runs it locally.
|
|
151
151
|
</p>
|
|
152
152
|
<div class="cta">
|
|
153
153
|
<a class="btn primary" href="/#try">Try it in your browser</a>
|
package/dist/sitemap.xml
CHANGED
|
@@ -2,19 +2,19 @@
|
|
|
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-10-
|
|
5
|
+
<lastmod>2026-10-21</lastmod>
|
|
6
6
|
</url>
|
|
7
7
|
<url>
|
|
8
8
|
<loc>https://cozyclay.org/greybox-to-video/</loc>
|
|
9
|
-
<lastmod>2026-
|
|
9
|
+
<lastmod>2026-10-21</lastmod>
|
|
10
10
|
</url>
|
|
11
11
|
<url>
|
|
12
12
|
<loc>https://cozyclay.org/previs-software/</loc>
|
|
13
|
-
<lastmod>2026-
|
|
13
|
+
<lastmod>2026-10-21</lastmod>
|
|
14
14
|
</url>
|
|
15
15
|
<url>
|
|
16
16
|
<loc>https://cozyclay.org/seedance-camera-control/</loc>
|
|
17
|
-
<lastmod>2026-
|
|
17
|
+
<lastmod>2026-10-21</lastmod>
|
|
18
18
|
</url>
|
|
19
19
|
<url>
|
|
20
20
|
<loc>https://cozyclay.org/ai-camera-control/</loc>
|
|
@@ -22,6 +22,6 @@
|
|
|
22
22
|
</url>
|
|
23
23
|
<url>
|
|
24
24
|
<loc>https://cozyclay.org/privacy/</loc>
|
|
25
|
-
<lastmod>2026-10-
|
|
25
|
+
<lastmod>2026-10-22</lastmod>
|
|
26
26
|
</url>
|
|
27
27
|
</urlset>
|
package/dist/sw.js
CHANGED
|
@@ -10,7 +10,9 @@ const CACHE_PREFIX = "cozyclay-pwa-";
|
|
|
10
10
|
// v7: force-refresh the asset cache — v6 clients were holding a stale app shell
|
|
11
11
|
// (the html-flex crash-screen regression) and never re-fetching it.
|
|
12
12
|
// v8: CozyClay 3 drops the shipped walk clip (motion is compiled in the studio).
|
|
13
|
-
|
|
13
|
+
// v9: start-screen template thumbnails (public/thumbs, tools/render-start-thumbs.mjs).
|
|
14
|
+
// v10: the City Block starter and its thumbnails are removed.
|
|
15
|
+
const CACHE_NAME = `${CACHE_PREFIX}v10`;
|
|
14
16
|
// The installable app is the studio, not the landing page.
|
|
15
17
|
const APP_SHELL = "/app/";
|
|
16
18
|
const CORE_ASSETS = [
|
|
@@ -26,6 +28,8 @@ const CORE_ASSETS = [
|
|
|
26
28
|
"./fonts/inter-latin.woff2",
|
|
27
29
|
"./models/x-bot-tpose.fbx",
|
|
28
30
|
"./models/y-bot-tpose.fbx",
|
|
31
|
+
"./thumbs/blank-stage-light.webp",
|
|
32
|
+
"./thumbs/blank-stage-dark.webp",
|
|
29
33
|
];
|
|
30
34
|
|
|
31
35
|
async function cacheResponse(cache, request, response) {
|
|
Binary file
|
|
Binary file
|
package/dist/workflow/index.html
CHANGED
|
@@ -8,12 +8,13 @@
|
|
|
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-
|
|
11
|
+
<script type="module" crossorigin src="/assets/workflow-B8Dhzexj.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-P2Xu9kJm.js">
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/task-board-BKaM7d-9.js">
|
|
14
15
|
<link rel="modulepreload" crossorigin href="/assets/fflate.module-KbGj5-H6.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/scene-asset-sync-
|
|
16
|
-
<link rel="stylesheet" crossorigin href="/assets/scene-asset-sync-
|
|
16
|
+
<link rel="modulepreload" crossorigin href="/assets/scene-asset-sync-CQzEdsqu.js">
|
|
17
|
+
<link rel="stylesheet" crossorigin href="/assets/scene-asset-sync-COGOlF5T.css">
|
|
17
18
|
<link rel="stylesheet" crossorigin href="/assets/workflow-DRdwoDBT.css">
|
|
18
19
|
</head>
|
|
19
20
|
<body>
|
package/mcp/mesh-file.mjs
CHANGED
|
@@ -2,6 +2,7 @@ import { constants as fsConstants } from "node:fs";
|
|
|
2
2
|
import { open as openFile } from "node:fs/promises";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { basename, join, resolve } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
5
6
|
|
|
6
7
|
import { ASSET_MAX_SOURCE_BYTES } from "../src/scene-assets.js";
|
|
7
8
|
import { classifyMeshBytes, meshMimeForKind } from "../src/mesh-sniff.js";
|
|
@@ -12,7 +13,8 @@ export function normalizeMeshPath(raw, { home = homedir() } = {}) {
|
|
|
12
13
|
if (path.startsWith("file:")) {
|
|
13
14
|
try {
|
|
14
15
|
const url = new URL(path);
|
|
15
|
-
|
|
16
|
+
// On Windows the pathname of file:///D:/x is /D:/x; fileURLToPath drops that leading slash.
|
|
17
|
+
if (url.protocol === "file:") path = process.platform === "win32" ? fileURLToPath(url) : decodeURIComponent(url.pathname);
|
|
16
18
|
} catch {
|
|
17
19
|
path = path.replace(/^file:\/\//, "");
|
|
18
20
|
}
|
package/mcp/server.mjs
CHANGED
|
@@ -175,6 +175,9 @@ if (httpFlag === -1) {
|
|
|
175
175
|
setLiveHub(hub);
|
|
176
176
|
configureLiveHub(hub, liveToken);
|
|
177
177
|
await server.connect(new StdioServerTransport());
|
|
178
|
+
// A client ends a stdio session by closing stdin. Exit then, so the exit hooks
|
|
179
|
+
// remove the endpoint file even where SIGTERM cannot be caught (Windows).
|
|
180
|
+
process.stdin.once("end", () => process.exit(0));
|
|
178
181
|
} else {
|
|
179
182
|
// Tools execute in the stdio children, not this HTTP front. Each child tries
|
|
180
183
|
// to own the one editor port; the winner is live and later sessions see the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cozyclay",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Open source previs software in the browser: block a scene, pose characters, author camera moves and cuts, then take the same shots to an AI video model.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "node tools/dev-full.mjs --host 127.0.0.1 --port 5180",
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
"test:appearance": "node test/verify-appearance.mjs",
|
|
33
33
|
"test:auto-color": "node test/verify-auto-color.mjs",
|
|
34
34
|
"test:shot-guides": "node test/verify-shot-guides.mjs",
|
|
35
|
-
"test:burn-in": "node test/verify-burn-in.mjs",
|
|
36
35
|
"test:layout": "node test/verify-layout.mjs",
|
|
37
36
|
"test:timeline-camera": "node test/verify-timeline-camera.mjs",
|
|
38
37
|
"test:timeline-shots": "node test/verify-timeline-shots.mjs",
|
|
@@ -57,7 +56,7 @@
|
|
|
57
56
|
"prepack": "npm run build && node tools/prepare-package.mjs",
|
|
58
57
|
"postpack": "node tools/prepare-package.mjs --clean",
|
|
59
58
|
"prepublishOnly": "npm run build && node tools/prepare-package.mjs --check-key && node tools/prepare-package.mjs && node tools/verify-package-tarball.mjs",
|
|
60
|
-
"metrics:
|
|
59
|
+
"metrics:snapshot": "node tools/metrics-snapshot.mjs"
|
|
61
60
|
},
|
|
62
61
|
"license": "AGPL-3.0-or-later",
|
|
63
62
|
"type": "module",
|
|
@@ -106,6 +105,7 @@
|
|
|
106
105
|
"mcp/README.md",
|
|
107
106
|
"mcp/LIVE-PROTOCOL.md",
|
|
108
107
|
"README.md",
|
|
108
|
+
"INSTALL_FOR_AGENTS.md",
|
|
109
109
|
"CHANGELOG.md",
|
|
110
110
|
"LICENSE",
|
|
111
111
|
"LICENSES",
|