需要 Node.js 22.19 及以上版本,低版本无法运行;默认打开地址是 http://127.0.0.1:5180/app/,端口被占用时需注意;从源码运行需先 npm install 再 npm run dev。

CozyClay
HaD0YunAGPL-3.0活跃维护浏览器里就能用的开源预演(previs)工具,可快速搭建场景、摆角色姿势、编排镜头与剪辑,再把同一套镜头交给 AI 视频模型生成。
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.
npx cozyclayREADME 明确说明不需要 GPU、Python 或下载模型,只需 Node.js 22.19 或更新版本和一个 Chromium 浏览器;未提及具体显存或 GPU 型号要求。
浏览器里的开源预演工具,先在3D里摆好场景和镜头,再交给AI视频模型生成
浏览器里就能用的开源预演(previs)工具,可快速搭建场景、摆角色姿势、编排镜头与剪辑,再把同一套镜头交给 AI 视频模型生成。
核心能力
- 用基础几何体搭景并摆放绑定角色或胶囊替身
- 用自然语言描述动作,由浏览器内确定性编译器逐帧烘焙并做碰撞与脚滑QA
- 在时间线上排镜头、画推轨、按目标视频模型限制取景
- 导出首末帧、灰盒参考片段、相机与提示词、mp4、深度法线通道和OTIO剪辑表
- 通过Agent面板、MCP服务器或cclay终端实时驱动同一场景
容易踩的坑
- v3.2.2CozyClay v3.2.2最新正式版2026-11-07 · 2026-11-07 09:30 UTC
A patch for the motion compiler and the agent: faster compiles, holds and automatic legs, arms, gaze and tempo, steadier agent turns, and depth exports that read right.
Export
- A depth video whose frames show no empty background (a backdrop that fills the frame, a closed corridor) keeps a readable range instead of going all black. (#1090)
- Rigged characters render in their current pose in depth frames and
blocking-depth.mp4, not in the T-pose. (#1094) export.shotVideotakespassKind: "depth"anddepthCurve: "inverse"for an inverse-distance depth curve that keeps close-up relief. (#1096)
Camera
- A rail camera aimed at a rising or falling object follows its height each frame instead of one shot-average height. (#1095)
- Agents can hold camera framing. (#1027)
Motion
- Compiles run about 1.5x faster:
pose()'s bone edits run in WebAssembly, with takes the same bit for bit. (#1088) - Holds, and automatic tempo, knee poles, foot heading, free-arm swing and
gaze (
set.look) where the keys leave them out. (#1080, #1081, #1082) - Two-hand carries hold a box from below at its sides; letting go and throwing no longer jump.
- Repair and retime run by default, with QA-guarded key thinning. (#1006)
- MotionBricks transition fills (opt-in), a native mode and the Smart Primitive runner, with named poses and fills that hold up in scenes with objects. (#1008, #1017, #1023)
- A grasp out of reach says so, instead of blaming the grip. (#1066)
Agent
- Provider failures retry gateway 5xx and honour Retry-After; usage limits read as quota; sign-in waits say why they stopped. (#1043, #1044)
- Refusals name the failing field. (#1042)
- Tasks: a main turn that makes no progress ends, the watchdog waits on running tools and names a model that did not answer, finished tasks undo after a scene round trip, and paused tasks resume instead of refusing. (#1002, #1004, #1010, #1051, #1056, #1058)
- Every edited turn is checked, with pictures and relations given to the model, and the panel shows the review and the context used. (#1000, #1030)
- A handled prop is staged within reach. (#1066)
- Camera, blocking and review previs workflow. (#1014)
Studio
- Contact sheets show a character behind scene bodies. (#1024)
- An empty cast is allowed; cancelling the file picker no longer counts as a refusal. (#1041)
- Pose mode picks the one rigged character; the first-success guide starts with Add a character. (#1047, #1048)
- Fixed a playback update-depth loop (React #185) and crashes under page translation. (#1045, #1046)
- A slab resting on the deck no longer z-fights with it. (#1075)
CLI
cclay live save --out file.cclayproject [--force]saves the open project from the terminal. (#1072)cclay live capture --frames A-B --out-dir DIRrenders a run of frames in one session. (#1074)live run,cmdandtooltake--args-file <path>or--args -(stdin), so large payloads such as GLB data URLs fit. (#1092)asset.importdecodes meshopt and Draco compressed GLB. (#1092)inspectpages entities with--limitand--cursor; live captures from a hidden Studio tab are refused. (#1070, #1071)shot.setcamera keys documentframing.yawandpitchas radians. (#1093)
Other
- three.js 0.187; MCP SDK 1.32.2.
- Landing page: the shot and the way in on the first screen, a sharper hero take, and a daily GitHub star count.
- v3.2.1CozyClay v3.2.12026-10-28 · 2026-10-28 00:24 UTC
查看更新说明
A patch that makes the numbers readable: hosted builds report their version, and the export funnel and agent failures can be split by cause; plus a script-driven tutorial recorder.
Studio
- The Update chip now agrees across open Studio tabs at once: closing it, pressing Update now or an install finishing in one tab shows in the others without waiting for their next check.
- Help › About shows the version you are running.
- In Sculpt mode, click a part of the sculpt to select it: the part gets an outline, and its row lights up in the new Parts tree in the Sculpt panel. A click on a mirrored copy selects the part it mirrors. A click on empty space, or Esc, clears it.
- Sculpt shelf. Save to shelf in Sculpt mode keeps a sculpt as a card
in Content › Sculpts, with a thumbnail. Drag a card into any scene of
any project to place a copy. Export a card as
.cozysculpt.jsonand import it on another machine. - After a one-click update, Restart now starts the new version on the same port in the same terminal (macOS and Linux), and the Studio reloads when it answers. A project with unsaved changes asks you to save, then reload. Windows keeps the copy command by design.
- A selected sculpt part gets a gizmo: W moves it, E rotates it and R scales it (Shift scales evenly), and W/E/R go back to the turntable views once the part is cleared. One drag is one undo, a mirrored pair moves together, and an edit the recipe refuses snaps back with the reason. Delete with a part selected no longer deletes the whole sculpt.
- A capsule figure set to Sit now sits on the floor in an L, with its legs reaching forward the way it faces, instead of only getting shorter. Its bounds, and so framing, follow the new shape. (#999)
CLI
cclay update --offturns the update line and the Studio's Update chip off for good;cclay update --onturns them back on.cclay update --checkstill answers either way.
Agent
- A task that read a whole character is told when another task edits one of that character's layers, so a placement built on an old position is flagged on its next step. (#981, #982)
- Task mode in the agent panel is on by default. Turning it off is remembered in this browser. (#998)
Sculpt
- Multi-view compare. The blueprint sheet is cropped into front, side,
back and top views, each with its own mask; a view whose mask fails is
dropped with a notice.
sculpt.comparetakesviews: [{ yaw, reference, weight }]and weighs front, side and back 0.6, 0.25 and 0.15, giving 0 to a view whose proportions differ from the front by more than 35%. Start compares against the cropped side and back next to the front reference. Generate blueprint shows only with a ChatGPT sign-in. (#970, #995)
Analytics
- Hosted builds report the version they run. (#989)
- Opening the Export menu is counted, with whether the browser can encode
MP4, so the export funnel can be read. The privacy page lists the new
export:menu_openedevent. (#990) - Agent failures say whether the provider failed, the request got no network answer, or the cause is unknown, instead of one catch-all. (#991)
- MCP tool events carry the tool name, and
studio_commandscounts as a read. The privacy page lists thetool_nameproperty. (#994) - Reference exports made by QA scripts no longer count as user export attempts. (#993)
- Usage analytics no longer switch themselves off in source checkouts, forks
or CI (a
CIvariable alone does not disable them), and the browser's Do-Not-Track setting is no longer read. Turn them off withcclay telemetry off,COZYCLAY_TELEMETRY=0orDO_NOT_TRACK=1; the analytics toggle in Preferences and the launch notice are gone. An unreadable state file now reads as the defaults, with analytics on, and a Studio served on a local network address counts as local. The star question is asked once per version when the Studio starts, instead
- v3.2.0CozyClay v3.2.02026-10-26 · 2026-10-26 07:47 UTC
查看更新说明
Motion gets physics you can see and trust: props swing and settle after the hand stops, balance and jumps are judged by real mass and gravity and the Studio draws why, and characters no longer pass through each other when you drag or compile.
Studio
- Physics overlay. Tick Physics in the motion controls, or call
motion.physicsOverlay, to draw the centre of mass (green inside the feet, red outside, grey in the air), the support polygon under the feet, each jump's actual hips path next to its gravity arc, and a short trail behind swinging props. It shows in scrub, playback and video export, and red frames are exactly the ones QA calls BALANCE. (#950) - Dragging a hand or foot IK handle into another character now stops at that character's body instead of passing through, even on a fast drag across a thin forearm. Hold Alt while dragging to pass through on purpose; a one-time notice says so. The other character never moves. (#949)
Motion3
- Prop spring.
objects.<id>.spring = { length, stiffness, damping }makes a carried or free prop (a bag, a lantern, a club) swing a beat behind the hand and settle.lengthis the string or rod length; stiffness defaults to gravity over length and damping to 0.5, sospring: { length: 0.5 }already swings naturally. Put the prop's base at the hand withat/along, because the swing pivots at the base; QA notes a base that sits far from the hand. The swing is computed once at compile time, stops when a dropped prop lands, and never pushes the prop into the floor. (#945) - BALANCE now uses a mass-weighted centre of mass against the support polygon of the grounded feet, instead of a four-point average and a box. Its hint gives the distance and direction (for example 0.10 m ahead of the feet), and a lean that changes direction stays one issue. A hint that moves the root now moves every key that holds the pose, so the body does not slide between them. (#944, #937)
- FLOAT issues come with a fix: the root keyed onto the gravity arc between takeoff and landing, returning to the original motion at both ends. When the correction would be too large, the hint gives the apex height or the air time that would fit instead. (#943)
fix.person(on by default) moves a character's arms out of another character's body at compile time, keeps contact you allowed inchecks.allow, and gives the same take after saving and reopening. (#948)
Agent
- Kimi K3 models (
kimi-k3*on the Moonshot hosts) work on the OpenAI-compatible provider with their reasoning efforts and full output limit. A turn that spends every output token before answering now says so and suggests a lower reasoning effort, instead of failing with no output. (#951, #947)
Package and tests
jpeg-js, which the MCP image tools import, is a root dev dependency, so a development checkout runs the MCP tests without a separate install. The test runner now skips the MCP suites with a clear message whenmcp/node_modulesis missing. (#946, #936)- The Studio camera QA enters look-through from the dock's Shot Camera card, where the Studio shows it. (#952, #925)
- Physics overlay. Tick Physics in the motion controls, or call
- v3.1.6CozyClay v3.1.62026-10-25 · 2026-10-25 06:20 UTC
查看更新说明
The npm package ships the MCP module the live tools need, so the Studio's live tools and
cozyclay mcpwork on a fresh install.Studio
- A 3.1.5 global install shows the Update chip in the top bar for the
first time, since this is the first release after the chip shipped.
Update now, or the command it offers to copy, installs 3.1.6; then
restart
cclay.
MCP
- The npm package now ships
mcp/project-camera.mjs, so the Studio's live tools andcozyclay mcpstart on an npm install instead of failing with "Cannot find module" (broken since 3.1.2). The package check now fails a release whosebin/ormcp/code imports a file the package leaves out.
- A 3.1.5 global install shows the Update chip in the top bar for the
first time, since this is the first release after the chip shipped.
Update now, or the command it offers to copy, installs 3.1.6; then
restart
- v3.1.5CozyClay v3.1.52026-10-25 · 2026-10-25 05:09 UTC
查看更新说明
The Studio tells you when a new release is out and installs it in one click, Claude models work in the agent panel again, IK edits stay on their own character, turns and walks look more natural, and anonymous analytics show where the Studio gets in the way.
Agent
- Agent turns on Claude models no longer fail with a 400 error about a deferred placeholder tool.
- When a turn is already running, the failure chip reads
busyinstead ofupstream. The message text is unchanged.
Motion
- The head turns first and leads the body into a turn, by about 5 frames at
24 fps, the way a person's does.
flow.headLeadsets the frames (0 to 12), andfalseturns it off. A keyed head look still wins. - Takes that walk report
observations.gait: cadence, step length, speed, stance and pelvis motion, with warnings outside a person's range. It is a reading only and never changes the QA result. - Grasp QA reads each finger:
FINGER_ROM(a joint past its range),FINGER_SELF(two fingers inside each other) andTHUMB_OFF(a held object without the thumb on it). - A carried ball keeps the thumb on it. A finger that misses a held object turns toward it at the knuckle, and the ring and little fingers curl together. Stacked hand presets no longer over-curl.
Studio
- An npm studio shows a small Update chip in the top bar when a newer
release is out, once per version. A global install whose folder npm can
write gets Update now, which installs the release and then asks you
to restart
cclay. Other installs get the command to copy, and npx gets "runnpx cozyclayagain". Update now waits while an agent turn, an export or a recording runs. A failed install names the cause (permissions, network, Node version, npm missing) and keeps the command. - An IK edit stays with its own character. Selecting another character mid-drag no longer poses it, and undo no longer reverts or deletes the other character. Switching characters applies a pending IK edit and shows a notice.
- Ctrl+Z after an IK drag puts the pose back, with or without a take loaded.
- On a browser without WebGL, the unavailable notice appears one frame after the Studio first draws instead of during it.
CLI
cclay update --checkprints the current and latest version without installing, and exits 0 (up to date), 10 (update available) or 11 (unknown).cclay updatenow refuses a release your Node.js cannot run.- A source checkout reports itself as
clone, and a Windows global install is no longer mistaken for npx.
Site
- A redesigned cozyclay.org: a black first screen with a greybox-to-video reel, how-it-works clips from the tutorial, and Try it opens the Studio.
Analytics
- The anonymous usage analytics now cover where the Studio gets in the way:
- the agent loop: refused commands, a summary per agent turn, each motion draft and its QA result, and each prompt sent, so retry loops and hesitation show
- model connect: the sign-in steps and where they stop, and model changes
- exports: retries, the stage a failed or stopped export reached, and saved files. Storyboard PNG, render pass and OTIO exports are now counted.
- clicks, shortcuts and search: repeated or dead clicks on the main controls, shortcuts that did nothing, searches with no result, and switching panels or orbiting the camera back and forth
- playback, boot and crashes: time to the first frame, playback runs and late frames, the first-success guide, render crashes and lost WebGL
- the update notice: when it shows, which button was pressed, and whether the install worked
- one friction summary per session
- Every value is a closed bucket or a fixed id. No text, names, paths, object ids, click coordinates or npm output are sent. Prompt text never leaves the browser; only a length bucket and a similarity grade to the last prompt do.
- First-edit events count only your own edits, not the agent's, and report
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Why
AI video costs money per take, and one miss means paying again. A text prompt cannot hold a whole scene: where everyone stands, how they move, where the camera is, when it cuts.
CozyClay lets you make those decisions first, in 3D, where they are cheap to change. Then the video model gets the shot as a first frame, a greybox reference clip and a prompt that describes the real framing. It follows the blocking instead of guessing.
flowchart LR
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"]
Quick start
npx cozyclay
That is the whole install. You need Node.js 22.19 or newer and a Chromium browser. You do not need
a GPU, Python or a model download. The studio opens at http://127.0.0.1:5180/app/.
Updating. npx cozyclay fetches the newest release each time you run it. After
npm install -g cozyclay, the studio shows a small Update chip in the top bar when a newer
release is out. Update now installs it, and Restart now starts the new version in the same
terminal; the studio reloads once your project is saved. On Windows the chip gives you the command to
copy instead: one-click stays off there by design. cclay update does the same from the terminal. --no-update-check or COZYCLAY_NO_UPDATE_CHECK=1 turns the check off
for one launch; cclay update --off turns it off for good, and cclay update --on brings it back.
Asking an AI agent to set it up? Give it this repository link. Its instructions are in
INSTALL_FOR_AGENTS.md.
What you can do
| 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. |
| 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. |
| Shoot | Put shots on a timeline, draw dolly rails, look through the lens. Each shot knows the limits of the video model you target. |
| Export | Keyframe pack (first and last frame, greybox clip, camera, prompt), mp4, depth and normal passes, contact sheet, OTIO cut list. |
| Storyboard | Prefer stills? A Storyboard project is a row of panels with captions, an animatic and a contact sheet. |
| Undo anything | Every edit, including each change the agent makes, is one undo step. |
Direct it with AI
The same scene can be driven from three places, live, while you watch the viewport.
| Surface | Start | For |
|---|---|---|
| Agent panel | Cmd/Ctrl+B in the studio | Chat in the studio. Sign in with ChatGPT or use your own key (Anthropic, OpenAI, Gemini, MiniMax, OpenRouter, CLIProxyAPI). |
| MCP server | npx -y cozyclay mcp | Claude Desktop, Claude Code, Cursor or any MCP client. |
| Terminal | cclay live status --wait | Coding agents that drive a running studio, JSON in and out. |
{ "mcpServers": { "cozyclay": { "command": "npx", "args": ["-y", "cozyclay", "mcp"] } } }
From source
git clone https://github.com/HaD0Yun/CozyClay.git && cd CozyClay
npm install
npm run dev # http://127.0.0.1:5180/app/
npm test
Docs
| Read | For |
|---|---|
INSTALL_FOR_AGENTS.md | Install, run and connect, written for AI agents |
docs/motion3-agent-guide.md | Motion specs, compile and QA |
docs/agent-cli.md | cclay live, model providers, sessions |
mcp/README.md | MCP tools and the live protocol |
docs/studio-ui-ia.md | Every control and where it lives |
docs/privacy.md | Anonymous telemetry and how to turn it off (cclay telemetry off) |
AGENTS.md | Contribution rules |
Guides
| Read | For |
|---|---|
| Greybox to AI video | Why a grey blockout is the most reliable input for a video model, and the block-then-generate loop |
| Previs software compared | Free, open source and browser-based previs tools side by side |
| Seedance 2.5 camera control | Getting the same camera on every take with a reference clip |
| Camera control for AI video | Why camera prompts drift and what the models actually accept |
Found a bug or want a feature? Open an issue.
License
AGPL-3.0-or-later. See LICENSE, LICENSING.md and
THIRD_PARTY_NOTICES.md. Made by Doyun at
NomaDamas.