Update to Toonkit
Snapshot Oct 26, 2026 · 06:08 UTC · version 0.3.0
Collection source: downloaded plugin package.
Payment or plan references changed
Skill instructions — Now says: hooks: PreToolUse: - matcher:...
Observed in published text. Live prices and checkout terms have not been verified by this change.
Up to 10 plugins free · no card required.
All fields and original values.
Skill instructions
Oct 24, 2026 · 13:32 UTC
1. Write one compact `3dref-production-v2` spec from the user's references. Plan actors/camera first, then shot-relevant proxies and real support faces. Actor count is bounded by live capacity, not fixed at two. 2. Compile in a fresh run...
Oct 26, 2026 · 06:08 UTC
hooks: PreToolUse: - matcher: "mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))" hooks: - type: command timeout: ...
Supporting files
Oct 24, 2026 · 13:32 UTC
[{"relative_path":"agents/openai.yaml","size_in_bytes":293},{"relative_path":"references/body-motion.md","size_in_bytes":4551},{"relative_path":"references/direct.md","size_in_bytes":5114},{"relative_path":"references/direction.md","size...
Oct 26, 2026 · 06:08 UTC
[{"relative_path":"agents/openai.yaml","size_in_bytes":293},{"relative_path":"references/body-motion.md","size_in_bytes":4551},{"relative_path":"references/conventions.md","size_in_bytes":8079},{"relative_path":"references/direct.md","si...
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -3,6 +3,37 @@ description: Create or edit ToonKit 3D camera/action previz when explicitly requested or selected for a production stage. Uses live MCP features and visible browser Export; deterministic and credit-free. metadata: short-description: Camera/action previz with efficient staging and export +hooks: + PreToolUse: + - matcher: "mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))" + hooks: + - type: command + timeout: 30 + command: >- + i=$(cat); d="${TOONKIT_3DREF_SPOOL:-$HOME/.cache/toonkit-3dref/spool}"; + case "$i" in *'"3dref-spool:'*) ;; *) set -- "$d"/*.pending; [ -e "$1" ] || exit 0;; esac; + for p in python3 python; do if "$p" -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then + printf '%s' "$i" | "$p" "${CLAUDE_PLUGIN_ROOT}/skills/3dref/scripts/spool_hook.py"; exit 0; fi; done; exit 0 + PostToolUse: + - matcher: "mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))" + hooks: + - type: command + timeout: 30 + command: >- + i=$(cat); d="${TOONKIT_3DREF_SPOOL:-$HOME/.cache/toonkit-3dref/spool}"; + case "$i" in *'"3dref-spool:'*) ;; *) set -- "$d"/*.pending; [ -e "$1" ] || exit 0;; esac; + for p in python3 python; do if "$p" -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then + printf '%s' "$i" | "$p" "${CLAUDE_PLUGIN_ROOT}/skills/3dref/scripts/spool_hook.py"; exit 0; fi; done; exit 0 + PostToolUseFailure: + - matcher: "mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))" + hooks: + - type: command + timeout: 30 + command: >- + i=$(cat); d="${TOONKIT_3DREF_SPOOL:-$HOME/.cache/toonkit-3dref/spool}"; + case "$i" in *'"3dref-spool:'*) ;; *) set -- "$d"/*.pending; [ -e "$1" ] || exit 0;; esac; + for p in python3 python; do if "$p" -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then + printf '%s' "$i" | "$p" "${CLAUDE_PLUGIN_ROOT}/skills/3dref/scripts/spool_hook.py"; exit 0; fi; done; exit 0 --- # 3D reference previz @@ -17,9 +48,9 @@ ## Compiled route -1. Write one compact `3dref-production-v2` spec from the user's references. Plan actors/camera first, then shot-relevant proxies and real support faces. Actor count is bounded by live capacity, not fixed at two. -2. Compile in a fresh run directory. The package converts center/size to actual primitive pivots, bakes each distinct motion once, solves the wall-floor roll sign, culls irrelevant geometry, reduces keys and checks emitted interpolation. Fix concrete planning failures locally before writing. Default hold observations are advisory; explicit requested limits are enforced. -3. Use the packaged runtime or [portable relay](references/direct.md), both over the same bridge. Keep the exact editor visible. Apply all base keys before pose overlays; wait for accepted pending work before new revisions. +1. Read [conventions](references/conventions.md) and `references/examples/` first; do not study `scripts/` source (loading the launcher as [execution](references/execution.md) describes is expected). Write one compact `3dref-production-v2` spec from the user's references. Plan actors/camera first, then shot-relevant proxies and real support faces. Actor count is bounded by live capacity, not fixed at two. +2. Compile in a fresh run directory. The package converts center/size to actual primitive pivots, bakes each distinct motion once, solves the wall-floor roll sign, culls irrelevant geometry, reduces keys and checks emitted interpolation. Fix concrete planning failures locally before writing: read only `<run>/diagnostic.json`, edit the spec, recompile (seconds). Default hold observations are advisory; explicit requested limits are enforced. +3. Use the packaged runtime or [portable relay](references/direct.md), both over the same bridge. On Claude Code the relay parks MCP payloads through this skill's hook (`--spool`); never retype requests or responses. Skill hooks apply only to the main conversation, so run the relay there, not in a subagent. Keep the exact editor visible. Apply all base keys before pose overlays; wait for accepted pending work before new revisions. 4. Compare exposed saved fields with the bundle. Check timing in the visible editor when safe readback omits it. Verify a fresh scene before Export. Never Save stale initial UI data over verified work. 5. Export through the visible editor. Record whether a click actually occurred; readiness failure with confirmed no click may resume. Uncertain clicks must be reconciled with existing output before another attempt. Confirm the new source edge, exact output node and decoded duration/dimensions.
Full technical diff · 2 changed fields
changed /included_files
[
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 293
},
{
"relative_path": "references/body-motion.md",
"size_in_bytes": 4551
},
{
"relative_path": "references/direct.md",
"size_in_bytes": 5114
},
{
"relative_path": "references/direction.md",
"size_in_bytes": 1467
},
{
"relative_path": "references/execution.md",
"size_in_bytes": 8975
},
{
"relative_path": "references/mcp-contract.md",
"size_in_bytes": 7042
},
{
"relative_path": "references/native.md",
"size_in_bytes": 4593
},
{
"relative_path": "references/preflight.md",
"size_in_bytes": 3398
},
{
"relative_path": "references/production-input.md",
"size_in_bytes": 7674
},
{
"relative_path": "scripts/bridge.js",
"size_in_bytes": 23742
},
{
"relative_path": "scripts/browser-export.js",
"size_in_bytes": 3606
},
{
"relative_path": "scripts/compiler.py",
"size_in_bytes": 4015
},
{
"relative_path": "scripts/direct.py",
"size_in_bytes": 2322
},
{
"relative_path": "scripts/engine-profile.json",
"size_in_bytes": 2374
},
{
"relative_path": "scripts/engine_v1.py",
"size_in_bytes": 3426
},
{
"relative_path": "scripts/geometry.py",
"size_in_bytes": 3339
},
{
"relative_path": "scripts/intent.py",
"size_in_bytes": 3658
},
{
"relative_path": "scripts/interactions.py",
"size_in_bytes": 2941
},
{
"relative_path": "scripts/journal.py",
"size_in_bytes": 4269
},
{
"relative_path": "scripts/locomotion.py",
"size_in_bytes": 2197
},
{
"relative_path": "scripts/mcp_plan.py",
"size_in_bytes": 860
},
{
"relative_path": "scripts/motion_bake.mjs",
"size_in_bytes": 14636
},
{
"relative_path": "scripts/plan.py",
"size_in_bytes": 4838
},
{
"relative_path": "scripts/preflight.py",
"size_in_bytes": 21457
},
{
"relative_path": "scripts/relay.mjs",
"size_in_bytes": 1829
},
{
"relative_path": "scripts/runtime.js",
"size_in_bytes": 7639
},
{
"relative_path": "scripts/scene_compiler.py",
"size_in_bytes": 16519
},
{
"relative_path": "scripts/spatial.py",
"size_in_bytes": 3482
},
{
"relative_path": "scripts/support.py",
"size_in_bytes": 4400
},
{
"relative_path": "scripts/timewarp.mjs",
"size_in_bytes": 1067
},
{
"relative_path": "scripts/timewarp.py",
"size_in_bytes": 1569
}
][
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 293
},
{
"relative_path": "references/body-motion.md",
"size_in_bytes": 4551
},
{
"relative_path": "references/conventions.md",
"size_in_bytes": 8079
},
{
"relative_path": "references/direct.md",
"size_in_bytes": 7593
},
{
"relative_path": "references/direction.md",
"size_in_bytes": 1467
},
{
"relative_path": "references/examples/example-jump-slowmo.json",
"size_in_bytes": 3869
},
{
"relative_path": "references/examples/example-run-follow.json",
"size_in_bytes": 2106
},
{
"relative_path": "references/execution.md",
"size_in_bytes": 9320
},
{
"relative_path": "references/mcp-contract.md",
"size_in_bytes": 7042
},
{
"relative_path": "references/native.md",
"size_in_bytes": 4593
},
{
"relative_path": "references/preflight.md",
"size_in_bytes": 3398
},
{
"relative_path": "references/production-input.md",
"size_in_bytes": 7789
},
{
"relative_path": "scripts/bridge.js",
"size_in_bytes": 23742
},
{
"relative_path": "scripts/browser-export.js",
"size_in_bytes": 3606
},
{
"relative_path": "scripts/compiler.py",
"size_in_bytes": 4015
},
{
"relative_path": "scripts/direct.py",
"size_in_bytes": 5316
},
{
"relative_path": "scripts/engine-profile.json",
"size_in_bytes": 2374
},
{
"relative_path": "scripts/engine_v1.py",
"size_in_bytes": 3426
},
{
"relative_path": "scripts/geometry.py",
"size_in_bytes": 3339
},
{
"relative_path": "scripts/intent.py",
"size_in_bytes": 3658
},
{
"relative_path": "scripts/interactions.py",
"size_in_bytes": 3060
},
{
"relative_path": "scripts/journal.py",
"size_in_bytes": 4269
},
{
"relative_path": "scripts/locomotion.py",
"size_in_bytes": 2197
},
{
"relative_path": "scripts/mcp_plan.py",
"size_in_bytes": 860
},
{
"relative_path": "scripts/motion_bake.mjs",
"size_in_bytes": 14636
},
{
"relative_path": "scripts/plan.py",
"size_in_bytes": 4838
},
{
"relative_path": "scripts/preflight.py",
"size_in_bytes": 21540
},
{
"relative_path": "scripts/relay.mjs",
"size_in_bytes": 1829
},
{
"relative_path": "scripts/runtime.js",
"size_in_bytes": 7639
},
{
"relative_path": "scripts/scene_compiler.py",
"size_in_bytes": 16730
},
{
"relative_path": "scripts/spatial.py",
"size_in_bytes": 3482
},
{
"relative_path": "scripts/spool_hook.py",
"size_in_bytes": 9361
},
{
"relative_path": "scripts/support.py",
"size_in_bytes": 4610
},
{
"relative_path": "scripts/timewarp.mjs",
"size_in_bytes": 1067
},
{
"relative_path": "scripts/timewarp.py",
"size_in_bytes": 1898
}
]changed /skill_md_contents
"---\nname: 3dref\ndescription: Create or edit ToonKit 3D camera/action previz when explicitly requested or selected for a production stage. Uses live MCP features and visible browser Export; deterministic and credit-free.\nmetadata:\n short-description: Camera/action previz with efficient staging and export\n---\n\n# 3D reference previz\n\nDeliver an editable ToonKit scene and its playable source-linked video. Preserve requested duration, FPS, actors and camera intent. A location sheet supplies spatial relationships: build only surfaces, silhouettes and obstacles needed by the shot, using simple proxies. Do not recreate panorama detail.\n\n## Choose the smallest suitable route\n\n- **Native MCP:** simple continuous presets, a few root/camera keys, existing-scene edits, other catalog geometry/animals or existing uploaded assets. Read [native execution](references/native.md). No Node/three/FBX setup for this route. The live catalog defines available ToonKit features; the compiler's limits do not disable them.\n- **Compiled choreography:** multi-actor trajectories with measured contact, wall-as-floor roll, composed body motion or shared root/body slow motion. Read [production input](references/production-input.md) and [execution](references/execution.md). Read [source motion](references/body-motion.md) only for composed/retimed actions. Python/Node calculate the frames, binds and checks; do not handwrite dense arrays or replace a failed measured constraint with fabricated evidence.\n- No AI catalogs, balance, quotes or generation SSOT for either deterministic route. Generation remains a separately authorized stage.\n\n## Compiled route\n\n1. Write one compact `3dref-production-v2` spec from the user's references. Plan actors/camera first, then shot-relevant proxies and real support faces. Actor count is bounded by live capacity, not fixed at two.\n2. Compile in a fresh run directory. The package converts center/size to actual primitive pivots, bakes each distinct motion once, solves the wall-floor roll sign, culls irrelevant geometry, reduces keys and checks emitted interpolation. Fix concrete planning failures locally before writing. Default hold observations are advisory; explicit requested limits are enforced.\n3. Use the packaged runtime or [portable relay](references/direct.md), both over the same bridge. Keep the exact editor visible. Apply all base keys before pose overlays; wait for accepted pending work before new revisions.\n4. Compare exposed saved fields with the bundle. Check timing in the visible editor when safe readback omits it. Verify a fresh scene before Export. Never Save stale initial UI data over verified work.\n5. Export through the visible editor. Record whether a click actually occurred; readiness failure with confirmed no click may resume. Uncertain clicks must be reconciled with existing output before another attempt. Confirm the new source edge, exact output node and decoded duration/dimensions.\n\n## Scope and invariants\n\nThe compiler currently calibrates boxes, fresh unit-scale stock humans, one camera and the documented source motions. Other live MCP features use the native route with appropriately scoped checks; do not silently substitute the compiler's subset for the user's request. Existing compiled runs use their original matching runtime.\n\n`engine-profile.json` records calibrated geometry/interpolation and maintenance evidence. Web JS filenames are not execution requirements: ordinary frontend rebuilds or lazy loading must not stop production. Live catalog/scene incompatibility or a changed source FBX needed for baking requires concrete inspection of that operation. Do not reverse-engineer the website on every request.\n\nAll compiled actor frames need real finite support, a declared transfer, or bounded intended flight. Root/body share a time map for slow motion; root height is applied once. Walls-as-floor require projected outward normal screen-up. Bone markers and stride comparisons are approximations, not skin/sole IK or artistic certification.\n\nScene/canvas edits use MCP; browser work is editor/navigation, readiness, Save/Export and resulting media. No hidden app stores/private endpoints or substitute renderer. Preserve existing user work. Do not lower FPS, shorten or split the shot, spend generation credits, or waive a failed measured constraint just to reach Export.\n\nNo prior project, local test log or conversation is required. Compiled runs retain `spec.json`, `compiled.json`, `journal.jsonl`; failed plans retain diagnostics. Load helpers once and emit summaries, not arrays. Native runs retain only the plan/receipts needed for recovery. Development tests run at release time, not on user requests.\n\nKeep the result visible and group this run's source/output once. Return the canvas link, actual duration/dimensions, scene FPS and concise verified/unverified scope. Export success does not establish visual acceptance or R2V compatibility. No routine screenshot/contact-sheet or repeated playback loops.\n\nFor underspecified staging read [direction](references/direction.md); for a failed constraint or release maintenance read [verification](references/preflight.md). Read the [MCP contract](references/mcp-contract.md) for operations outside the compiler or changed connected declarations.\n"
"---\nname: 3dref\ndescription: Create or edit ToonKit 3D camera/action previz when explicitly requested or selected for a production stage. Uses live MCP features and visible browser Export; deterministic and credit-free.\nmetadata:\n short-description: Camera/action previz with efficient staging and export\nhooks:\n PreToolUse:\n - matcher: \"mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))\"\n hooks:\n - type: command\n timeout: 30\n command: >-\n i=$(cat); d=\"${TOONKIT_3DREF_SPOOL:-$HOME/.cache/toonkit-3dref/spool}\";\n case \"$i\" in *'\"3dref-spool:'*) ;; *) set -- \"$d\"/*.pending; [ -e \"$1\" ] || exit 0;; esac;\n for p in python3 python; do if \"$p\" -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then\n printf '%s' \"$i\" | \"$p\" \"${CLAUDE_PLUGIN_ROOT}/skills/3dref/scripts/spool_hook.py\"; exit 0; fi; done; exit 0\n PostToolUse:\n - matcher: \"mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))\"\n hooks:\n - type: command\n timeout: 30\n command: >-\n i=$(cat); d=\"${TOONKIT_3DREF_SPOOL:-$HOME/.cache/toonkit-3dref/spool}\";\n case \"$i\" in *'\"3dref-spool:'*) ;; *) set -- \"$d\"/*.pending; [ -e \"$1\" ] || exit 0;; esac;\n for p in python3 python; do if \"$p\" -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then\n printf '%s' \"$i\" | \"$p\" \"${CLAUDE_PLUGIN_ROOT}/skills/3dref/scripts/spool_hook.py\"; exit 0; fi; done; exit 0\n PostToolUseFailure:\n - matcher: \"mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))\"\n hooks:\n - type: command\n timeout: 30\n command: >-\n i=$(cat); d=\"${TOONKIT_3DREF_SPOOL:-$HOME/.cache/toonkit-3dref/spool}\";\n case \"$i\" in *'\"3dref-spool:'*) ;; *) set -- \"$d\"/*.pending; [ -e \"$1\" ] || exit 0;; esac;\n for p in python3 python; do if \"$p\" -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then\n printf '%s' \"$i\" | \"$p\" \"${CLAUDE_PLUGIN_ROOT}/skills/3dref/scripts/spool_hook.py\"; exit 0; fi; done; exit 0\n---\n\n# 3D reference previz\n\nDeliver an editable ToonKit scene and its playable source-linked video. Preserve requested duration, FPS, actors and camera intent. A location sheet supplies spatial relationships: build only surfaces, silhouettes and obstacles needed by the shot, using simple proxies. Do not recreate panorama detail.\n\n## Choose the smallest suitable route\n\n- **Native MCP:** simple continuous presets, a few root/camera keys, existing-scene edits, other catalog geometry/animals or existing uploaded assets. Read [native execution](references/native.md). No Node/three/FBX setup for this route. The live catalog defines available ToonKit features; the compiler's limits do not disable them.\n- **Compiled choreography:** multi-actor trajectories with measured contact, wall-as-floor roll, composed body motion or shared root/body slow motion. Read [production input](references/production-input.md) and [execution](references/execution.md). Read [source motion](references/body-motion.md) only for composed/retimed actions. Python/Node calculate the frames, binds and checks; do not handwrite dense arrays or replace a failed measured constraint with fabricated evidence.\n- No AI catalogs, balance, quotes or generation SSOT for either deterministic route. Generation remains a separately authorized stage.\n\n## Compiled route\n\n1. Read [conventions](references/conventions.md) and `references/examples/` first; do not study `scripts/` source (loading the launcher as [execution](references/execution.md) describes is expected). Write one compact `3dref-production-v2` spec from the user's references. Plan actors/camera first, then shot-relevant proxies and real support faces. Actor count is bounded by live capacity, not fixed at two.\n2. Compile in a fresh run directory. The package converts center/size to actual primitive pivots, bakes each distinct motion once, solves the wall-floor roll sign, culls irrelevant geometry, reduces keys and checks emitted interpolation. Fix concrete planning failures locally before writing: read only `<run>/diagnostic.json`, edit the spec, recompile (seconds). Default hold observations are advisory; explicit requested limits are enforced.\n3. Use the packaged runtime or [portable relay](references/direct.md), both over the same bridge. On Claude Code the relay parks MCP payloads through this skill's hook (`--spool`); never retype requests or responses. Skill hooks apply only to the main conversation, so run the relay there, not in a subagent. Keep the exact editor visible. Apply all base keys before pose overlays; wait for accepted pending work before new revisions.\n4. Compare exposed saved fields with the bundle. Check timing in the visible editor when safe readback omits it. Verify a fresh scene before Export. Never Save stale initial UI data over verified work.\n5. Export through the visible editor. Record whether a click actually occurred; readiness failure with confirmed no click may resume. Uncertain clicks must be reconciled with existing output before another attempt. Confirm the new source edge, exact output node and decoded duration/dimensions.\n\n## Scope and invariants\n\nThe compiler currently calibrates boxes, fresh unit-scale stock humans, one camera and the documented source motions. Other live MCP features use the native route with appropriately scoped checks; do not silently substitute the compiler's subset for the user's request. Existing compiled runs use their original matching runtime.\n\n`engine-profile.json` records calibrated geometry/interpolation and maintenance evidence. Web JS filenames are not execution requirements: ordinary frontend rebuilds or lazy loading must not stop production. Live catalog/scene incompatibility or a changed source FBX needed for baking requires concrete inspection of that operation. Do not reverse-engineer the website on every request.\n\nAll compiled actor frames need real finite support, a declared transfer, or bounded intended flight. Root/body share a time map for slow motion; root height is applied once. Walls-as-floor require projected outward normal screen-up. Bone markers and stride comparisons are approximations, not skin/sole IK or artistic certification.\n\nScene/canvas edits use MCP; browser work is editor/navigation, readiness, Save/Export and resulting media. No hidden app stores/private endpoints or substitute renderer. Preserve existing user work. Do not lower FPS, shorten or split the shot, spend generation credits, or waive a failed measured constraint just to reach Export.\n\nNo prior project, local test log or conversation is required. Compiled runs retain `spec.json`, `compiled.json`, `journal.jsonl`; failed plans retain diagnostics. Load helpers once and emit summaries, not arrays. Native runs retain only the plan/receipts needed for recovery. Development tests run at release time, not on user requests.\n\nKeep the result visible and group this run's source/output once. Return the canvas link, actual duration/dimensions, scene FPS and concise verified/unverified scope. Export success does not establish visual acceptance or R2V compatibility. No routine screenshot/contact-sheet or repeated playback loops.\n\nFor underspecified staging read [direction](references/direction.md); for a failed constraint or release maintenance read [verification](references/preflight.md). Read the [MCP contract](references/mcp-contract.md) for operations outside the compiler or changed connected declarations.\n"Full snapshot data
{
"description": "Create or edit ToonKit 3D camera/action previz when explicitly requested or selected for a production stage. Uses live MCP features and visible browser Export; deterministic and credit-free.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 293
},
{
"relative_path": "references/body-motion.md",
"size_in_bytes": 4551
},
{
"relative_path": "references/conventions.md",
"size_in_bytes": 8079
},
{
"relative_path": "references/direct.md",
"size_in_bytes": 7593
},
{
"relative_path": "references/direction.md",
"size_in_bytes": 1467
},
{
"relative_path": "references/examples/example-jump-slowmo.json",
"size_in_bytes": 3869
},
{
"relative_path": "references/examples/example-run-follow.json",
"size_in_bytes": 2106
},
{
"relative_path": "references/execution.md",
"size_in_bytes": 9320
},
{
"relative_path": "references/mcp-contract.md",
"size_in_bytes": 7042
},
{
"relative_path": "references/native.md",
"size_in_bytes": 4593
},
{
"relative_path": "references/preflight.md",
"size_in_bytes": 3398
},
{
"relative_path": "references/production-input.md",
"size_in_bytes": 7789
},
{
"relative_path": "scripts/bridge.js",
"size_in_bytes": 23742
},
{
"relative_path": "scripts/browser-export.js",
"size_in_bytes": 3606
},
{
"relative_path": "scripts/compiler.py",
"size_in_bytes": 4015
},
{
"relative_path": "scripts/direct.py",
"size_in_bytes": 5316
},
{
"relative_path": "scripts/engine-profile.json",
"size_in_bytes": 2374
},
{
"relative_path": "scripts/engine_v1.py",
"size_in_bytes": 3426
},
{
"relative_path": "scripts/geometry.py",
"size_in_bytes": 3339
},
{
"relative_path": "scripts/intent.py",
"size_in_bytes": 3658
},
{
"relative_path": "scripts/interactions.py",
"size_in_bytes": 3060
},
{
"relative_path": "scripts/journal.py",
"size_in_bytes": 4269
},
{
"relative_path": "scripts/locomotion.py",
"size_in_bytes": 2197
},
{
"relative_path": "scripts/mcp_plan.py",
"size_in_bytes": 860
},
{
"relative_path": "scripts/motion_bake.mjs",
"size_in_bytes": 14636
},
{
"relative_path": "scripts/plan.py",
"size_in_bytes": 4838
},
{
"relative_path": "scripts/preflight.py",
"size_in_bytes": 21540
},
{
"relative_path": "scripts/relay.mjs",
"size_in_bytes": 1829
},
{
"relative_path": "scripts/runtime.js",
"size_in_bytes": 7639
},
{
"relative_path": "scripts/scene_compiler.py",
"size_in_bytes": 16730
},
{
"relative_path": "scripts/spatial.py",
"size_in_bytes": 3482
},
{
"relative_path": "scripts/spool_hook.py",
"size_in_bytes": 9361
},
{
"relative_path": "scripts/support.py",
"size_in_bytes": 4610
},
{
"relative_path": "scripts/timewarp.mjs",
"size_in_bytes": 1067
},
{
"relative_path": "scripts/timewarp.py",
"size_in_bytes": 1898
}
],
"name": "3dref",
"skill_md_contents": "---\nname: 3dref\ndescription: Create or edit ToonKit 3D camera/action previz when explicitly requested or selected for a production stage. Uses live MCP features and visible browser Export; deterministic and credit-free.\nmetadata:\n short-description: Camera/action previz with efficient staging and export\nhooks:\n PreToolUse:\n - matcher: \"mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))\"\n hooks:\n - type: command\n timeout: 30\n command: >-\n i=$(cat); d=\"${TOONKIT_3DREF_SPOOL:-$HOME/.cache/toonkit-3dref/spool}\";\n case \"$i\" in *'\"3dref-spool:'*) ;; *) set -- \"$d\"/*.pending; [ -e \"$1\" ] || exit 0;; esac;\n for p in python3 python; do if \"$p\" -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then\n printf '%s' \"$i\" | \"$p\" \"${CLAUDE_PLUGIN_ROOT}/skills/3dref/scripts/spool_hook.py\"; exit 0; fi; done; exit 0\n PostToolUse:\n - matcher: \"mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))\"\n hooks:\n - type: command\n timeout: 30\n command: >-\n i=$(cat); d=\"${TOONKIT_3DREF_SPOOL:-$HOME/.cache/toonkit-3dref/spool}\";\n case \"$i\" in *'\"3dref-spool:'*) ;; *) set -- \"$d\"/*.pending; [ -e \"$1\" ] || exit 0;; esac;\n for p in python3 python; do if \"$p\" -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then\n printf '%s' \"$i\" | \"$p\" \"${CLAUDE_PLUGIN_ROOT}/skills/3dref/scripts/spool_hook.py\"; exit 0; fi; done; exit 0\n PostToolUseFailure:\n - matcher: \"mcp__.*toonkit.*__toonkit_(create_canvas|get_canvas|get_canvas_mutation|canvas_group_nodes|canvas_reference3d_(catalog|create|edit|get_scene))\"\n hooks:\n - type: command\n timeout: 30\n command: >-\n i=$(cat); d=\"${TOONKIT_3DREF_SPOOL:-$HOME/.cache/toonkit-3dref/spool}\";\n case \"$i\" in *'\"3dref-spool:'*) ;; *) set -- \"$d\"/*.pending; [ -e \"$1\" ] || exit 0;; esac;\n for p in python3 python; do if \"$p\" -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then\n printf '%s' \"$i\" | \"$p\" \"${CLAUDE_PLUGIN_ROOT}/skills/3dref/scripts/spool_hook.py\"; exit 0; fi; done; exit 0\n---\n\n# 3D reference previz\n\nDeliver an editable ToonKit scene and its playable source-linked video. Preserve requested duration, FPS, actors and camera intent. A location sheet supplies spatial relationships: build only surfaces, silhouettes and obstacles needed by the shot, using simple proxies. Do not recreate panorama detail.\n\n## Choose the smallest suitable route\n\n- **Native MCP:** simple continuous presets, a few root/camera keys, existing-scene edits, other catalog geometry/animals or existing uploaded assets. Read [native execution](references/native.md). No Node/three/FBX setup for this route. The live catalog defines available ToonKit features; the compiler's limits do not disable them.\n- **Compiled choreography:** multi-actor trajectories with measured contact, wall-as-floor roll, composed body motion or shared root/body slow motion. Read [production input](references/production-input.md) and [execution](references/execution.md). Read [source motion](references/body-motion.md) only for composed/retimed actions. Python/Node calculate the frames, binds and checks; do not handwrite dense arrays or replace a failed measured constraint with fabricated evidence.\n- No AI catalogs, balance, quotes or generation SSOT for either deterministic route. Generation remains a separately authorized stage.\n\n## Compiled route\n\n1. Read [conventions](references/conventions.md) and `references/examples/` first; do not study `scripts/` source (loading the launcher as [execution](references/execution.md) describes is expected). Write one compact `3dref-production-v2` spec from the user's references. Plan actors/camera first, then shot-relevant proxies and real support faces. Actor count is bounded by live capacity, not fixed at two.\n2. Compile in a fresh run directory. The package converts center/size to actual primitive pivots, bakes each distinct motion once, solves the wall-floor roll sign, culls irrelevant geometry, reduces keys and checks emitted interpolation. Fix concrete planning failures locally before writing: read only `<run>/diagnostic.json`, edit the spec, recompile (seconds). Default hold observations are advisory; explicit requested limits are enforced.\n3. Use the packaged runtime or [portable relay](references/direct.md), both over the same bridge. On Claude Code the relay parks MCP payloads through this skill's hook (`--spool`); never retype requests or responses. Skill hooks apply only to the main conversation, so run the relay there, not in a subagent. Keep the exact editor visible. Apply all base keys before pose overlays; wait for accepted pending work before new revisions.\n4. Compare exposed saved fields with the bundle. Check timing in the visible editor when safe readback omits it. Verify a fresh scene before Export. Never Save stale initial UI data over verified work.\n5. Export through the visible editor. Record whether a click actually occurred; readiness failure with confirmed no click may resume. Uncertain clicks must be reconciled with existing output before another attempt. Confirm the new source edge, exact output node and decoded duration/dimensions.\n\n## Scope and invariants\n\nThe compiler currently calibrates boxes, fresh unit-scale stock humans, one camera and the documented source motions. Other live MCP features use the native route with appropriately scoped checks; do not silently substitute the compiler's subset for the user's request. Existing compiled runs use their original matching runtime.\n\n`engine-profile.json` records calibrated geometry/interpolation and maintenance evidence. Web JS filenames are not execution requirements: ordinary frontend rebuilds or lazy loading must not stop production. Live catalog/scene incompatibility or a changed source FBX needed for baking requires concrete inspection of that operation. Do not reverse-engineer the website on every request.\n\nAll compiled actor frames need real finite support, a declared transfer, or bounded intended flight. Root/body share a time map for slow motion; root height is applied once. Walls-as-floor require projected outward normal screen-up. Bone markers and stride comparisons are approximations, not skin/sole IK or artistic certification.\n\nScene/canvas edits use MCP; browser work is editor/navigation, readiness, Save/Export and resulting media. No hidden app stores/private endpoints or substitute renderer. Preserve existing user work. Do not lower FPS, shorten or split the shot, spend generation credits, or waive a failed measured constraint just to reach Export.\n\nNo prior project, local test log or conversation is required. Compiled runs retain `spec.json`, `compiled.json`, `journal.jsonl`; failed plans retain diagnostics. Load helpers once and emit summaries, not arrays. Native runs retain only the plan/receipts needed for recovery. Development tests run at release time, not on user requests.\n\nKeep the result visible and group this run's source/output once. Return the canvas link, actual duration/dimensions, scene FPS and concise verified/unverified scope. Export success does not establish visual acceptance or R2V compatibility. No routine screenshot/contact-sheet or repeated playback loops.\n\nFor underspecified staging read [direction](references/direction.md); for a failed constraint or release maintenance read [verification](references/preflight.md). Read the [MCP contract](references/mcp-contract.md) for operations outside the compiler or changed connected declarations.\n"
}SHA-256 of public snapshot: e0894fe73459ec9af02bb1f07d3d08f272d1cc9bfe9b63db5ffc1cfb135160ee