[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BXV30AK5MWKCF5XFSTCCH7":3,"skill-same:01M6BXV30AK5MWKCF5XFSTCCH7":74},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":12,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M6BXV30AK5MWKCF5XFSTCCH7","sandbox-game",null,"Build a complete native game document with entities, scripts and level geometry, then save the draft in one edit","nodetool-ai\u002Fnodetool","nodetool-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F164873569?v=4","01M6BXPFDW36K9K1MR8ZH63HG2","nodetool.ai","01M6BXPFJ893XM219GQN60B0WK",633,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsandbox-packs\u002Fsandbox-game\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"sandbox","game","sandbox game","save","native game","edit","document","build","draft","geometry","scripts","complete","native","with","entities","2026-11-10 10:12:30",false,"---\nname: sandbox-game\ndescription: Build a complete native game document with entities, scripts and level geometry, then save the draft in one edit\n---\n\n# Games as code\n\nImport `@nodetool-ai\u002Fsandbox-game` in a game chat, CodeAct action or JS script.\nIt creates plain game documents for `nodetool.games`. Build geometry in local\nloops and save the entire draft with one `set_document` edit. The server\nvalidates the schema and references before writing. It retains the game's\nstored ID and revision. Publishing requires a separate request.\n\nThe helpers follow the shipped game document schema. Position, size and\ngravity use world units. Simulation runs at 60 ticks per second. Assets must\nalready be installed or use the built-in asset bindings.\n\n## Build and save a level\n\n```js\nimport { game, entity, script, registerAssets, fill, plank, arc, saveGame }\n  from \"@nodetool-ai\u002Fsandbox-game\";\n\nconst document = game({ pixelsPerUnit: 48 });\nregisterAssets(document, {\n  stone: { assetId: \"builtin:wall\", digest: \"builtin:wall-v1\", width: 32, height: 32 },\n  gem: { assetId: \"builtin:gem\", digest: \"builtin:gem-v1\", width: 32, height: 32 }\n});\nconst tiles = [];\nfill(tiles, 0, -2, 80, 2);\nplank(tiles, 4, 2, 8, { oneWay: true });\nconst level = document.scenes[0];\nlevel.entities.push(entity(\"terrain\", 0, 0, {\n  tilemap: { assetId: \"stone\", tiles, solid: true, layer: 0 }\n}));\nfor (const [index, point] of arc(8, 3, 3, 2, 7).entries()) {\n  level.entities.push(entity(`gem-${index}`, point.x, point.y, {\n    sprite: { assetId: \"gem\", width: 0.5, height: 0.5 },\n    collider2d: { width: 0.5, height: 0.5, sensor: true },\n    behaviors: [{ kind: \"collectible\", score: 1 }]\n  }));\n}\nlevel.entities.push(entity(\"camera\", 8, 2, { camera2d: { width: 16, height: 9 } }));\nlevel.entities.push(entity(\"logic\", 0, 0, {\n  behaviors: [script(({ tick }) => ({ state: {}, commands: tick === 600 ? [{ kind: \"emit\", event: \"ready\" }] : [] }))]\n}));\nconst saved = await saveGame({ name: \"Arc study\", document }, {\n  games: nodetool.games, project_id: \"\u003Cowned-project-id>\"\n});\nawait output(\"game_id\", saved.game_id);\n```\n\nAdd a player and its controller before calling a level playable. Read\n`nodetool.games.getExample(\"kindle\")` for a complete platformer document and\nload the `native-game` and `game-direction` skills for the runtime contract\nand craft requirements.\n\n## Helpers\n\n| Export | Contract |\n|---|---|\n| `game(options = {})` | Creates a schema version 2 document. Defaults to one empty `level` scene, 32 pixels per unit and left\u002Fright\u002Fup\u002Fdown\u002Fspace actions. Pass scenes, assets, collision layers and render effects directly. |\n| `entity(id, x = 0, y = 0, options = {})` | Creates an entity with a complete transform and behavior list. Pass sprite, body, collider, animator, camera, light and prefab settings in options. |\n| `script(source, options = {})` | Creates a script behavior from a source string or function. Defaults to 16 commands and 8 ms per tick. Functions cannot close over the builder's variables. |\n| `registerAssets(document, bindings)` | Copies slot bindings into the document. Sets pivot and sampling defaults. Audio and font dimensions default to 1×1. Images require their actual dimensions. This does not install files. |\n| `fill(tiles, x, y, cols, rows, options = {})` | Appends tile centres to an array. The first centre is `(x,y)`. Spacing is `width` and `height`, which default to `size` or 1. Options also carry frame, solid and oneWay fields. |\n| `plank(tiles, x, y, cols, options = {})` | Appends one horizontal row using `fill`. |\n| `arc(x, y, radiusX, radiusY, points, from = 0, to = Math.PI)` | Returns evenly spaced elliptical arc positions including both endpoints. Angles use radians. One point uses `from`. |\n| `saveGame({name, document}, options)` | Pass `{games: nodetool.games, project_id}` to create a game and save its draft. Pass `{games, game_id, base_updated_at}` to replace an existing draft. Returns game_id, revision and draft_updated_at. Refused writes and conflicts throw. |\n| `constructGame({inputs, seed}, build)` | Runs an explicit callback with `inputs` and `builder`, returning `{document, program}` plus retained parameters, prefabs and instance relationships. Preparation results must be literal JSON inputs. Use stable scene and entity IDs. |\n\nFor an existing draft, read its `draft_updated_at` and pass it as\n`base_updated_at`. Save all scene references and bindings together. Invalid\nasset references, duplicate entities or script budget violations reject the\nwhole edit. A failed replacement leaves the previous draft intact.\n\n## Retained construction\n\nUse an explicit callback for construction that can run again without preparation.\nThe callback receives `inputs` and `builder` and returns a native document. It\ncannot close over variables in the authoring session. Keep runtime script\nbehavior source separate from this construction body.\n\n```js\nimport { constructGame, saveGame } from \"@nodetool-ai\u002Fsandbox-game\";\nconst bundle = constructGame({ seed: 17, inputs: { speed: 4 } }, (inputs, builder) => {\n  const speed = builder.parameter(\"speed\", {type: \"number\", default: 4, min: 1, max: 10});\n  const document = builder.game();\n  builder.prefab(\"marker\", builder.entity(\"definition\", 0, 0));\n  builder.instance(document.scenes[0], \"north-marker\", \"marker\", {\n    transform2d: {x: speed, y: 0, rotation: 0, scaleX: 1, scaleY: 1}\n  });\n  return document;\n});\nawait saveGame({ name: \"Retained study\", ...bundle }, {\n  games: nodetool.games, project_id: \"\u003Cowned-project-id>\"\n});\n```\n\n`builder` includes the ordinary document helpers plus `parameter`, `prefab`,\n`instance`, and seeded `random`. Parameter types are number, string and\nboolean, enum, vector2 and vector3. Numeric parameters accept min and max.\nEnum parameters declare `values`. Vector parameters use arrays of two or\nthree finite numbers. Prefabs are retained in the\nconstruction source and emit native entities through stable instance keys.\nInstance component overrides merge individual object fields with the prefab.\nArrays replace the complete inherited array. Preparation inputs are copied\nbefore the callback runs, so mutating a template does not alter retained inputs.\nDuplicate scene, entity and prefab keys reject the build.\n\nSaving a bundle with `program` first previews a hermetic rebuild and checks\nthat it reproduces `document`. Applying the candidate checks the draft has\nnot changed since preview. Rebuilds cannot fetch, install assets, generate\nresources, access secrets or read the workspace. Pass accepted asset\nbindings through `inputs`. Use `builder.random()` for authoring randomness.\nThe construction seed is independent of the play session seed.\n","# Games as code\n\nImport `@nodetool-ai\u002Fsandbox-game` in a game chat, CodeAct action or JS script.\nIt creates plain game documents for `nodetool.games`. Build geometry in local\nloops and save the entire draft with one `set_document` edit. The server\nvalidates the schema and references before writing. It retains the game's\nstored ID and revision. Publishing requires a separate request.\n\nThe helpers follow the shipped game document schema. Position, size and\ngravity use world units. Simulation runs at 60 ticks per second. Assets must\nalready be installed or use the built-in asset bindings.\n\n## Build and save a level\n\n```js\nimport { game, entity, script, registerAssets, fill, plank, arc, saveGame }\n  from \"@nodetool-ai\u002Fsandbox-game\";\n\nconst document = game({ pixelsPerUnit: 48 });\nregisterAssets(document, {\n  stone: { assetId: \"builtin:wall\", digest: \"builtin:wall-v1\", width: 32, height: 32 },\n  gem: { assetId: \"builtin:gem\", digest: \"builtin:gem-v1\", width: 32, height: 32 }\n});\nconst tiles = [];\nfill(tiles, 0, -2, 80, 2);\nplank(tiles, 4, 2, 8, { oneWay: true });\nconst level = document.scenes[0];\nlevel.entities.push(entity(\"terrain\", 0, 0, {\n  tilemap: { assetId: \"stone\", tiles, solid: true, layer: 0 }\n}));\nfor (const [index, point] of arc(8, 3, 3, 2, 7).entries()) {\n  level.entities.push(entity(`gem-${index}`, point.x, point.y, {\n    sprite: { assetId: \"gem\", width: 0.5, height: 0.5 },\n    collider2d: { width: 0.5, height: 0.5, sensor: true },\n    behaviors: [{ kind: \"collectible\", score: 1 }]\n  }));\n}\nlevel.entities.push(entity(\"camera\", 8, 2, { camera2d: { width: 16, height: 9 } }));\nlevel.entities.push(entity(\"logic\", 0, 0, {\n  behaviors: [script(({ tick }) => ({ state: {}, commands: tick === 600 ? [{ kind: \"emit\", event: \"ready\" }] : [] }))]\n}));\nconst saved = await saveGame({ name: \"Arc study\", document }, {\n  games: nodetool.games, project_id: \"\u003Cowned-project-id>\"\n});\nawait output(\"game_id\", saved.game_id);\n```\n\nAdd a player and its controller before calling a level playable. Read\n`nodetool.games.getExample(\"kindle\")` for a complete platformer document and\nload the `native-game` and `game-direction` skills for the runtime contract\nand craft requirements.\n\n## Helpers\n\n| Export | Contract |\n|---|---|\n| `game(options = {})` | Creates a schema version 2 document. Defaults to one empty `level` scene, 32 pixels per unit and left\u002Fright\u002Fup\u002Fdown\u002Fspace actions. Pass scenes, assets, collision layers and render effects directly. |\n| `entity(id, x = 0, y = 0, options = {})` | Creates an entity with a complete transform and behavior list. Pass sprite, body, collider, animator, camera, light and prefab settings in options. |\n| `script(source, options = {})` | Creates a script behavior from a source string or function. Defaults to 16 commands and 8 ms per tick. Functions cannot close over the builder's variables. |\n| `registerAssets(document, bindings)` | Copies slot bindings into the document. Sets pivot and sampling defaults. Audio and font dimensions default to 1×1. Images require their actual dimensions. This does not install files. |\n| `fill(tiles, x, y, cols, rows, options = {})` | Appends tile centres to an array. The first centre is `(x,y)`. Spacing is `width` and `height`, which default to `size` or 1. Options also carry frame, solid and oneWay fields. |\n| `plank(tiles, x, y, cols, options = {})` | Appends one horizontal row using `fill`. |\n| `arc(x, y, radiusX, radiusY, points, from = 0, to = Math.PI)` | Returns evenly spaced elliptical arc positions including both endpoints. Angles use radians. One point uses `from`. |\n| `saveGame({name, document}, options)` | Pass `{games: nodetool.games, project_id}` to create a game and save its draft. Pass `{games, game_id, base_updated_at}` to replace an existing draft. Returns game_id, revision and draft_updated_at. Refused writes and conflicts throw. |\n| `constructGame({inputs, seed}, build)` | Runs an explicit callback with `inputs` and `builder`, returning `{document, program}` plus retained parameters, prefabs and instance relationships. Preparation results must be literal JSON inputs. Use stable scene and entity IDs. |\n\nFor an existing draft, read its `draft_updated_at` and pass it as\n`base_updated_at`. Save all scene references and bindings together. Invalid\nasset references, duplicate entities or script budget violations reject the\nwhole edit. A failed replacement leaves the previous draft intact.\n\n## Retained construction\n\nUse an explicit callback for construction that can run again without preparation.\nThe callback receives `inputs` and `builder` and returns a native document. It\ncannot close over variables in the authoring session. Keep runtime script\nbehavior source separate from this construction body.\n\n```js\nimport { constructGame, saveGame } from \"@nodetool-ai\u002Fsandbox-game\";\nconst bundle = constructGame({ seed: 17, inputs: { speed: 4 } }, (inputs, builder) => {\n  const speed = builder.parameter(\"speed\", {type: \"number\", default: 4, min: 1, max: 10});\n  const document = builder.game();\n  builder.prefab(\"marker\", builder.entity(\"definition\", 0, 0));\n  builder.instance(document.scenes[0], \"north-marker\", \"marker\", {\n    transform2d: {x: speed, y: 0, rotation: 0, scaleX: 1, scaleY: 1}\n  });\n  return document;\n});\nawait saveGame({ name: \"Retained study\", ...bundle }, {\n  games: nodetool.games, project_id: \"\u003Cowned-project-id>\"\n});\n```\n\n`builder` includes the ordinary document helpers plus `parameter`, `prefab`,\n`instance`, and seeded `random`. Parameter types are number, string and\nboolean, enum, vector2 and vector3. Numeric parameters accept min and max.\nEnum parameters declare `values`. Vector parameters use arrays of two or\nthree finite numbers. Prefabs are retained in the\nconstruction source and emit native entities through stable instance keys.\nInstance component overrides merge individual object fields with the prefab.\nArrays replace the complete inherited array. Preparation inputs are copied\nbefore the callback runs, so mutating a template does not alter retained inputs.\nDuplicate scene, entity and prefab keys reject the build.\n\nSaving a bundle with `program` first previews a hermetic rebuild and checks\nthat it reproduces `document`. Applying the candidate checks the draft has\nnot changed since preview. Rebuilds cannot fetch, install assets, generate\nresources, access secrets or read the workspace. Pass accepted asset\nbindings through `inputs`. Use `builder.random()` for authoring randomness.\nThe construction seed is independent of the play session seed.\n",{"name":5,"description":7},"main","c7226baa82daca42a19a5855c116544f97aa8bac","packages\u002Fsandbox-packs\u002Fsandbox-game",90,"https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool","https:\u002F\u002Fnodetool.ai\u002F","https:\u002F\u002Fgithub.com\u002Fnodetool-ai","No-code AI development","2026-11-14 03:12:08",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add nodetool-ai\u002Fnodetool --skill sandbox-game",{"tool":54,"command":55},"bunx","bunx skills add nodetool-ai\u002Fnodetool --skill sandbox-game",{"tool":57,"command":58},"pnpm","pnpm dlx skills add nodetool-ai\u002Fnodetool --skill sandbox-game","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsandbox-packs\u002Fsandbox-game\u002FSKILL.md",true,[62,68],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"package.json","REFERENCE","参考文档",789,"https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsandbox-packs\u002Fsandbox-game\u002Fpackage.json",{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"sandbox\u002Findex.js","SCRIPT","脚本",9948,"https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsandbox-packs\u002Fsandbox-game\u002Fsandbox\u002Findex.js",[75,112,142,156,172,197],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":91,"publishedAt":34},"01M6BY4D93R0Q9400ZHJ04DXP1","nodetool","Use the NodeTool MCP server to build, validate, run, and debug visual AI workflows, and to work with assets, collections, and jobs. Use when the user mentions NodeTool or asks for a workflow graph, a node, or a media generation run on their NodeTool server.","https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fplugins\u002Fchatgpt\u002Fnodetool\u002Fskills\u002Fnodetool\u002FSKILL.md",[81,86],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[77,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,32,110,111],"MCP","mcp server","workflow","workflows","validate","debug","run","graph","server","Media","assets","work","node","use","visual","generation","collections","media generation","for","when",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":121,"publishedAt":34},"01M6BY4AEB05ZPBRVD078ATR2H","wan-2-6-prompting","Prompt Alibaba's Wan 2.6 video — text-to-video with a global style line plus timing-bracketed shots, and image-to-video that describes only what changes over time. Covers the shot-mode switch per provider, the prompt budget, negative prompts, motion intensity wording, audio input and prompt expansion. Use whenever the model id names a Wan 2.6 video route (alibaba\u002Fwan-2.6\u002Ftext-to-video, alibaba\u002Fwan-2.6\u002Fimage-to-video, wan-video\u002Fwan-2.6-t2v, wan-video\u002Fwan-2.6-i2v, wan-video\u002Fwan2.6-i2v-flash) on generate_video, animate_image or a TextToVideo node. Not for Wan 2.5 or 2.7, or the Wan 2.6 image routes.","https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsystem-skills\u002Fwan-2-6-prompting\u002FSKILL.md",[118],{"categoryNo":119,"categoryName":120,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000016","图像与多媒体",[122,123,124,125,126,127,128,129,130,131,132,104,133,134,135,136,137,138,139,140,141],"wan 2 6 prompting","prompting","image","generate","Budget","Video","Audio","text","animate","model","flash","only","route","time","line","input","text-to-video","image-to-video","mode","expansion",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":150,"publishedAt":34},"01M6BY47T4748ZG5ZMTAR97ZWZ","video-workflow","Build a reusable NodeTool video workflow for batches or repeated inputs. For a single finished piece, use a storyboard skill.","https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsystem-skills\u002Fvideo-workflow\u002FSKILL.md",[148,149],{"categoryNo":119,"categoryName":120,"taxonomyType":84,"taxonomyTypeDesc":85},{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[94,127,151,77,105,152,153,26,154,110,155],"video workflow","reusable","storyboard","batches","single",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":163,"publishedAt":34},"01M6BY4587N2SYN315SXGEMZC3","video-clone","Analyze a reference video and recreate its shot structure with a new product or cast in NodeTool.","https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsystem-skills\u002Fvideo-clone\u002FSKILL.md",[162],{"categoryNo":119,"categoryName":120,"taxonomyType":84,"taxonomyTypeDesc":85},[127,164,165,166,167,77,168,169,170,32,171],"video clone","clone","product","analyze","reference","cast","structure","new",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":179,"publishedAt":34},"01M6BY4257C2KQYYMD9EK6DK8E","video-audio-continuity","Keep sound continuous across a multi-scene piece cut from generated video — why one clip per scene hard-cuts the audio at every boundary, when to write all the scenes into a single generation instead, the sound-design vocabulary that survives a provider's copyright filter, and how to check the length, the aspect ratio and the mix of what came back. Use when a piece has more than one scene and the video model writes its own audio (Seedance 2, Veo 3, MiniMax H3, Kling 2.6 and later), or when a cut's sound drops out at the shot changes.","https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsystem-skills\u002Fvideo-audio-continuity\u002FSKILL.md",[178],{"categoryNo":119,"categoryName":120,"taxonomyType":84,"taxonomyTypeDesc":85},[127,128,180,181,182,183,184,185,131,186,187,188,189,190,191,192,193,194,195,196,111],"video audio continuity","continuity","design","boundary","how","why","write","generated","later","back","across","cut","how to","filter","mix","at","veo 3",{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":204,"publishedAt":34},"01M6BY3ZANBSQMZRH4MG55R8Z7","veo-3-prompting","Prompt Google's Veo 3 video line — the five-element shot\u002Fsetting\u002Fsubject\u002Faction\u002Fdialogue structure, the cinematography vocabulary it reads directly, duration and aspect-ratio tradeoffs, the audio and auto-fix switches per provider, and the fixes for visual drift, temporal inconsistency and audio mismatch. Use whenever the model id contains veo3 or veo-3 (fal-ai\u002Fveo3.1 and its fast, lite, image-to-video, first-last-frame and reference-to-video routes, fal-ai\u002Fveo3\u002Fimage-to-video, google\u002Fveo3.1 on atlascloud, google\u002Fveo-3 and google\u002Fveo-3.1 on replicate, kie's veo-3-1, and Gemini's own veo-3.1-generate-preview) on generate_video, animate_image, generate_video_from_references or a TextToVideo node.","https:\u002F\u002Fgithub.com\u002Fnodetool-ai\u002Fnodetool\u002Fblob\u002Fmain\u002Fpackages\u002Fsystem-skills\u002Fveo-3-prompting\u002FSKILL.md",[203],{"categoryNo":119,"categoryName":120,"taxonomyType":84,"taxonomyTypeDesc":85},[205,206,123,196,124,207,208,125,209,210,127,128,130,131,211,212,213,214,215,216,217,170,218,219,220],"veo 3 prompting","veo","google","gemini","fast","first","fal","kie","replicate","fix","auto","references","drift","preview","element","auto-fix"]