cozyclay 3.0.3 → 3.1.1
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 +93 -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 +29 -62
- 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/plan-tool.mjs +114 -0
- package/bin/agent/script-tool.mjs +2 -0
- package/bin/agent/sculpt-sketch.mjs +190 -0
- package/bin/agent/session-store.mjs +4 -3
- package/bin/agent/sketch-code.mjs +151 -0
- package/bin/agent/sketch-sandbox.mjs +102 -0
- 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/agent/turn-frames.mjs +4 -0
- package/bin/cozyclay.mjs +5 -7
- package/dist/app/index.html +7 -6
- package/dist/assets/TaskBoard-ngdqiu7u.js +1 -0
- package/dist/assets/app-BlwOpest.css +1 -0
- package/dist/assets/app-DmR7jBkz.js +5144 -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-BB3_1-EB.js +1 -0
- package/dist/assets/scene-asset-sync-CBx7XRti.css +1 -0
- package/dist/assets/scene-asset-sync-Cgdtr1Yw.js +13 -0
- package/dist/assets/task-board-ErQvfoaz.js +14 -0
- package/dist/assets/workflow-zQM-EKW1.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/mcp/tool-handlers.mjs +2 -2
- package/package.json +5 -3
- package/src/App.jsx +51 -282
- 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-tasks.js +11 -5
- package/src/command-bus.js +1 -1
- package/src/commands/elements.js +4 -3
- package/src/commands/motion3-compile.js +51 -27
- package/src/commands/motion3.js +3 -3
- package/src/commands/objects.js +1 -1
- package/src/commands/project.js +1 -1
- 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/material-look.js +189 -0
- package/src/material-presets.js +78 -0
- package/src/material-textures.js +157 -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/compile.js +7 -1
- package/src/motion3/compiler/finger-close.js +137 -0
- package/src/motion3/compiler/limbs.js +18 -3
- package/src/motion3/compiler/pose.js +6 -0
- 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/fix/index.js +5 -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 +3 -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 +10 -1
- package/src/motion3/schema/fields.js +3 -3
- package/src/motion3/schema/topics.js +9 -8
- package/src/motion3/schema/types.js +4 -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/catch.js +71 -0
- package/src/motion3/skills/index.js +10 -3
- package/src/motion3/skills/info.js +13 -0
- package/src/motion3/skills/throw.js +72 -0
- package/src/object-catalog.jsx +0 -4
- package/src/object-gizmo.jsx +2 -1
- package/src/object-look.js +9 -5
- 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/primitive-look.js +38 -0
- 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 +24 -35
- package/src/render-passes.js +7 -1
- package/src/retired-kinds.js +37 -0
- package/src/scene-objects.js +5 -9
- package/src/scenes.js +4 -5
- package/src/sculpt-colours.js +65 -0
- package/src/sculpt-compare.js +13 -50
- package/src/sculpt-csg.js +112 -0
- package/src/sculpt-curve.js +123 -0
- package/src/sculpt-cutters.js +43 -0
- package/src/sculpt-detail.js +207 -0
- package/src/sculpt-geometry-loft-convex.js +100 -0
- package/src/sculpt-geometry-shapes.js +250 -0
- package/src/sculpt-geometry.js +33 -15
- package/src/sculpt-loft-rings.js +225 -0
- package/src/sculpt-noise.js +65 -0
- package/src/sculpt-part-fields.js +27 -0
- package/src/sculpt-recipe-read.js +65 -0
- package/src/sculpt-recipe.js +33 -75
- package/src/sculpt-run.js +1 -1
- package/src/sculpt-scatter-items.js +183 -0
- package/src/sculpt-scatter-shape.js +57 -0
- package/src/sculpt-scatter.js +124 -0
- package/src/sculpt-shapes-curved.js +211 -0
- package/src/sculpt-shapes-loft-convex.js +218 -0
- package/src/sculpt-shapes.js +138 -0
- package/src/sculpt-sketch-state.js +76 -0
- package/src/sculpt-sketch.jsx +124 -0
- package/src/sculpt-surface-fields.js +65 -0
- 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 +1 -1
- package/src/studio-elements.js +6 -2
- 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 +79 -46
- package/src/workflow/AgentPlanCard.jsx +41 -0
- 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 +25 -36
- package/src/workflow/agent-panel.css +14 -1
- package/src/workflow/agent-plan.css +93 -0
- package/src/workflow/agent-plan.js +59 -0
- 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 +10 -17
- package/tools/sitemap.mjs +1 -1
- package/dist/assets/analytics-BibyE5ar.js +0 -6
- package/dist/assets/app-DhRJ-PBz.js +0 -5088
- package/dist/assets/app-f-fkV5uP.css +0 -1
- package/dist/assets/compile-worker-DqiA4AaN.js +0 -5
- package/dist/assets/first-shot-handoff-Qx7SKl38.js +0 -1
- package/dist/assets/landing-DYg87MDY.js +0 -1
- package/dist/assets/scene-asset-sync-DBYQBR0T.js +0 -20
- package/dist/assets/scene-asset-sync-_S8NQl5B.css +0 -1
- package/dist/assets/workflow-BSA22Ofr.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
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,99 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 3.1.1 - 2026-10-23
|
|
6
|
+
|
|
7
|
+
Sculpt gets new shapes, cutters, detail and materials, and the Studio agent shows its plan and a live sketch.
|
|
8
|
+
|
|
9
|
+
Sculpt
|
|
10
|
+
|
|
11
|
+
- New sculpt shapes: loft, convex hull, lathe, tube and extrude, plus an
|
|
12
|
+
instanced scatter (blade, tuft, flower, leaf, pebble, twig) that fills a
|
|
13
|
+
part with up to 12000 items. Bad points are refused with their path.
|
|
14
|
+
- Boolean cutters: a part with `op: subtract | intersect` cuts its parent for
|
|
15
|
+
windows, doors, arches, hollow bowls and cups, notches, half-domes and
|
|
16
|
+
slices.
|
|
17
|
+
- Surface `detail` (seeded displacement) and colour `gradient` on any shape.
|
|
18
|
+
- Material presets for sculpt parts and primitives: clay, wood, straw, stone,
|
|
19
|
+
brick, concrete, metal, glass, ceramic, plastic, rubber, fabric, paper and
|
|
20
|
+
foliage, each with a matte, satin or gloss finish.
|
|
21
|
+
|
|
22
|
+
Agent
|
|
23
|
+
|
|
24
|
+
- A step checklist for long Studio turns, pinned under the prompt while the
|
|
25
|
+
turn runs and restored with the session.
|
|
26
|
+
- A live ghost sketch of the sculpt in the viewport while the agent is still
|
|
27
|
+
writing the script. It is never picked, saved or exported.
|
|
28
|
+
- The Studio prompt, MCP and Sculpt mode know the new shapes, materials and
|
|
29
|
+
fields.
|
|
30
|
+
|
|
31
|
+
## 3.1.0 - 2026-10-23
|
|
32
|
+
|
|
33
|
+
Hands that hold, throw and catch with weight, Studio tasks in the chat, faster playback, and a leaner first run.
|
|
34
|
+
|
|
35
|
+
Motion
|
|
36
|
+
|
|
37
|
+
- Hands hold what they carry. Fingers close until they touch the held
|
|
38
|
+
surface, a ball rests in the palm and fingers, and spheres and cylinders
|
|
39
|
+
are round to the compiler. QA flags a finger through the object
|
|
40
|
+
(`FINGER_PEN`), a finger short of it (`FINGER_GAP`) and a hand that does
|
|
41
|
+
not hold it (`SUPPORT`).
|
|
42
|
+
- A held thing has weight: `objects.<id>.mass` sags the arm, and a load past
|
|
43
|
+
one hand asks for two (`LOAD`, `observations.load`).
|
|
44
|
+
- New skills `throwObject` and `catchObject`. A thrown thing leaves with the
|
|
45
|
+
hand's speed and lands on the first surface its path comes down onto; a
|
|
46
|
+
hand meets a flying ball where it can reach and gives with it.
|
|
47
|
+
- Grasp issues say why and carry the fix that repair applies.
|
|
48
|
+
|
|
49
|
+
Studio and agent
|
|
50
|
+
|
|
51
|
+
- Tasks: a **Tasks** switch in the agent composer. With it on, the main
|
|
52
|
+
agent answers at once while Studio tasks edit the scene in their own
|
|
53
|
+
scopes, on a pool of two compile workers. Running tasks show as one line
|
|
54
|
+
in the chat. Off by default.
|
|
55
|
+
- A video can be attached to the agent; it travels as a contact sheet.
|
|
56
|
+
- A fresh install opens the project chooser with one "+ New project" card.
|
|
57
|
+
- The Shot Camera card draws the live shot in every mode, and a focal-length
|
|
58
|
+
scrub replaces the read-only lens label.
|
|
59
|
+
- The project menu, scene dropdown and Outliner menu no longer open behind
|
|
60
|
+
the panels and close each other.
|
|
61
|
+
- + Add shot on a full take grows the take; dock tabs are clickable; Pose
|
|
62
|
+
enters from the editor view and releases IK focus on exit.
|
|
63
|
+
|
|
64
|
+
Performance
|
|
65
|
+
|
|
66
|
+
- Timeline playback no longer re-renders the whole app every frame.
|
|
67
|
+
- The motion body fits (~0.5 MB) load after first paint instead of in the
|
|
68
|
+
first bundle.
|
|
69
|
+
|
|
70
|
+
Fixes
|
|
71
|
+
|
|
72
|
+
- `npm test` and `npm run lint` run on a Windows checkout, and the MCP server
|
|
73
|
+
removes its live endpoint file when it exits on Windows.
|
|
74
|
+
- `npm run dev` exits within about 1.5 s on Ctrl+C instead of hanging.
|
|
75
|
+
- mcp: `proxy-addr` 2.0.8 (CVE-2026-90711).
|
|
76
|
+
|
|
77
|
+
Removed
|
|
78
|
+
|
|
79
|
+
- The built-in set pieces: Chair, Car and Plane (aircraft), with their Set
|
|
80
|
+
pieces group, Content › Sets folder and renderers. An old project that has
|
|
81
|
+
one opens it as a plain cube with the same transform and size.
|
|
82
|
+
- The City Block starter scene and its thumbnails. The chooser's "+ New
|
|
83
|
+
project" card is now the one blank entry; the Blank Stage card, the Samples
|
|
84
|
+
page and the category tabs are gone. `--scene <id>` and `?scene=` stay; an
|
|
85
|
+
unknown id is ignored with a console warning.
|
|
86
|
+
- The camera tutorial: the Studio overlay, Help › Tutorial, the Settings and
|
|
87
|
+
Learn entries, `?tutorial=camera`, the first-shot handoff, the `tutorial:*`
|
|
88
|
+
analytics events, and the seven-step tutorial and project download on the
|
|
89
|
+
home-page playground (which now opens a blank stage).
|
|
90
|
+
|
|
91
|
+
Docs
|
|
92
|
+
|
|
93
|
+
- The README is short again: install, what it does, the three AI surfaces, docs.
|
|
94
|
+
- `INSTALL_FOR_AGENTS.md` is the install, run and connect guide for an AI agent given the
|
|
95
|
+
repository link. It ships in the npm package.
|
|
96
|
+
- The README links the CozyClay Discord server and GitHub Sponsors.
|
|
97
|
+
|
|
5
98
|
## 3.0.3 - 2026-10-20
|
|
6
99
|
|
|
7
100
|
Grasp round 2, from a user's own cup, ball and steering-wheel sessions on 3.0.2.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# CozyClay: install and run guide for AI agents
|
|
2
|
+
|
|
3
|
+
You are an AI agent. A user gave you this repository and asked you to install CozyClay, run it, or
|
|
4
|
+
connect to it. Follow this file. The [README](README.md) is the short version for people.
|
|
5
|
+
|
|
6
|
+
CozyClay is a previs studio that runs in a browser tab. The user blocks a scene, poses
|
|
7
|
+
characters and cuts cameras. The studio then exports the shot for an AI video model. You install it
|
|
8
|
+
with npm. You do not need a GPU, Python, a model download or a build step.
|
|
9
|
+
|
|
10
|
+
## 1. Check the requirements
|
|
11
|
+
|
|
12
|
+
| Need | Check | If it fails |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| Node.js 22.19 or newer | `node --version` | Install Node 22 LTS or newer. Do not continue on an older Node. |
|
|
15
|
+
| npm (or bun) | `npm --version` | It comes with Node. |
|
|
16
|
+
| A Chromium-based browser (Chrome, Edge, Brave, Arc) | Ask the user | Safari and Firefox are not supported. |
|
|
17
|
+
|
|
18
|
+
## 2. Install and start (normal case)
|
|
19
|
+
|
|
20
|
+
Do not clone the repository unless the user wants to change the source code. The npm package
|
|
21
|
+
contains the built studio.
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
npx -y cozyclay --no-star
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- This is a long-running server. Start it in the background and keep it running.
|
|
28
|
+
- It is ready when it prints `CozyClay is running at http://127.0.0.1:5180/app/`.
|
|
29
|
+
- It opens the default browser. Add `--no-open` when there is no screen, and give the user the URL.
|
|
30
|
+
- `--port 5200` serves on another port. Use it when the output is `port 5180 is taken`.
|
|
31
|
+
- `--no-star` stops the "star the repo" question when the process exits. An agent cannot answer it.
|
|
32
|
+
|
|
33
|
+
For a permanent install, run `npm install -g cozyclay`. Then `cclay` and `cozyclay` are the same
|
|
34
|
+
command. `cclay update` installs the latest release.
|
|
35
|
+
|
|
36
|
+
Tell the user:
|
|
37
|
+
|
|
38
|
+
- The URL to open, in a Chromium browser.
|
|
39
|
+
- **Assets › Characters** adds a character, and the timeline at the bottom holds the shots.
|
|
40
|
+
- `Cmd/Ctrl+B` opens the Agent panel. In that panel the user signs in with a ChatGPT account, or
|
|
41
|
+
chooses a model from another provider (section 5).
|
|
42
|
+
|
|
43
|
+
## 3. Control the studio yourself
|
|
44
|
+
|
|
45
|
+
Pick one surface. Do not use two that start a live hub on the same port (see "One hub per port").
|
|
46
|
+
|
|
47
|
+
### a. Terminal agent (coding agent with a shell): `cclay live`
|
|
48
|
+
|
|
49
|
+
Use this when you have a shell and the studio from step 2 is running. You need a browser tab open
|
|
50
|
+
on the studio URL, because the tab is the editor.
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
npx -y cozyclay live status --wait # wait for an editor tab; required first step
|
|
54
|
+
npx -y cozyclay live inspect --scope scene # read before you edit
|
|
55
|
+
npx -y cozyclay live capture --out shot.png # check the result as an image
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The loop: wait for the editor. Read the scene. Apply one change (`arrange-objects`,
|
|
59
|
+
`arrange-characters`, `frame-shot`, `patch`, or `run <command>`). Verify it (`verify`, `capture`).
|
|
60
|
+
Each edit returns a receipt, and `undo --receipt <id>` takes it back. The output is one JSON
|
|
61
|
+
object per command. Exit codes: 0 ok, 1 editor or receipt error, 2 usage, 3 no hub, 4 workspace,
|
|
62
|
+
5 timeout or uncertain apply, 6 stale scene or busy target.
|
|
63
|
+
|
|
64
|
+
- Look at the result with `capture` PNGs. Do not screenshot the browser window.
|
|
65
|
+
- `UNCERTAIN_APPLY`: inspect the scene before you try again. Do not repeat the edit blindly.
|
|
66
|
+
- `npx -y cozyclay live --help` lists every verb.
|
|
67
|
+
- Full guide with worked sessions: [`docs/agent-cli.md`](docs/agent-cli.md).
|
|
68
|
+
|
|
69
|
+
### b. MCP client (Claude Desktop, Claude Code, Cursor, any MCP client)
|
|
70
|
+
|
|
71
|
+
Add this server to the client's MCP config, then restart the client:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"mcpServers": {
|
|
76
|
+
"cozyclay": { "command": "npx", "args": ["-y", "cozyclay", "mcp"] }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
For Claude Code: `claude mcp add cozyclay -- npx -y cozyclay mcp`.
|
|
82
|
+
|
|
83
|
+
- The first start installs the MCP SDK (about 95 packages). This takes some time once.
|
|
84
|
+
- Without an editor tab, the scene, camera, prompt and project-file tools work in memory.
|
|
85
|
+
- With an editor tab connected, the tools move the visible viewport. `live_status` tells you if
|
|
86
|
+
a tab is connected. `capture_frame`, `apply_batch` and `import_mesh` need a connected tab.
|
|
87
|
+
- Tool list and protocol: [`mcp/README.md`](mcp/README.md).
|
|
88
|
+
|
|
89
|
+
### One hub per port
|
|
90
|
+
|
|
91
|
+
The studio (`cozyclay`) and the MCP server (`cozyclay mcp`) each try to host the live hub on
|
|
92
|
+
port 5184. The second one to start loses the port and does not report an error:
|
|
93
|
+
|
|
94
|
+
- MCP server second: it works in memory only and does not move the editor.
|
|
95
|
+
- Studio second: its Agent panel has no hub.
|
|
96
|
+
|
|
97
|
+
To run both, give them different ports, with `COZYCLAY_LIVE_PORT` set in each one's environment.
|
|
98
|
+
To drive a running studio from a shell, use `cclay live` (it connects to the hub and does not host
|
|
99
|
+
one).
|
|
100
|
+
|
|
101
|
+
## 4. Make motion
|
|
102
|
+
|
|
103
|
+
Motion is compiled in the browser, not generated. You write a motion spec (key poses, hand
|
|
104
|
+
anchors, props, walks), compile it with `motion.compile`, and read the QA report (collisions, foot
|
|
105
|
+
slide, reach, contacts). Spec format and loop: [`docs/motion3-agent-guide.md`](docs/motion3-agent-guide.md).
|
|
106
|
+
Motion works on rigged characters in Animation projects. Capsule figures and Storyboard projects
|
|
107
|
+
refuse it with `TARGET_NOT_READY` or `NOT_IN_MODE`.
|
|
108
|
+
|
|
109
|
+
## 5. Agent panel models (optional)
|
|
110
|
+
|
|
111
|
+
The Agent panel inside the studio can use ChatGPT (sign in in the panel), Anthropic, OpenAI,
|
|
112
|
+
Google Gemini, OpenRouter or CLIProxyAPI. Set the key in the environment of the process that starts
|
|
113
|
+
the studio (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `OPENROUTER_API_KEY`,
|
|
114
|
+
`CLIPROXY_API_KEY`), or let the user paste it in the panel. Keys go to
|
|
115
|
+
`~/.config/cozyclay/providers.json` (mode 0600). Never print a key or put it in a command line
|
|
116
|
+
that is logged. Details: [`docs/agent-cli.md`](docs/agent-cli.md#models-and-providers).
|
|
117
|
+
|
|
118
|
+
## 6. From source (only to change the code)
|
|
119
|
+
|
|
120
|
+
```sh
|
|
121
|
+
git clone https://github.com/NomaDamas/CozyClay.git
|
|
122
|
+
cd CozyClay
|
|
123
|
+
npm install
|
|
124
|
+
npm run dev # studio, agent sidecar and live hub on http://127.0.0.1:5180/app/
|
|
125
|
+
npm test # build, then every verification file
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Contribution rules (branches, PR checks, the lint ratchet) are in [`AGENTS.md`](AGENTS.md).
|
|
129
|
+
|
|
130
|
+
## Troubleshooting
|
|
131
|
+
|
|
132
|
+
| Symptom | Fix |
|
|
133
|
+
| --- | --- |
|
|
134
|
+
| `port 5180 is taken` | Another studio runs. Open its URL, or start with `--port 5200`. |
|
|
135
|
+
| `live status` shows `"editors":[]` | No tab is open on the studio URL, or the tab uses a different live port. Open or reload the tab. |
|
|
136
|
+
| `NO_EDITOR` on an edit | Same as above. Run `live status --wait` first. |
|
|
137
|
+
| Blank page or WebGL error | The browser is not Chromium, or hardware acceleration is off. |
|
|
138
|
+
| The studio tab stops responding | Reload the tab (`Cmd+R` on macOS, `Ctrl+R` elsewhere). Your project autosaves in the browser. |
|
|
139
|
+
| MCP tools do not move the editor | See "One hub per port". |
|
|
140
|
+
|
|
141
|
+
## Privacy
|
|
142
|
+
|
|
143
|
+
The official npm package sends anonymous usage counts and prints the disclosure on first
|
|
144
|
+
launch. It never sends project content. Turn it off with `cclay telemetry off`, or with
|
|
145
|
+
`COZYCLAY_TELEMETRY=0` or `DO_NOT_TRACK=1`. Source checkouts send nothing. Details:
|
|
146
|
+
[`docs/privacy.md`](docs/privacy.md).
|
package/README.md
CHANGED
|
@@ -3,11 +3,8 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
<p align="center">
|
|
10
|
-
Created and maintained by <a href="https://github.com/HaD0Yun">Doyun</a> at <a href="https://github.com/NomaDamas">NomaDamas</a>.
|
|
6
|
+
<b>Make the scene first. Then make it a video.</b><br>
|
|
7
|
+
<em>Open source previs in a browser tab: block the set, move the cast, cut the camera, hand the shot to an AI video model.</em>
|
|
11
8
|
</p>
|
|
12
9
|
|
|
13
10
|
<p align="center">
|
|
@@ -15,229 +12,114 @@
|
|
|
15
12
|
<a href="https://www.npmjs.com/package/cozyclay"><img alt="npm" src="https://img.shields.io/npm/v/cozyclay"></a>
|
|
16
13
|
<img alt="Node 22.19+" src="https://img.shields.io/badge/node-22.19%2B-brightgreen">
|
|
17
14
|
<a href="https://github.com/NomaDamas/CozyClay/stargazers"><img alt="Stars" src="https://img.shields.io/github/stars/NomaDamas/CozyClay?style=flat"></a>
|
|
15
|
+
<a href="https://discord.gg/Hp9V5wwgjF"><img alt="Discord" src="https://img.shields.io/badge/discord-join-5865F2?logo=discord&logoColor=white"></a>
|
|
18
16
|
</p>
|
|
19
17
|
|
|
20
18
|
<p align="center">
|
|
21
19
|
<a href="https://cozyclay.org/#try">Try it in the browser</a> ·
|
|
22
20
|
<a href="#quick-start">Quick start</a> ·
|
|
23
|
-
<a href="
|
|
24
|
-
<a href="#
|
|
25
|
-
<a href="
|
|
26
|
-
<a href="
|
|
27
|
-
<a href="#documentation">Docs</a> ·
|
|
28
|
-
<a href="https://github.com/NomaDamas/CozyClay/issues">Issues</a>
|
|
21
|
+
<a href="INSTALL_FOR_AGENTS.md">Guide for AI agents</a> ·
|
|
22
|
+
<a href="#docs">Docs</a> ·
|
|
23
|
+
<a href="CHANGELOG.md">Changelog</a> ·
|
|
24
|
+
<a href="https://discord.gg/Hp9V5wwgjF">Discord</a>
|
|
29
25
|
</p>
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
<table>
|
|
28
|
+
<tr>
|
|
29
|
+
<td width="50%"><video src="https://github.com/user-attachments/assets/00f28c2f-e8e2-43eb-b253-b6c2436e1818" controls muted width="100%"></video></td>
|
|
30
|
+
<td width="50%"><video src="https://github.com/user-attachments/assets/4c9b1e29-4803-435c-8305-f2c899fb1c2c" controls muted width="100%"></video></td>
|
|
31
|
+
</tr>
|
|
32
|
+
<tr>
|
|
33
|
+
<td align="center"><sub>Top: the greybox blocked in CozyClay. Bottom: the AI video made from it.</sub></td>
|
|
34
|
+
<td align="center"><sub>Same idea, a parkour jump: the blocking holds the timing and the camera.</sub></td>
|
|
35
|
+
</tr>
|
|
36
|
+
</table>
|
|
37
|
+
|
|
38
|
+
## Why
|
|
39
|
+
|
|
40
|
+
AI video costs money per take, and one miss means paying again. A text prompt cannot hold a
|
|
41
|
+
whole scene: where everyone stands, how they move, where the camera is, when it cuts.
|
|
42
|
+
|
|
43
|
+
CozyClay lets you make those decisions first, in 3D, where they are cheap to change. Then the video
|
|
44
|
+
model gets the shot as a first frame, a greybox reference clip and a prompt that describes the
|
|
45
|
+
real framing. It follows the blocking instead of guessing.
|
|
46
|
+
|
|
47
|
+
```mermaid
|
|
48
|
+
flowchart LR
|
|
49
|
+
S["Stage<br/>set + cast"] --> M["Motion<br/>compiled + QA"] --> C["Camera<br/>shots + cuts"] --> E["Export<br/>frame · clip · prompt"] --> V["AI video model"]
|
|
37
50
|
```
|
|
38
51
|
|
|
39
|
-
|
|
52
|
+
## Quick start
|
|
40
53
|
|
|
41
54
|
```bash
|
|
42
|
-
npx cozyclay
|
|
55
|
+
npx cozyclay
|
|
43
56
|
```
|
|
44
57
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
## Demo
|
|
58
|
+
That is the whole install. You need Node.js 22.19 or newer and a Chromium browser. You do not need
|
|
59
|
+
a GPU, Python or a model download. The studio opens at `http://127.0.0.1:5180/app/`.
|
|
48
60
|
|
|
49
|
-
|
|
61
|
+
> **Asking an AI agent to set it up?** Give it this repository link. Its instructions are in
|
|
62
|
+
> [`INSTALL_FOR_AGENTS.md`](INSTALL_FOR_AGENTS.md).
|
|
50
63
|
|
|
51
64
|
## What you can do
|
|
52
65
|
|
|
53
|
-
|
|
|
66
|
+
| | |
|
|
54
67
|
| --- | --- |
|
|
55
|
-
| **Stage
|
|
56
|
-
| **
|
|
57
|
-
| **
|
|
58
|
-
| **Export
|
|
59
|
-
| **
|
|
60
|
-
| **
|
|
61
|
-
| **Direct it with an AI** | Open the **Agent panel** (`Cmd/Ctrl+B`), sign in with your ChatGPT account, and ask for a shot in plain language; the conversation survives reloads and you can paste a reference screenshot into it. Or connect Claude — or any MCP client — or drive the Studio from a terminal with `cclay live`. All three place the cast, frame "a low wide profile", compile motion, and the viewport moves in front of you. See [AI control](#ai-control). |
|
|
68
|
+
| **Stage** | Build the set from primitives. Add rigged characters, or capsule stand-ins when nobody needs to move a limb. Fly the view like a 3D editor. |
|
|
69
|
+
| **Move** | Describe the action. The agent writes a motion spec, and a deterministic compiler in the browser bakes every frame. QA checks collisions, foot slide, reach and hand contact before you see it. |
|
|
70
|
+
| **Shoot** | Put shots on a timeline, draw dolly rails, look through the lens. Each shot knows the limits of the video model you target. |
|
|
71
|
+
| **Export** | Keyframe pack (first and last frame, greybox clip, camera, prompt), mp4, depth and normal passes, contact sheet, OTIO cut list. |
|
|
72
|
+
| **Storyboard** | Prefer stills? A Storyboard project is a row of panels with captions, an animatic and a contact sheet. |
|
|
73
|
+
| **Undo anything** | Every edit, including each change the agent makes, is one undo step. |
|
|
62
74
|
|
|
63
|
-
##
|
|
75
|
+
## Direct it with AI
|
|
64
76
|
|
|
65
|
-
|
|
77
|
+
The same scene can be driven from three places, live, while you watch the viewport.
|
|
66
78
|
|
|
67
|
-
| |
|
|
79
|
+
| Surface | Start | For |
|
|
68
80
|
| --- | --- | --- |
|
|
69
|
-
| **
|
|
70
|
-
| **
|
|
71
|
-
| **
|
|
72
|
-
| **Motion tools** | Hidden: no Motion mode (`4`) | Available |
|
|
73
|
-
| **Agent** | **Agent · Storyboard** builds one panel per request and never generates motion | The full Studio tool set |
|
|
74
|
-
| **Exports** | **Stylize** a panel through the image route, **Send to Workflow** (the stylized image or the greybox) from its card, plus the Export ▾ menu: **Contact sheet (PNG)**, **Panel pack (zip)**, **All panels (zip)**, **Animatic (mp4)**, **Cut list (OTIO)** and **Depth + normal (PNG)**; File ▸ **Export as Animation project…** turns the panels into an Animation. There is no keyframe pack or shot video in a storyboard | Export ▾: keyframe pack, mp4, depth + normal passes, contact sheet, OTIO cut list |
|
|
81
|
+
| **Agent panel** | `Cmd/Ctrl+B` in the studio | Chat in the studio. Sign in with ChatGPT or use your own key (Anthropic, OpenAI, Gemini, OpenRouter, CLIProxyAPI). |
|
|
82
|
+
| **MCP server** | `npx -y cozyclay mcp` | Claude Desktop, Claude Code, Cursor or any MCP client. |
|
|
83
|
+
| **Terminal** | `cclay live status --wait` | Coding agents that drive a running studio, JSON in and out. |
|
|
75
84
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
## Quick start
|
|
79
|
-
|
|
80
|
-
You need Node.js 22.19 or newer, npm or bun, and a Chromium-based browser.
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
npx cozyclay
|
|
84
|
-
# or
|
|
85
|
-
bunx cozyclay
|
|
85
|
+
```json
|
|
86
|
+
{ "mcpServers": { "cozyclay": { "command": "npx", "args": ["-y", "cozyclay", "mcp"] } } }
|
|
86
87
|
```
|
|
87
88
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
A global install gives you `cclay`, the same command with less typing. Once a day the launcher checks npm for a newer release and prints a one-line notice after the studio is up; it stays quiet when you're current or offline. `cclay update` installs the latest release, and `--no-update-check` skips the check entirely.
|
|
91
|
-
|
|
92
|
-
New to the camera? The seven-step tutorial runs inside the Studio on the City Block set: **Settings ▾ → Camera tutorial**, or open `http://127.0.0.1:5180/app/?tutorial=camera`. Each step points at the control it needs and completes only when you actually make the move.
|
|
93
|
-
|
|
94
|
-
### From source
|
|
89
|
+
## From source
|
|
95
90
|
|
|
96
91
|
```bash
|
|
97
|
-
git clone https://github.com/NomaDamas/CozyClay.git
|
|
98
|
-
cd CozyClay
|
|
92
|
+
git clone https://github.com/NomaDamas/CozyClay.git && cd CozyClay
|
|
99
93
|
npm install
|
|
100
|
-
npm run dev
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
Open `http://127.0.0.1:5180/app/` for the Studio (the root redirects there) and `http://127.0.0.1:5180/workflow/` for the Workflow canvas. `npm run dev` starts the studio together with its local OAuth and agent sidecar; `npm run dev:ui` starts the browser UI alone.
|
|
104
|
-
|
|
105
|
-
## AI control
|
|
106
|
-
|
|
107
|
-
Three surfaces drive the same scene, live, through one hub: a chat panel in the Studio, an MCP server for external assistants, and a terminal CLI.
|
|
108
|
-
|
|
109
|
-
### Agent panel in the Studio
|
|
110
|
-
|
|
111
|
-
**View ▾ → Panels → Agent panel** (or `Cmd/Ctrl+B`) opens a chat column that signs in with your ChatGPT account (Codex OAuth; the token lives in `~/.config/cozyclay/`) and works the scene in front of you:
|
|
112
|
-
|
|
113
|
-
> "Put a detective and a courier in an alley, give me a low wide profile shot,
|
|
114
|
-
> then make her stand up from the chair, sprint, and trip."
|
|
115
|
-
|
|
116
|
-
- Every change comes back as a receipt that highlights the Inspector and hierarchy rows it touched, and `Cmd/Ctrl+Z` takes it back like any other edit.
|
|
117
|
-
- The conversation is stored under `~/.config/cozyclay/agent-sessions/` and resumes across reloads and restarts; **History** lists earlier sessions.
|
|
118
|
-
- Paste or drop up to four images into the composer — a reference frame, a storyboard panel — and they go with the turn.
|
|
119
|
-
- The agent has nine Studio tool families, from `inspect_studio` and `arrange_characters` to `patch_elements`, which sets any declared authored field (a character's tint, a shot's target model, the key light) by path. How it turns a pasted video prompt into blocking — what it asks, infers, or leaves empty — is the rule in [`docs/agent-prompt-to-scene.md`](docs/agent-prompt-to-scene.md).
|
|
120
|
-
|
|
121
|
-
The panel is not tied to ChatGPT. Models come from six providers: ChatGPT (your Codex sign-in), Anthropic, OpenAI, Google Gemini, OpenRouter and CLIProxyAPI. A model id reads `provider/model`, so you pick one in the dropdown and that is where the turn goes. The five API-key providers take a key from an environment variable (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY` or `GOOGLE_API_KEY`, `OPENROUTER_API_KEY`, `CLIPROXY_API_KEY`) or from `~/.config/cozyclay/providers.json`, written at mode 0600 and never echoed back by any route; ChatGPT still signs in the way it always did. On the Workflow canvas you can steer a turn while it runs instead of stopping it. Conversations are saved in a new transcript format, so sessions recorded before this version are ignored rather than converted: the old files stay on disk, unread. The provider table, the key routes, the steer route and the session format are in [`docs/agent-cli.md`](docs/agent-cli.md).
|
|
122
|
-
|
|
123
|
-
The agent runs on [pi](https://github.com/earendil-works/pi), an open-source agent harness: `@earendil-works/pi-ai` and `@earendil-works/pi-agent-core` (MIT) are the only runtime dependencies the package declares, and the sidecar loads them lazily, when a turn starts.
|
|
124
|
-
|
|
125
|
-
The same panel sits on the right of the Workflow canvas, where it builds and runs canvas nodes.
|
|
126
|
-
|
|
127
|
-
### MCP server
|
|
128
|
-
|
|
129
|
-
The studio ships an [MCP](https://modelcontextprotocol.io) server, so any MCP client can drive it — the same scene, the same viewport:
|
|
130
|
-
|
|
131
|
-
```json
|
|
132
|
-
{
|
|
133
|
-
"mcpServers": {
|
|
134
|
-
"cozyclay": {
|
|
135
|
-
"command": "npx",
|
|
136
|
-
"args": ["-y", "cozyclay", "mcp"]
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
94
|
+
npm run dev # http://127.0.0.1:5180/app/
|
|
95
|
+
npm test
|
|
140
96
|
```
|
|
141
97
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
- **Editor open?** Tool calls move the visible viewport — camera, cast, set, compiled motion on the timeline.
|
|
145
|
-
- **No editor?** Scene and project tools run headless: block scenes, derive film vocabulary ("wide shot · right profile · knee level · 24mm"), render AI video prompts, and write `.cclayproject` files. `capture_frame` and `apply_batch` require the live editor.
|
|
146
|
-
|
|
147
|
-
Tools, transports and the live-control protocol are documented in [`mcp/README.md`](mcp/README.md).
|
|
148
|
-
|
|
149
|
-
### From a terminal
|
|
150
|
-
|
|
151
|
-
`cclay live` is a small CLI that reads the scene, places and moves things, frames and keys shots, patches declared fields (`cclay live patch --target stage --set '{"keyLight.intensity":2.4}'`), verifies the result with a capture PNG, and undoes by receipt — one JSON object per command, stable error codes, no browser of your own required (only the studio tab itself). It is the intended surface for a coding agent that has to manage a running Studio. The full guide, with three worked sessions against a real editor, is in [`docs/agent-cli.md`](docs/agent-cli.md).
|
|
152
|
-
|
|
153
|
-
## Workflow canvas
|
|
154
|
-
|
|
155
|
-
The Workflow canvas at `http://127.0.0.1:5180/workflow/` is a node editor around the Studio: a **CozyClay Scene** node with a live viewport that previews the shot camera, a **Shot Prompt** node that builds a structured prompt from the capture, **Image** nodes (versions, A/B, pinned references) and a **Video** node that runs through your own ComfyUI (`COZYCLAY_COMFY_URL`) or fal (`FAL_KEY`) — bring your own key, nothing is proxied. Graphs are saved in the browser and execute locally.
|
|
156
|
-
|
|
157
|
-
## Controls
|
|
158
|
-
|
|
159
|
-
| Input | Action |
|
|
160
|
-
| --- | --- |
|
|
161
|
-
| Right-drag | Look around (fly) |
|
|
162
|
-
| RMB + WASD | Walk while flying |
|
|
163
|
-
| RMB + Q/E | Crane down / up |
|
|
164
|
-
| RMB + Shift | Boost fly speed 2.6× |
|
|
165
|
-
| Middle-drag | Pan |
|
|
166
|
-
| Alt + drag | Orbit the selection |
|
|
167
|
-
| Scroll | Dolly; while flying, sets the fly speed instead |
|
|
168
|
-
| Click | Select; empty space clears |
|
|
169
|
-
| Transform strip | Move / rotate / scale tool, snap |
|
|
170
|
-
| Ctrl/Cmd (during drag) | Invert grid snapping |
|
|
171
|
-
| Ctrl/Cmd+Z, Ctrl/Cmd+Shift+Z | Undo / redo |
|
|
172
|
-
| Esc | Cancel the in-flight drag |
|
|
173
|
-
| End | Drop the selection to the surface |
|
|
174
|
-
| Ctrl/Cmd+D | Duplicate the selection |
|
|
175
|
-
| Delete / Backspace | Delete the selection |
|
|
176
|
-
| F | Frame the selection |
|
|
177
|
-
| Look through / Esc | Fly / leave the shot camera |
|
|
178
|
-
| Cmd/Ctrl+B | Show / hide the Agent panel |
|
|
179
|
-
|
|
180
|
-
Every control's home is recorded in [`docs/studio-ui-ia.md`](docs/studio-ui-ia.md), with the rule behind each placement.
|
|
181
|
-
|
|
182
|
-
## Documentation
|
|
98
|
+
## Docs
|
|
183
99
|
|
|
184
100
|
| Read | For |
|
|
185
101
|
| --- | --- |
|
|
186
|
-
| [`
|
|
187
|
-
| [`docs/agent-
|
|
188
|
-
| [`docs/agent-
|
|
189
|
-
| [`mcp/README.md`](mcp/README.md) | MCP tools
|
|
190
|
-
| [`docs/studio-ui-ia.md`](docs/studio-ui-ia.md) |
|
|
191
|
-
| [`docs/privacy.md`](docs/privacy.md) |
|
|
192
|
-
| [`
|
|
193
|
-
| [`docs/releasing.md`](docs/releasing.md) | Publishing a signed npm release |
|
|
194
|
-
| [`CHANGELOG.md`](CHANGELOG.md) | What changed in each release |
|
|
102
|
+
| [`INSTALL_FOR_AGENTS.md`](INSTALL_FOR_AGENTS.md) | Install, run and connect, written for AI agents |
|
|
103
|
+
| [`docs/motion3-agent-guide.md`](docs/motion3-agent-guide.md) | Motion specs, compile and QA |
|
|
104
|
+
| [`docs/agent-cli.md`](docs/agent-cli.md) | `cclay live`, model providers, sessions |
|
|
105
|
+
| [`mcp/README.md`](mcp/README.md) | MCP tools and the live protocol |
|
|
106
|
+
| [`docs/studio-ui-ia.md`](docs/studio-ui-ia.md) | Every control and where it lives |
|
|
107
|
+
| [`docs/privacy.md`](docs/privacy.md) | Anonymous telemetry and how to turn it off (`cclay telemetry off`) |
|
|
108
|
+
| [`AGENTS.md`](AGENTS.md) | Contribution rules |
|
|
195
109
|
|
|
196
|
-
|
|
110
|
+
## Guides
|
|
197
111
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
| Command | Covers |
|
|
112
|
+
| Read | For |
|
|
201
113
|
| --- | --- |
|
|
202
|
-
|
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
|
|
|
206
|
-
| `npm run test:theme` / `test:appearance` / `test:layout` | UI theme, appearance, layout |
|
|
207
|
-
| `npm run test:lifecycle` | Dev-server process lifecycle |
|
|
208
|
-
| `npm run test:ardy` | IK pipeline, range pins and timeline helpers |
|
|
209
|
-
| `node tools/run-tests.mjs` | Every Node verification file (what CI runs) |
|
|
210
|
-
| `npm run qa:browser -- node test/qa-camera-tutorial-browser.mjs` | The seven-step tutorial driven with real input, beacons pinned to their controls |
|
|
211
|
-
| `QA_URL=… CDP_PORT=… OUT=/tmp/count npm run qa:browser -- node tools/qa/studio-control-count.mjs` | Simultaneously visible controls per mode (budget: Scene ≤35 / Camera ≤38 / Motion ≤52) |
|
|
212
|
-
| `cd mcp && npm install && npm run verify` | MCP server over real stdio — all 420 framing combinations |
|
|
213
|
-
| `cd mcp && npm run verify:live` | Live-control protocol against a fake editor (same `npm install` first) |
|
|
214
|
-
| `npm run build` | Production build |
|
|
215
|
-
|
|
216
|
-
Ad-hoc browser QA, while a dev server is available (the browser opens the studio at `/app/`):
|
|
217
|
-
|
|
218
|
-
```bash
|
|
219
|
-
npm run qa:browser -- node <qa-script>
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
## Contributing
|
|
223
|
-
|
|
224
|
-
Found something broken, or want a feature? [Open an issue](https://github.com/NomaDamas/CozyClay/issues) — bug reports with a repro are the most useful thing you can send. Contributions are accepted under `AGPL-3.0-or-later`.
|
|
225
|
-
|
|
226
|
-
**Repository hygiene.** Generated motion archives, QA output, build output, logs and local runtime artifacts are not source files and must not be committed. Keep `artifacts/`, `dist/`, `.gjc/` and `.npz` files local.
|
|
227
|
-
|
|
228
|
-
Every runtime library except the two agent packages (`@earendil-works/pi-ai`, `@earendil-works/pi-agent-core`) intentionally lives in `devDependencies`, because the published npm package ships the prebuilt `dist/`, so `npx cozyclay` must not install the studio's dependency tree.
|
|
229
|
-
|
|
230
|
-
## Analytics & privacy
|
|
231
|
-
|
|
232
|
-
Anonymous usage counts, no cookies, no recordings, never your project content — on the hosted site via PostHog and in the official npm package, which prints the disclosure once on first launch. Source checkouts, forks, dev servers, CI and tests send nothing.
|
|
233
|
-
|
|
234
|
-
```bash
|
|
235
|
-
cclay telemetry status
|
|
236
|
-
cclay telemetry off
|
|
237
|
-
```
|
|
114
|
+
| [Greybox to AI video](https://cozyclay.org/greybox-to-video/) | Why a grey blockout is the most reliable input for a video model, and the block-then-generate loop |
|
|
115
|
+
| [Previs software compared](https://cozyclay.org/previs-software/) | Free, open source and browser-based previs tools side by side |
|
|
116
|
+
| [Seedance 2.5 camera control](https://cozyclay.org/seedance-camera-control/) | Getting the same camera on every take with a reference clip |
|
|
117
|
+
| [Camera control for AI video](https://cozyclay.org/ai-camera-control/) | Why camera prompts drift and what the models actually accept |
|
|
238
118
|
|
|
239
|
-
|
|
119
|
+
Found a bug or want a feature? [Open an issue](https://github.com/NomaDamas/CozyClay/issues).
|
|
240
120
|
|
|
241
|
-
## License
|
|
121
|
+
## License
|
|
242
122
|
|
|
243
|
-
|
|
123
|
+
AGPL-3.0-or-later. See [`LICENSE`](LICENSE), [`LICENSING.md`](LICENSING.md) and
|
|
124
|
+
[`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md). Made by [Doyun](https://github.com/HaD0Yun) at
|
|
125
|
+
[NomaDamas](https://github.com/NomaDamas).
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -34,27 +34,6 @@ ARDY is not bundled with CozyClay. Users must obtain, install, and operate ARDY
|
|
|
34
34
|
|
|
35
35
|
ARDY model checkpoints and other model assets may be governed by separate terms, including the NVIDIA Open Model License identified by the ARDY project. Users are responsible for reviewing and complying with those terms before downloading or using the models.
|
|
36
36
|
|
|
37
|
-
## NVIDIA Kimodo
|
|
38
|
-
|
|
39
|
-
CozyClay provides an optional bridge and data-conversion workflow for externally installed [Kimodo](https://github.com/nv-tlabs/kimodo), a human-motion generation project from NVIDIA Research, and [kimodo.cpp](https://github.com/localai-org/kimodo.cpp).
|
|
40
|
-
|
|
41
|
-
Kimodo runtimes and model weights are not bundled with CozyClay. Users must obtain, install, and operate them separately under NVIDIA's terms and the applicable runtime licenses.
|
|
42
|
-
|
|
43
|
-
- Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES (Kimodo skeleton data)
|
|
44
|
-
- Kimodo source license: Apache License 2.0
|
|
45
|
-
- Source: https://github.com/nv-tlabs/kimodo
|
|
46
|
-
- Source license: https://github.com/nv-tlabs/kimodo/blob/main/LICENSE
|
|
47
|
-
- kimodo.cpp source license: Apache License 2.0
|
|
48
|
-
- Source: https://github.com/localai-org/kimodo.cpp
|
|
49
|
-
- Source license: https://github.com/localai-org/kimodo.cpp/blob/main/LICENSE
|
|
50
|
-
|
|
51
|
-
`tools/kimodo/local-output.mjs` embeds skeleton constants extracted from the `nv-tlabs/kimodo` SOMA77 definitions and `kimodo/assets/skeletons/somaskel77/` assets at commit `1aece8c124d73d255ceff5086d983b844c9f4e94`: the joint hierarchy, neutral-pose offsets, and relaxed-hand rotation matrices. The source assets are pinned by SHA256:
|
|
52
|
-
|
|
53
|
-
- `joints.p`: `dc5fd8e39e0ff312f5d0f536a87ac22ac58445e13443fcb8ab54e6817cb97ce7`
|
|
54
|
-
- `relaxed_hands_rest_pose.npy`: `64a3828e0d1ef1f1de8228c74eba8040c0810d898169f1892d8997a213b2b64c`
|
|
55
|
-
|
|
56
|
-
Kimodo model checkpoints and other model assets may be governed by separate terms, including the NVIDIA Open Model License identified by the Kimodo project. Users are responsible for reviewing and complying with those terms before downloading or using the models.
|
|
57
|
-
|
|
58
37
|
## Meta Llama 3
|
|
59
38
|
|
|
60
39
|
ARDY's text encoder is based on Meta Llama 3 (`Meta-Llama-3-8B-Instruct`).
|