cozyclay 3.1.4 → 3.1.5
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 +86 -0
- package/INSTALL_FOR_AGENTS.md +3 -0
- package/README.md +5 -0
- package/bin/agent/agent-failure-codes.mjs +31 -0
- package/bin/agent/agent-routes.mjs +5 -10
- package/bin/agent/agent-runner.mjs +5 -3
- package/bin/cozyclay.mjs +16 -64
- package/bin/studio-routes.mjs +69 -0
- package/bin/update-check.mjs +53 -5
- package/bin/update-install.mjs +136 -0
- package/bin/update-routes.mjs +80 -0
- package/dist/ai-camera-control/index.html +1 -1
- package/dist/app/index.html +5 -6
- package/dist/assets/{TaskBoard-U1Yl-4F1.js → TaskBoard-DwXhsJXz.js} +1 -1
- package/dist/assets/app-CEP7jzXB.css +1 -0
- package/dist/assets/app-CTKcyPM-.js +5144 -0
- package/dist/assets/compile-worker-or7djI2v.js +6 -0
- package/dist/assets/{motion3-compile-DDG3wklD.js → motion3-compile-Du7UXrWn.js} +1 -1
- package/dist/assets/scene-asset-sync-t45pWCyq.js +13 -0
- package/dist/assets/task-board-CkLZGPkv.js +15 -0
- package/dist/assets/workflow-DJwOUzqJ.js +179 -0
- package/dist/cozyclay-package.json +1 -1
- package/dist/greybox-to-video/index.html +3 -3
- package/dist/index.html +533 -264
- package/dist/media/cozyclay-mark.png +0 -0
- package/dist/media/cozyclay-truck-demo-poster.jpg +0 -0
- package/dist/media/step-move-poster.jpg +0 -0
- package/dist/media/step-shoot-poster.jpg +0 -0
- package/dist/media/step-stage-poster.jpg +0 -0
- package/dist/media/truck-greybox-poster.jpg +0 -0
- package/dist/media/truck-seedance-poster.jpg +0 -0
- package/dist/previs-software/index.html +4 -4
- package/dist/privacy/index.html +46 -19
- package/dist/seedance-camera-control/index.html +3 -3
- package/dist/sitemap.xml +6 -6
- package/dist/workflow/index.html +3 -4
- package/package.json +1 -1
- package/src/App.jsx +59 -70
- package/src/analytics-controls.js +17 -0
- package/src/analytics-friction.js +124 -0
- package/src/analytics-strict.js +139 -0
- package/src/analytics-values.js +49 -0
- package/src/analytics.js +37 -133
- package/src/asset-pane.jsx +4 -5
- package/src/click-friction.js +101 -0
- package/src/command-bus-telemetry.js +155 -0
- package/src/command-bus.js +10 -8
- package/src/commands/motion3.js +7 -2
- package/src/controls.jsx +3 -2
- package/src/crash-telemetry.js +45 -0
- package/src/domains/cast.js +2 -11
- package/src/domains/motion.js +49 -38
- package/src/domains/objects.js +3 -0
- package/src/domains/scene-undo.js +27 -0
- package/src/domains/scenes.js +1 -1
- package/src/error-boundary.jsx +2 -0
- package/src/export-attempt.js +100 -0
- package/src/export-workspace.js +12 -1
- package/src/first-success-guide.jsx +11 -7
- package/src/guide-telemetry.js +60 -0
- package/src/hierarchy-panel.jsx +2 -1
- package/src/live-control.js +2 -9
- package/src/locale-zh/domains.js +1 -0
- package/src/main.jsx +5 -0
- package/src/motion/timeline.jsx +9 -5
- package/src/motion-draft-telemetry.js +62 -0
- package/src/motion3/compiler/channels.js +7 -5
- package/src/motion3/compiler/compile.js +6 -2
- package/src/motion3/compiler/finger-close.js +84 -7
- package/src/motion3/compiler/head-lead.js +70 -0
- package/src/motion3/compiler/head-steady.js +1 -1
- package/src/motion3/compiler/limbs.js +10 -3
- package/src/motion3/compiler/pose.js +1 -1
- package/src/motion3/compiler/validate.js +5 -3
- package/src/motion3/pipeline.js +4 -0
- package/src/motion3/qa/explain.js +2 -1
- package/src/motion3/qa/finger-checks.js +80 -0
- package/src/motion3/qa/gait-observe.js +88 -0
- package/src/motion3/qa/grasp-checks.js +3 -0
- package/src/motion3/qa/hints-grasp.js +8 -0
- package/src/motion3/qa/index.js +2 -1
- package/src/motion3/qa/motion-life.js +26 -3
- package/src/motion3/schema/topics.js +1 -1
- package/src/playback-telemetry.js +107 -0
- package/src/post-turn-edits.js +62 -0
- package/src/search-friction.js +49 -0
- package/src/semantic-edit.js +19 -6
- package/src/shell/BoardSlot.jsx +3 -3
- package/src/shell/BottomDock.jsx +1 -1
- package/src/shell/DetailsSlot.jsx +1 -1
- package/src/shell/MenuBar.jsx +13 -13
- package/src/shell/StudioShell.jsx +7 -1
- package/src/shell/TopBar.jsx +2 -0
- package/src/shell/ViewportToolbar.jsx +2 -2
- package/src/shortcut-friction.js +122 -0
- package/src/stage-canvas-rigs.jsx +3 -4
- package/src/studio-telemetry.js +97 -0
- package/src/thrash-friction.js +90 -0
- package/src/update/UpdateChip.jsx +86 -0
- package/src/update/UpdateDialog.jsx +147 -0
- package/src/update/update-client.js +188 -0
- package/src/update/update-telemetry.js +78 -0
- package/src/update/update.css +94 -0
- package/src/use-webgl-available.js +35 -0
- package/src/workflow/AgentPanel.jsx +29 -30
- package/src/workflow/CozySceneNode.jsx +1 -1
- package/src/workflow/LoginPanel.jsx +15 -5
- package/src/workflow/agent-client.js +10 -91
- package/src/workflow/agent-failure-codes.js +47 -0
- package/src/workflow/agent-turn-telemetry.js +222 -0
- package/src/workflow/connect-telemetry.js +86 -0
- package/src/workflow/prompt-telemetry.js +105 -0
- package/tools/dev/pages/privacy.html +44 -17
- package/tools/loc-baseline.json +10 -10
- package/tools/run-tests.mjs +8 -8
- package/dist/assets/app-BdRlMf4J.css +0 -1
- package/dist/assets/app-KXdgBC-S.js +0 -5144
- package/dist/assets/compile-worker-oy_P9HHh.js +0 -6
- package/dist/assets/landing-y3EqDgSZ.js +0 -1
- package/dist/assets/modulepreload-polyfill-P2Xu9kJm.js +0 -1
- package/dist/assets/scene-asset-sync-Bz59Ghdz.js +0 -13
- package/dist/assets/task-board-DFfNa0xg.js +0 -15
- package/dist/assets/workflow-BMJGd_gZ.js +0 -179
- package/dist/media/playground-poster.jpg +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
<div class="wrap">
|
|
58
58
|
<a class="brand" href="/">CozyClay</a>
|
|
59
59
|
<nav>
|
|
60
|
-
<a href="
|
|
60
|
+
<a href="/app/">Try it</a>
|
|
61
61
|
<a href="/greybox-to-video/">Greybox to video</a>
|
|
62
62
|
<a href="/previs-software/">Previs software</a>
|
|
63
63
|
<a href="/ai-camera-control/">Camera control</a>
|
|
@@ -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; the <a href="
|
|
128
|
-
runs it in
|
|
127
|
+
you to be productive in the first ten minutes; the <a href="/app/">browser studio</a>
|
|
128
|
+
runs it in a tab.
|
|
129
129
|
</p>
|
|
130
130
|
</section>
|
|
131
131
|
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
<li><strong>Everything, given time:</strong> Blender.</li>
|
|
176
176
|
</ul>
|
|
177
177
|
<div class="cta">
|
|
178
|
-
<a class="btn primary" href="
|
|
178
|
+
<a class="btn primary" href="/app/">Try CozyClay in your browser</a>
|
|
179
179
|
<a class="btn ghost" href="https://github.com/NomaDamas/CozyClay">Source on GitHub</a>
|
|
180
180
|
</div>
|
|
181
181
|
</section>
|
package/dist/privacy/index.html
CHANGED
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"description": "What cozyclay.org and the cozyclay npm package collect (anonymous usage analytics via PostHog, no cookies, no session recording, no project content), how to opt out, and what the hosted demo stores.",
|
|
34
34
|
"image": "https://cozyclay.org/media/cozyclay-demo-poster.jpg",
|
|
35
35
|
"mainEntityOfPage": "https://cozyclay.org/privacy/",
|
|
36
|
-
"datePublished": "2026-
|
|
37
|
-
"dateModified": "2026-
|
|
36
|
+
"datePublished": "2026-10-25",
|
|
37
|
+
"dateModified": "2026-10-25",
|
|
38
38
|
"name": "Privacy"
|
|
39
39
|
}
|
|
40
40
|
</script>
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
<div class="wrap">
|
|
45
45
|
<a class="brand" href="/">CozyClay</a>
|
|
46
46
|
<nav>
|
|
47
|
-
<a href="
|
|
47
|
+
<a href="/app/">Try it</a>
|
|
48
48
|
<a href="/greybox-to-video/">Greybox to video</a>
|
|
49
49
|
<a href="/previs-software/">Previs software</a>
|
|
50
50
|
<a href="/ai-camera-control/">Camera control</a>
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
<div class="hero">
|
|
58
58
|
<h1>Privacy</h1>
|
|
59
59
|
<p class="lede">Short version: anonymous usage counts, no cookies, no recordings, never your project content. Every part of it can be turned off.</p>
|
|
60
|
-
<p class="meta">Effective
|
|
60
|
+
<p class="meta">Effective October 25, 2026</p>
|
|
61
61
|
</div>
|
|
62
62
|
|
|
63
63
|
<section>
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
A copied start command such as <code>npx cozyclay --via site</code> stores that one source label
|
|
89
89
|
with the first-launch receipt instead of asking where you heard about CozyClay.
|
|
90
90
|
Prompt text, asset names,
|
|
91
|
-
file names, project content, local paths and any user-entered text are never collected. Session
|
|
91
|
+
file names, project content, local paths and any user-entered text are never collected. For a prompt sent to the agent, only two values derived from its text leave the device: a length bucket and a similarity grade (first, same, near or different) that the browser computes against the previous prompt. Neither the text nor its words are sent; the previous prompt is kept in the page only as its set of words, until the page closes. Session
|
|
92
92
|
duration and action counts are bucketed. Source checkouts, forks, development servers, CI and tests
|
|
93
93
|
send nothing.
|
|
94
94
|
</p>
|
|
@@ -131,42 +131,69 @@ cclay telemetry on</code></pre>
|
|
|
131
131
|
<table>
|
|
132
132
|
<thead><tr><th>Event</th><th>Purpose</th></tr></thead>
|
|
133
133
|
<tbody>
|
|
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>
|
|
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 scenes_touched (how many scenes were created or loaded in the session, an exact count capped at 20, not bucketed), session_id (the opaque random session id the PostHog SDK generates, used only to join a session's last events, such as an error just before it ended) and 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>app:friction_summary</td><td>Once per session, next to app:session_ended: how much friction the session had, as closed buckets only. active_time (the session duration bucket); counts of refusals the Studio gave the user (refusals_ui) and the agent (refusals_agent), user undos (undos), errors (errors), browser long tasks (long_tasks) and motion compiles (compiles), each as 0, 1, 2, 3, 4-5, 6-10 or gte11; the longest long task (long_task_max: lt50, 50-150, 150-500, 500-2000 or gte2000 ms); the share of late playback ticks (late_tick_ratio: 0, lt5, 5-20, 20-50 or gte50 %). rage_clicks and dead_clicks count every ui:rage_click and ui:dead_click, shortcut_ignored every shortcut:ignored, search_empty every search:no_results, and nav_thrash and camera_thrash every nav:thrash and camera:thrash, including those past their event's cap. Never which command, control, key or text was involved.</td></tr>
|
|
136
|
+
<tr><td>studio:refused</td><td>A command the Studio refused, as closed values only: code (one of the Studio's fixed error codes, such as INVALID_ARGUMENT, STALE_SCENE or TARGET_BUSY, else other), origin (ui for the user's own control, agent for the agent or an MCP client), phase (admission, refused before any change, or commit, refused after it started changing) and group (the command's family: object, shot, cast, scene, motion, edit, task, agent or other). At most 3 per code, group and origin per session; the rest are only counted in app:friction_summary. A cancel the caller asked for is not a refusal. Never the command's arguments, target or message.</td></tr>
|
|
137
|
+
<tr><td>edit:undone</td><td>A user undo (agent undos are not counted): age (lt2s, 2-10s, 10-60s or gte60s since the undone edit was made, only when the undo was done and its age is known), kind (pose, camera, object, shot, prompt, agent_turn for the agent's whole turn, ik_preview for an un-applied IK drag, or other), via (key, menu or button) and result (done, noop when there was nothing to undo, or refused). At most 20 per session. Never what was undone.</td></tr>
|
|
138
|
+
<tr><td>agent:turn_summary</td><td>One per agent turn: turn_id (the same random id as agent:turn_*); outcome (succeeded, failed or cancelled); wall (the turn's length) and first_tool (time to the first tool call, absent without tools), each lt10s, 10-30s, 30-60s, 1-2m, 2-5m or gte5m; counts of tool calls (tool_calls), failed tool calls (tool_failed), tool calls the Studio refused (refused), commands re-sent once after a stale revision or a busy gesture (stale_retry) and motion compiles (drafts), each as 0, 1, 2, 3, 4-5, 6-10 or gte11; refusal_top (the most frequent refusal code, or none); authored (true or false: the turn changed the scene); qa_first and qa_last (clean or problems, absent without drafts); qa_trend (improved, flat, worse, or na with fewer than 2 drafts); stuck (true or false: the motion compiler's stop rule fired); cancel_phase (before_tool, during_tool, after_tool or na). No prompt text, tool names, messages or responses.</td></tr>
|
|
139
|
+
<tr><td>agent:post_turn_edit</td><td>One per agent turn: turn_id (the same random id) and the user's own edit gestures in the 120 seconds after the turn ended, closed early when the next turn starts or the page closes. edited (true or false); counts per group (pose, camera, object, shot, and prompt_block, which counts edits to a take's prompt and take fields), each as 0, 1, 2, 3, 4-5, 6-10 or gte11, where one continuous drag is one gesture; first_delay (time to the first edit: lt10s, 10-30s, 30-60s, 1-2m, 2-5m or gte5m), only when edited is true. Never which object or what changed.</td></tr>
|
|
140
|
+
<tr><td>motion:draft_compiled</td><td>One per motion compile (each draft the agent's motion work produces), at most 50 per session; the rest only move app:friction_summary compiles. draft_index (the draft's number for its character in the turn) and qa_problems as 0, 1, 2, 3, 4-5, 6-10 or gte11; qa_clean; qa_frames (frame-level QA issues: 0, 1-10, 11-50, 51-200 or gte201); compile (the whole compile, QA included: lt50, 50-150, 150-500, 500-2000 or gte2000 ms); installed, stuck, repaired, searched and adjusted (true or false); frames (take length: lt30, 30-120, 121-480 or gte481). Never the motion spec, the take, skill names or QA text.</td></tr>
|
|
141
|
+
<tr><td>shortcut:ignored</td><td>A bound Studio key that did nothing, as closed values only: key_class (undo, redo, mode, transform, frame, duplicate or delete) and reason (no_selection, wrong_mode, workflow_mode, busy or empty_history). At most 5 per key_class per session; the rest only move app:friction_summary shortcut_ignored. Keys typed into a text field, a list box or an editable area, and keys of an input-method composition, are never looked at. Never the key character.</td></tr>
|
|
142
|
+
<tr><td>shortcut:unbound</td><td>A common key combination the Studio has no binding for, pressed outside any text field: combo (copy, paste, cut, select_all, group, find, rename or help). At most 3 per combo per session. Never the key character.</td></tr>
|
|
143
|
+
<tr><td>help:shortcuts_opened</td><td>Help > Keyboard shortcuts was opened. No properties. At most 3 per session.</td></tr>
|
|
144
|
+
<tr><td>search:no_results</td><td>A search in the Content browser (surface assets) or the Outliner (outliner) that has shown nothing for 1 second: surface and query_len (the length of the search, 1, 2-3, 4-8 or gte9 characters). At most 3 per surface per session; every one moves app:friction_summary search_empty. Never the search text.</td></tr>
|
|
145
|
+
<tr><td>nav:thrash</td><td>4 or more switches of one panel or mode within 10 seconds with no edit in between: surface (dock_tab, mode or agent_panel), switches (4-5, 6-10 or gte11) and window_s (always 10). At most one per surface every 30 seconds; every one moves app:friction_summary nav_thrash. Never which tab or mode.</td></tr>
|
|
146
|
+
<tr><td>camera:thrash</td><td>6 or more viewport camera moves (orbit, fly or pan drags) within 20 seconds with no edit in between: gestures (6-10 or gte11), kind_mix (orbit, fly, pan or mixed) and window_s (always 20). At most one every 30 seconds; every one moves app:friction_summary camera_thrash. Never a camera position or view.</td></tr>
|
|
147
|
+
<tr><td>agent:connect_opened</td><td>The model-connect list opened: entry (first_run, failure_card, signed_out, menu or other; the signed-out card reads first_run until this browser profile has connected once). At most 5 per session.</td></tr>
|
|
148
|
+
<tr><td>agent:connect_started</td><td>One model-connect attempt began: provider (one of the providers CozyClay configures — openai-codex, anthropic, anthropic-subscription, openai, google, minimax, minimax-cn, openrouter, cliproxy, openai-compatible — or other) and method (oauth, api_key or chatgpt).</td></tr>
|
|
149
|
+
<tr><td>agent:connect_finished</td><td>That attempt ended: provider, method, outcome (ok, failed, cancelled with the Cancel button, abandoned when closed or left unfinished), step it had reached (list, prompt, waiting or done) and duration (lt10s, 10-30s, 30-60s, 1-2m, 2-5m or gte5m). Never the key, token, account, email or error text.</td></tr>
|
|
150
|
+
<tr><td>agent:model_changed</td><td>A model picked in the agent's model list: its provider (as above, or other) and after_failure (whether the last agent turn had failed). At most 10 per session.</td></tr>
|
|
151
|
+
<tr><td>agent:prompt_sent</td><td>One per prompt sent to the agent: turn_id (the same random id as agent:turn_*); provider (as for agent:connect_started, or other); via (typed, retry_button, regenerate, chip or supervisor); prompt_len (1-20, 21-80, 81-240 or gte241 characters); compose_ms (first keystroke to send, typed prompts only) and gap (since the previous turn ended, or first) as lt10s, 10-30s, 30-60s, 1-2m, 2-5m or gte5m; similarity (first, same, near or different, computed in the browser against the previous prompt's words); prev_outcome (succeeded, failed, cancelled or none); turn_index (1, 2, 3, 4-5, 6-10 or gte11); attached and task_mode (true or false). Never the prompt text or its words.</td></tr>
|
|
152
|
+
<tr><td>ui:rage_click</td><td>Three or more fast clicks (within 1 second and 24 pixels) on one primary control: control (a control id from a fixed list, such as tl_play or export_video, or other), clicks (3, 4-5 or gte6) and changed (whether the Studio responded within half a second). At most 2 per control per session. No coordinates, no text, no element or object ids.</td></tr>
|
|
153
|
+
<tr><td>ui:dead_click</td><td>A click on a primary control that did nothing: control (as above) and reason (aria_disabled when the control was disabled, refused when the Studio refused the command, no_effect when nothing changed within half a second). At most 2 per control per session. Clicks into text fields are never observed.</td></tr>
|
|
154
|
+
<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, export_video, export_storyboard or export_render_pass</td></tr>
|
|
136
155
|
<tr><td>$pageview, scene:created, scene:loaded, craft:first_action, activation:completed</td><td>Funnel and drop-off analysis</td></tr>
|
|
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
|
|
156
|
+
<tr><td>craft:first_edit</td><td>First successful Studio authoring change per editor mount; only a fixed edit-kind label and definition version 2 (not camera navigation, playback, loading, restore, or undo/redo)</td></tr>
|
|
138
157
|
<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
158
|
<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: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>
|
|
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>
|
|
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>
|
|
143
|
-
<tr><td>motion:job_started</td><td>Generation execution started: request_id, backend and input_mode</td></tr>
|
|
144
|
-
<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>
|
|
145
|
-
<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>
|
|
146
|
-
<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>
|
|
147
159
|
<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>
|
|
148
160
|
<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>
|
|
149
161
|
<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>
|
|
150
162
|
<tr><td>agent:turn_requested</td><td>Explicit Agent turn requests from surface (studio or workflow), paired by ephemeral turn_id. No prompts, responses or model identifiers.</td></tr>
|
|
151
163
|
<tr><td>agent:tool_executed</td><td>Agent tool observations: turn_id, tool_category (workflow_read, workflow_write, workflow_run, frame_capture, image_generate, scene_write or other), outcome (succeeded, failed or cancelled) and duration_bucket (lt1s, 1-3s, 3-10s, 10-30s or gte30s). Tool names, arguments and results are excluded.</td></tr>
|
|
152
|
-
<tr><td>agent:turn_succeeded, agent:turn_failed, agent:turn_cancelled</td><td>Agent turn outcomes: turn_id and duration_bucket (lt1s, 1-3s, 3-10s, 10-30s or gte30s); failures and actual cancellations also include failure_code (aborted, auth, rate_limited, tool_failed, upstream or unknown). Missing terminal delivery is not success.</td></tr>
|
|
164
|
+
<tr><td>agent:turn_succeeded, agent:turn_failed, agent:turn_cancelled</td><td>Agent turn outcomes: turn_id and duration_bucket (lt1s, 1-3s, 3-10s, 10-30s or gte30s); failures and actual cancellations also include failure_code (aborted, auth, rate_limited, tool_failed, upstream, key_refused, stale_scene, capability_missing, busy, invalid_request or unknown). auth means CozyClay's local agent has no sign-in or refused the session; key_refused means the model provider rejected the key or credentials; stale_scene means the turn was refused because the scene changed underneath it; capability_missing means a required capability was unavailable, for example the live hub port was already in use; busy means another turn or target was busy; invalid_request means the request itself was rejected. Missing terminal delivery is not success.</td></tr>
|
|
153
165
|
<tr><td>agent:result_applied</td><td>An Agent turn produced an acknowledged editor change: turn_id only, at most once per turn. Successful reads and focus/navigation do not prove applied output.</td></tr>
|
|
154
166
|
<tr><td>mcp:tool_requested</td><td>Connected-editor MCP execution requests: ephemeral request_id and tool_category (read, camera, scene_write, prompt_authoring, frame_capture, motion_generate, motion_apply, project_io or other).</td></tr>
|
|
155
167
|
<tr><td>mcp:tool_executed</td><td>Connected-editor MCP outcomes: request_id, tool_category (read, camera, scene_write, prompt_authoring, frame_capture, motion_generate, motion_apply, project_io or other), outcome (succeeded, failed, uncertain or cancelled) and duration_bucket (lt1s, 1-3s, 3-10s, 10-30s or gte30s). Control-plane success does not prove a mutation applied.</td></tr>
|
|
156
168
|
<tr><td>mcp:result_applied</td><td>A connected editor acknowledged an MCP mutation, paired by request_id. Detached or disconnected MCP sessions remain unobserved.</td></tr>
|
|
157
169
|
<tr><td>export:blocking_frame_succeeded, export:video_succeeded</td><td>Export reliability</td></tr>
|
|
158
|
-
<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
|
|
170
|
+
<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, keyframe_pack, contact_sheet, panel_pack, animatic, animation_project, workflow_send, storyboard, render_pass or otio), format (mp4, png, zip, cclayproject or otio), initiating surface (studio, workflow or embed), is_retry (whether the attempt retries an earlier one), retry_of (the retried attempt's attempt_id, only when is_retry is true) and objects (the scene's object count, bucketed 0, 1-3, 4-10 or gte11). Terminal events include a bucketed duration_bucket; failures and real cancellations include a normalized failure_code (unsupported_codec, encode_failed, render_failed, aborted or unknown), the stage where the export stopped (preparing, encoding, finalizing or handoff) and a progress bucket (0, 1-25, 26-50, 51-75 or 76-99 percent), 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>
|
|
171
|
+
<tr><td>export:saved</td><td>How each exported file was saved, one event per file: method (workspace, written into the export folder you chose, or download, a browser download) and reason (none; unsupported, the browser has no folder access; no_workspace, no export folder is chosen; permission, folder access was denied; or write_failed, the folder write failed and the file fell back to a download). Never the file name or path.</td></tr>
|
|
159
172
|
<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>
|
|
173
|
+
<tr><td>sculpt_run</td><td>One event per finished Sculpt mode run: outcome (done, cancelled or failed), rounds (0 to 10), final_iou (how closely the final sculpt matched the reference image, 0 to 1 rounded to two decimals; omitted when the run was never scored), duration_ms (elapsed run time in milliseconds) and had_target (whether the run reworked an existing sculpt instead of creating one). Numbers only: never the reference image, recipe, part names or sculpt id.</td></tr>
|
|
160
174
|
<tr><td>playground:opened, playground:first_action</td><td>Whether the home-page playground gets used</td></tr>
|
|
161
175
|
<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>
|
|
176
|
+
<tr><td>app:render_crash</td><td>A render error that brought up the studio's crash screen, at most two per session: error_type (the same closed labels as app:error). Never the error message, stack text, component names, file names or scene content.</td></tr>
|
|
177
|
+
<tr><td>app:gl_lost</td><td>The 3D view's graphics failed, at most once per kind per session: kind (unavailable when WebGL is off at startup, context_lost when the GPU context drops later). Never the GPU renderer string.</td></tr>
|
|
178
|
+
<tr><td>studio:ready</td><td>Once per session: how long the studio took to show its first frame, from page navigation to the first frame after the first render: boot (lt2s, 2-5s, 5-15s or gte15s). Never what was loaded.</td></tr>
|
|
179
|
+
<tr><td>playback:summary</td><td>One per playback run (play until stop, or until the frame rate or speed changes), at most 10 per session: duration (lt10s, 10-30s, 30-60s, 1-2m, 2-5m or gte5m); late_ticks, an estimate of dropped frames, not a measured one: the share of playback timer ticks that had to catch up more than one frame (0, lt5, 5-20, 20-50 or gte50 %); max_catchup (the most frames one tick caught up: 1, 2, 3-5 or gte6); fps (12, 24, 30, 60 or other); speed (0.5, 1, 2 or other); measured_fps (the browser's frame rate during playback, the device:profile frame-rate buckets). Every run also feeds app:friction_summary.late_tick_ratio. Never the scene, the take or the frame range.</td></tr>
|
|
180
|
+
<tr><td>guide:opened</td><td>The first-60-seconds guide opened, at most once per session: mode (animation or storyboard). Never step text or what you did.</td></tr>
|
|
181
|
+
<tr><td>guide:step</td><td>A guide step marked done, each step at most once per session: mode (animation or storyboard), step (1 to 4) and step_ms (time on that step: lt10s, 10-30s, 30-60s, 1-2m, 2-5m or gte5m).</td></tr>
|
|
182
|
+
<tr><td>guide:dismissed</td><td>The guide closed before its last step, at most once per session: mode (animation or storyboard) and reached (1 to 4, the step it was showing).</td></tr>
|
|
183
|
+
<tr><td>guide:completed</td><td>The guide's last step marked done, at most once per session: mode (animation or storyboard).</td></tr>
|
|
184
|
+
<tr><td>agent:panel_toggled</td><td>The agent panel opened or closed, at most 10 per session: open (true or false) and via (key for Cmd/Ctrl+B, button for the toolbar control). Never what the panel showed.</td></tr>
|
|
185
|
+
<tr><td>object:deleted_soon</td><td>You deleted an object you added in this session, at most 10 per session: age (how long after adding it: lt2s, 2-10s, 10-60s or gte60s). Object ids are reused names, so this is an estimate. Never the object's id, name or kind.</td></tr>
|
|
186
|
+
<tr><td>object:delete_undone</td><td>You undid an object deletion within its 7-second undo window, at most 10 per session: age (time from the deletion to the undo: lt2s or 2-10s). Never the object's id, name or kind.</td></tr>
|
|
187
|
+
<tr><td>update:notice_shown</td><td>The update notice appeared in the top bar of an npm studio, once per session: kind (global or npx) and behind (patch, minor or major: how far the running version is behind the newest release). Never a path or a command</td></tr>
|
|
188
|
+
<tr><td>update:clicked</td><td>A button on the update notice, at most 10 per session: action (update_now, copy_command, later, dismiss or release_notes) and kind (global or npx)</td></tr>
|
|
189
|
+
<tr><td>update:finished</td><td>A one-click update ended, at most 3 per session: outcome (ok or failed), error_class (none, permission, network, node_version, npm_missing or other) and duration (lt10s, 10-30s, 30-60s, 1-2m, 2-5m or gte5m). Never npm's output, a path or the command line</td></tr>
|
|
162
190
|
<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>
|
|
163
191
|
<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>
|
|
164
192
|
<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>
|
|
165
193
|
</tbody>
|
|
166
194
|
</table>
|
|
167
195
|
</div>
|
|
168
|
-
<p class="note">
|
|
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) 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>
|
|
196
|
+
<p class="note">Only the events in this table are sent; any other event name is dropped in the browser before it reaches PostHog. 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. The update notice asks the launcher on 127.0.0.1 whether a newer release exists; the launcher answers from that same cached check, so the notice adds no request to anyone else. Update now runs npm install -g cozyclay@<version> on your machine, and only when you press it. PostHog's free plan retains events for one year.</p>
|
|
170
197
|
<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
198
|
</section>
|
|
172
199
|
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
<div class="wrap">
|
|
58
58
|
<a class="brand" href="/">CozyClay</a>
|
|
59
59
|
<nav>
|
|
60
|
-
<a href="
|
|
60
|
+
<a href="/app/">Try it</a>
|
|
61
61
|
<a href="/greybox-to-video/">Greybox to video</a>
|
|
62
62
|
<a href="/previs-software/">Previs software</a>
|
|
63
63
|
<a href="/ai-camera-control/">Camera control</a>
|
|
@@ -146,11 +146,11 @@
|
|
|
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="
|
|
149
|
+
The <a href="/app/">browser studio</a> runs it in a tab, and
|
|
150
150
|
<code>npx cozyclay</code> runs it locally.
|
|
151
151
|
</p>
|
|
152
152
|
<div class="cta">
|
|
153
|
-
<a class="btn primary" href="
|
|
153
|
+
<a class="btn primary" href="/app/">Try it in your browser</a>
|
|
154
154
|
<a class="btn ghost" href="https://github.com/NomaDamas/CozyClay">View on GitHub</a>
|
|
155
155
|
</div>
|
|
156
156
|
</section>
|
package/dist/sitemap.xml
CHANGED
|
@@ -2,26 +2,26 @@
|
|
|
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-24</lastmod>
|
|
6
6
|
</url>
|
|
7
7
|
<url>
|
|
8
8
|
<loc>https://cozyclay.org/greybox-to-video/</loc>
|
|
9
|
-
<lastmod>2026-10-
|
|
9
|
+
<lastmod>2026-10-24</lastmod>
|
|
10
10
|
</url>
|
|
11
11
|
<url>
|
|
12
12
|
<loc>https://cozyclay.org/previs-software/</loc>
|
|
13
|
-
<lastmod>2026-10-
|
|
13
|
+
<lastmod>2026-10-24</lastmod>
|
|
14
14
|
</url>
|
|
15
15
|
<url>
|
|
16
16
|
<loc>https://cozyclay.org/seedance-camera-control/</loc>
|
|
17
|
-
<lastmod>2026-10-
|
|
17
|
+
<lastmod>2026-10-24</lastmod>
|
|
18
18
|
</url>
|
|
19
19
|
<url>
|
|
20
20
|
<loc>https://cozyclay.org/ai-camera-control/</loc>
|
|
21
|
-
<lastmod>2026-
|
|
21
|
+
<lastmod>2026-10-24</lastmod>
|
|
22
22
|
</url>
|
|
23
23
|
<url>
|
|
24
24
|
<loc>https://cozyclay.org/privacy/</loc>
|
|
25
|
-
<lastmod>2026-10-
|
|
25
|
+
<lastmod>2026-10-25</lastmod>
|
|
26
26
|
</url>
|
|
27
27
|
</urlset>
|
package/dist/workflow/index.html
CHANGED
|
@@ -8,12 +8,11 @@
|
|
|
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-DJwOUzqJ.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/task-board-DFfNa0xg.js">
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/task-board-CkLZGPkv.js">
|
|
15
14
|
<link rel="modulepreload" crossorigin href="/assets/fflate.module-KbGj5-H6.js">
|
|
16
|
-
<link rel="modulepreload" crossorigin href="/assets/scene-asset-sync-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/scene-asset-sync-t45pWCyq.js">
|
|
17
16
|
<link rel="stylesheet" crossorigin href="/assets/scene-asset-sync-BEjjhNEo.css">
|
|
18
17
|
<link rel="stylesheet" crossorigin href="/assets/workflow-DRdwoDBT.css">
|
|
19
18
|
</head>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cozyclay",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.5",
|
|
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",
|