[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PWCJK8RXC2BZ7P2Z5NGPBY":3,"skill-same:01M6PWCJK8RXC2BZ7P2Z5NGPBY":94},{"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":26,"publishedAt":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":64,"commitSha":65,"skillDirectory":66,"forksCount":67,"repositoryHtmlUrl":68,"repositoryHomepageUrl":69,"ownerHtmlUrl":70,"ownerBlogUrl":71,"ownerDescription":72,"updatedAt":73,"install":74,"resources":87},"01M6PWCJK8RXC2BZ7P2Z5NGPBY","gpt-image-sprite-sheet",null,"Make 2D game sprite sheets with GPT Image 2.6 on varg and turn them into game-ready files: a strict 4×4 sheet spec (16 frames, equal cells, fixed scale and ground line; credited to @SSSS_CRYPTOMAN, translated from Japanese), then scripts\u002Fslice.sh cuts the sheet into frames, keys out the background, puts every frame on one ground line, and writes a looping GIF, a clean atlas PNG and a JSON atlas (TexturePacker JSON Hash) for Phaser, with the Godot steps. Also covers the native GIF route and turning its frames into an atlas. Use when someone asks for a sprite sheet, a run, walk, idle or attack cycle, game character animation frames, a texture atlas, or Phaser or Godot sprites from an AI image. Not for chat stickers (gpt-image-sticker-pack), a single looping GIF for the web (gpt-image-gif) or pixel-art sprites (the model fails at pixel art).","hashgraph-online\u002Fawesome-codex-plugins","hashgraph-online","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F160371962?v=4","01M6CNB6NRJVNNGN14TR01Q6D3","HOL (Hashgraph Online)","01M6JT1HSKKG9V68KQAQGBA7XP",1554,"MIT","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FvargHQ\u002Fskills\u002Fgpt-image-sprite-sheet\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"image","gpt","gpt image sprite sheet","sheet","when","MCP","pixel-art","route","sticker","pixel","cycle","japanese","clean","files","Art","ready","model","game","Bash","Animation","api","2026-11-10 10:12:30",false,"---\nname: gpt-image-sprite-sheet\ndescription: >-\n  Make 2D game sprite sheets with GPT Image 2.6 on varg and turn them into game-ready files: a strict\n  4×4 sheet spec (16 frames, equal cells, fixed scale and ground line; credited to @SSSS_CRYPTOMAN,\n  translated from Japanese), then scripts\u002Fslice.sh cuts the sheet into frames, keys out the background,\n  puts every frame on one ground line, and writes a looping GIF, a clean atlas PNG and a JSON atlas\n  (TexturePacker JSON Hash) for Phaser, with the Godot steps. Also covers the native GIF route and\n  turning its frames into an atlas. Use when someone asks for a sprite sheet, a run, walk, idle or\n  attack cycle, game character animation frames, a texture atlas, or Phaser or Godot sprites from an\n  AI image. Not for chat stickers (gpt-image-sticker-pack), a single looping GIF for the web\n  (gpt-image-gif) or pixel-art sprites (the model fails at pixel art).\nlicense: MIT\nmetadata:\n  author: vargHQ\n  version: \"1.0.0\"\n  openclaw:\n    requires:\n      anyBins:\n        - curl\n        - magick\n    homepage: https:\u002F\u002Fvarg.ai\u002Fhow-to\ncompatibility: >-\n  Needs a VARG_API_KEY with curl (see the varg-ai skill) or the varg MCP connection\n  (https:\u002F\u002Fmcp.varg.ai\u002Fmcp). One sheet costs one image: 6 credits at 1024×1024 (measured 2026-11-05).\n  scripts\u002Fslice.sh needs bash and ImageMagick 7 (magick).\nallowed-tools: Bash(curl:*) Bash(jq:*) Bash(magick:*) Bash(bash:*) Read Write Edit\n---\n\n# Game sprite sheets with GPT Image 2.6\n\nPeople build small games from GPT Image sprite sheets: Higgsfield showed a junkyard game where 2.6\n\"kept consistent style across every GIF sprite sheet\"\n([@higgsfield_ai](https:\u002F\u002Fx.com\u002Fhiggsfield_ai\u002Fstatus\u002F2118152815625552235)), a first-person boxing game\n([post](https:\u002F\u002Fx.com\u002Fhiggsfield_ai\u002Fstatus\u002F2118154923070439759)) and two anime fighters kept consistent\n\"across every edit\" ([post](https:\u002F\u002Fx.com\u002Fhiggsfield_ai\u002Fstatus\u002F2118152221414306226)); a\n[full original game in 24 hours](https:\u002F\u002Fx.com\u002Fxikhar\u002Fstatus\u002F2117776295534997818) used GPT Image for four\nside views and level concept art (8.4k likes).\n\nTwo routes:\n\n| | PNG sheet (this skill's main route) | Native GIF (`output_format: \"gif\"`) |\n|---|---|---|\n| What you get | One PNG with a 4×4 grid you control | A GIF; the sheet is hidden |\n| Alpha | Full 8-bit with `background: \"transparent\"`, or a white background you key out | 1-bit (on\u002Foff), 256 colours |\n| Frame size | sheet ÷ 4: 256 px from 1024×1024, 512 px from 2048×2048 | ≤ 720 px for 16 frames ([gpt-image-gif](..\u002Fgpt-image-gif\u002F) section 1) |\n| Timing | Yours, in the engine | `frame_duration_ms` |\n| Cost | one image (6 credits at 1024², more for 2048², estimate first) | one image |\n\n## 1. The 4×4 sheet spec\n\n@SSSS_CRYPTOMAN wrote this for GPT Image 2.5, before native GIFs: 「簡単なプロンプトでもできますが、フレームがズレる場合が多かったので精度を上げた作り方です」\n(\"a simple prompt works too, but the frames often shifted, so this is a more precise method\";\n[post](https:\u002F\u002Fx.com\u002FSSSS_CRYPTOMAN\u002Fstatus\u002F2097797456117539136), 473 bookmarks). Attach\nthe character image in `files`. Original (Japanese):\n\n```\nこのキャラクターを参照して、ゲーム用の2Dアニメーションスプライトシートを作成して。\n内容は「?アクションを記入」\n\n1つの連続したアクションを、4列×4行の合計16フレームで表現する。\n\n【スプライトシート仕様】\n・正方形キャンバス\n・4列×4行、合計16フレーム\n・16個のセルは完全に同じ大きさ\n・各セルの上下左右に最低10pxの余白を確保する\n・枠線、グリッド線、数字、文字、記号、UIは一切不要\n・背景は全フレームで統一された単色の白\n・各フレームは左上から右へ、上段から下段へ、時間順に並べる\n\n【最重要：サイズと位置の固定】\n・16フレームすべてでキャラクターの表示倍率を統一する\n・カメラのズームイン、ズームアウトは禁止\n・足元の接地面の基準線を同じ高さに固定する\n・キャラクターの中心位置がフレームの前後で大きく移動しない\n・動きに必要な範囲だけポーズを変える\n\n【最重要：セル内に完全に収める】\n・髪、服、手足、武器、小物、エフェクト、残光、粒子を含むすべてを各セルの内部だけに収める\n・隣のセルにはみ出さない\n・余白10pxの安全領域を侵さない\n・アクションが大きくなっても、キャラクターを縮小して調整しない\n・必要ならエフェクトや腕の振り幅を控えめにして、セル内に収める\n\n【描画方針】\n・2Dゲーム用スプライトとして読みやすい、明快なシルエット\n・フレーム間で自然につながる動き\n・1枚絵ではなく、アニメーション素材として破綻のない連続性を重視\n・各フレームの描き込み密度、線、塗り、陰影を統一する\n```\n\nEnglish translation:\n\n```\nUsing this character as the reference, create a 2D animation sprite sheet for a game.\nAction: \"[? write the action here]\"\n\nShow one continuous action in 4 columns × 4 rows, 16 frames in total.\n\n[Sprite sheet spec]\n- Square canvas\n- 4 columns × 4 rows, 16 frames in total\n- All 16 cells exactly the same size\n- At least 10 px of margin on every side of each cell\n- No borders, grid lines, numbers, letters, symbols or UI at all\n- One plain white background, the same in every frame\n- Frames in time order: left to right, top row to bottom row\n\n[Most important: fixed size and position]\n- The same character scale in all 16 frames\n- No camera zoom in or out\n- The ground line under the feet fixed at the same height\n- The character's centre does not move much from one frame to the next\n- Change the pose only as much as the motion needs\n\n[Most important: everything inside its cell]\n- Hair, clothes, arms and legs, weapons, props, effects, afterimages and particles all stay inside their own cell\n- Nothing spills into the next cell\n- Nothing enters the 10 px safety margin\n- Even when the action gets bigger, do not shrink the character to make it fit\n- If needed, tone down effects and arm swings so they stay in the cell\n\n[Drawing]\n- A clear silhouette that reads well as a 2D game sprite\n- Motion that flows naturally from frame to frame\n- Not a single illustration: unbroken continuity as animation material comes first\n- The same detail, line, colour and shading in every frame\n```\n\nHis second step, in ChatGPT's Work mode: 「この画像を均等に分割してGIFを作成。各フレームの前後でキャラの立ち位置や設置面が合うように調整する。」\n\"Split this image evenly and make a GIF. Adjust it so the character's standing position and ground\ncontact match from frame to frame.\" That step is `scripts\u002Fslice.sh … --align` (section 3).\n\nSettings on varg: `aspect_ratio: \"1:1\"` (or `image_size: {\"width\": 2048, \"height\": 2048}` for 512-px\ncells), `quality: \"high\"`, `reasoning_effort: \"high\"`, `output_format: \"png\"`. For a transparent sheet,\nreplace the white-background line with \"transparent background\" and set `background: \"transparent\"`.\n\n**Our example:** a knight run cycle, 4×4 on 1024×1024 (made on varg with `gpt_image_2_6`,\n2026-11-04\u002F05, from a prompt based on this spec):\nhttps:\u002F\u002Fs3.varg.ai\u002Ffiles\u002F194b94d0-58ff-4e8b-91de-4f1959d04013\u002Ffile_e80336e6b820.png\n\n## 2. Make the sheet\n\n```json\ncall_tool({\n  \"tool\": \"image\",\n  \"input\": {\n    \"model\": \"gpt_image_2_6\",\n    \"prompt\": \"\u003Cthe spec above, with the action filled in>\",\n    \"files\": [{\"url\": \"https:\u002F\u002Fs3.varg.ai\u002Ffiles\u002F…\u002Fcharacter.png\"}],\n    \"aspect_ratio\": \"1:1\",\n    \"provider_options\": {\"fal\": {\"quality\": \"high\", \"reasoning_effort\": \"high\", \"output_format\": \"png\"}}\n  },\n  \"wait\": true\n})\n```\n\nWithout a character image, drop `files` and describe the character in one paragraph at the top. Over\nREST the same `input` goes to `POST https:\u002F\u002Fapi.varg.ai\u002Fv2\u002Fimage` ([gpt-image-2-6](..\u002Fgpt-image-2-6\u002F)\nsection 6). Make one sheet per action (run, idle, attack); keep the character image and the spec text\nidentical between them.\n\n## 3. Slice it: scripts\u002Fslice.sh\n\n```bash\nbash scripts\u002Fslice.sh knight_run.png 4 4                         # frames + GIF + atlas + JSON\nbash scripts\u002Fslice.sh knight_run.png 4 4 --key white --align     # white -> transparent, one ground line\nbash scripts\u002Fslice.sh knight_run.png 4 4 --frames 14 --fps 10    # only the first 14 cells\n```\n\n| Option | Does |\n|---|---|\n| `--key COLOR` | makes that background colour transparent (`--fuzz 8` % tolerance by default) |\n| `--align` | moves each frame up or down so the lowest drawn pixel sits on the median ground line |\n| `--center` | with `--align`, also centres each frame on the median horizontal centre |\n| `--fps N` | GIF speed and `meta.frameRate` in the JSON (default 12) |\n| `--frames N` | the first N cells, in reading order |\n| `--name`, `--out` | file prefix and output folder |\n\nIt writes `frames\u002FNAME_00.png …`, `NAME.gif` (loops forever), `NAME_atlas.png` (the processed frames in\nthe same grid) and `NAME.json`.\n\nTested 2026-11-05 on the knight sheet: 16 frames of 256×256, GIF at 12 fps (80 ms), 1024×1024 atlas;\nwith `--key white --align`, 79% of the atlas became transparent and 11 of 16 frames moved by 1-20 px.\nThe 20 px move was frame 3, where the knight is in the air. **Use `--align` for idle, walk and attack\ncycles; leave it off for runs and jumps with airborne frames.** Keying white can leave a light fringe\non dark backgrounds; raise `--fuzz` or ask for a transparent sheet.\n\n## 4. Use the atlas\n\n**Phaser 3**: the JSON is TexturePacker's \"JSON Hash\" format (a `frames` object keyed by frame name,\neach with `frame: {x, y, w, h}`), which `load.atlas` reads:\n\n```js\n\u002F\u002F preload()\nthis.load.atlas('knight', 'knight_run_atlas.png', 'knight_run.json');\n\u002F\u002F create()\nthis.anims.create({\n  key: 'run',\n  frames: this.anims.generateFrameNames('knight', { prefix: 'knight_run_', start: 0, end: 15, zeroPad: 2 }),\n  frameRate: 12,\n  repeat: -1\n});\nthis.add.sprite(400, 300, 'knight').play('run');\n```\n\n**Godot 4**: Godot does not read this JSON; it only needs the grid, which is in `meta.grid`. Add an\nAnimatedSprite2D, create a new SpriteFrames, use \"Add frames from sprite sheet\" on `NAME_atlas.png`, set\nHorizontal and Vertical to the grid (4 and 4), select all frames, set the speed (12 FPS) and turn on\nloop. Or use a Sprite2D with Hframes 4, Vframes 4 and animate `frame` from 0 to 15.\n\nWe checked the JSON structure and the frame rectangles, but did not run either engine.\n\n**From a native GIF**: lay the GIF's frames out as a strip, then slice the strip:\n\n```bash\nmagick run.gif -coalesce +append +repage run_strip.png\nbash scripts\u002Fslice.sh run_strip.png 9 1 --name run      # 9 frames in one row\n```\n\n(tested on the 6-frame LOL sticker GIF: a 4608×768 atlas with its transparency kept).\n\n## 5. Failure → fix\n\n| What you see | Fix |\n|---|---|\n| A limb, sword or effect crosses into the next cell | The \"everything inside its cell\" block; smaller swings; a bigger sheet (2048²) |\n| The character grows or shrinks between frames | \"The same character scale in all 16 frames\", \"No camera zoom\" |\n| The feet jump up and down | `--align` (not for airborne frames) |\n| The style or colours change between sheets | Same character image in `files`, same spec text; one action per sheet |\n| Still and moving parts in one sheet break ([@AM09_21](https:\u002F\u002Fx.com\u002FAM09_21\u002Fstatus\u002F2118143217434800219)) | One character per sheet; props and backgrounds as separate sprites |\n| Pixel art fails ([@Angaisb_](https:\u002F\u002Fx.com\u002FAngaisb_\u002Fstatus\u002F2118126997855674470)) | Flat cartoon frames; pixelate afterwards with nearest-neighbour scaling, or use a pixel-art tool |\n| Choppy cycle, missing in-between poses | Fewer, clearer key poses (e.g. 8 frames as 4×2); the engine can hold frames longer |\n| Background not quite white, keying leaves specks | Raise `--fuzz`, or generate with `background: \"transparent\"` |\n\n## Related skills\n\n[gpt-image-2-6](..\u002Fgpt-image-2-6\u002F) (model guide, prices, character turnaround sheets),\n[gpt-image-gif](..\u002Fgpt-image-gif\u002F) (native GIFs and their pixel budget),\n[gpt-image-markup-edit](..\u002Fgpt-image-markup-edit\u002F) (fix one bad frame in the sheet by circling it),\n`varg-character-design` (designing the character).\n","# Game sprite sheets with GPT Image 2.6\n\nPeople build small games from GPT Image sprite sheets: Higgsfield showed a junkyard game where 2.6\n\"kept consistent style across every GIF sprite sheet\"\n([@higgsfield_ai](https:\u002F\u002Fx.com\u002Fhiggsfield_ai\u002Fstatus\u002F2118152815625552235)), a first-person boxing game\n([post](https:\u002F\u002Fx.com\u002Fhiggsfield_ai\u002Fstatus\u002F2118154923070439759)) and two anime fighters kept consistent\n\"across every edit\" ([post](https:\u002F\u002Fx.com\u002Fhiggsfield_ai\u002Fstatus\u002F2118152221414306226)); a\n[full original game in 24 hours](https:\u002F\u002Fx.com\u002Fxikhar\u002Fstatus\u002F2117776295534997818) used GPT Image for four\nside views and level concept art (8.4k likes).\n\nTwo routes:\n\n| | PNG sheet (this skill's main route) | Native GIF (`output_format: \"gif\"`) |\n|---|---|---|\n| What you get | One PNG with a 4×4 grid you control | A GIF; the sheet is hidden |\n| Alpha | Full 8-bit with `background: \"transparent\"`, or a white background you key out | 1-bit (on\u002Foff), 256 colours |\n| Frame size | sheet ÷ 4: 256 px from 1024×1024, 512 px from 2048×2048 | ≤ 720 px for 16 frames ([gpt-image-gif](..\u002Fgpt-image-gif\u002F) section 1) |\n| Timing | Yours, in the engine | `frame_duration_ms` |\n| Cost | one image (6 credits at 1024², more for 2048², estimate first) | one image |\n\n## 1. The 4×4 sheet spec\n\n@SSSS_CRYPTOMAN wrote this for GPT Image 2.5, before native GIFs: 「簡単なプロンプトでもできますが、フレームがズレる場合が多かったので精度を上げた作り方です」\n(\"a simple prompt works too, but the frames often shifted, so this is a more precise method\";\n[post](https:\u002F\u002Fx.com\u002FSSSS_CRYPTOMAN\u002Fstatus\u002F2097797456117539136), 473 bookmarks). Attach\nthe character image in `files`. Original (Japanese):\n\n```\nこのキャラクターを参照して、ゲーム用の2Dアニメーションスプライトシートを作成して。\n内容は「?アクションを記入」\n\n1つの連続したアクションを、4列×4行の合計16フレームで表現する。\n\n【スプライトシート仕様】\n・正方形キャンバス\n・4列×4行、合計16フレーム\n・16個のセルは完全に同じ大きさ\n・各セルの上下左右に最低10pxの余白を確保する\n・枠線、グリッド線、数字、文字、記号、UIは一切不要\n・背景は全フレームで統一された単色の白\n・各フレームは左上から右へ、上段から下段へ、時間順に並べる\n\n【最重要：サイズと位置の固定】\n・16フレームすべてでキャラクターの表示倍率を統一する\n・カメラのズームイン、ズームアウトは禁止\n・足元の接地面の基準線を同じ高さに固定する\n・キャラクターの中心位置がフレームの前後で大きく移動しない\n・動きに必要な範囲だけポーズを変える\n\n【最重要：セル内に完全に収める】\n・髪、服、手足、武器、小物、エフェクト、残光、粒子を含むすべてを各セルの内部だけに収める\n・隣のセルにはみ出さない\n・余白10pxの安全領域を侵さない\n・アクションが大きくなっても、キャラクターを縮小して調整しない\n・必要ならエフェクトや腕の振り幅を控えめにして、セル内に収める\n\n【描画方針】\n・2Dゲーム用スプライトとして読みやすい、明快なシルエット\n・フレーム間で自然につながる動き\n・1枚絵ではなく、アニメーション素材として破綻のない連続性を重視\n・各フレームの描き込み密度、線、塗り、陰影を統一する\n```\n\nEnglish translation:\n\n```\nUsing this character as the reference, create a 2D animation sprite sheet for a game.\nAction: \"[? write the action here]\"\n\nShow one continuous action in 4 columns × 4 rows, 16 frames in total.\n\n[Sprite sheet spec]\n- Square canvas\n- 4 columns × 4 rows, 16 frames in total\n- All 16 cells exactly the same size\n- At least 10 px of margin on every side of each cell\n- No borders, grid lines, numbers, letters, symbols or UI at all\n- One plain white background, the same in every frame\n- Frames in time order: left to right, top row to bottom row\n\n[Most important: fixed size and position]\n- The same character scale in all 16 frames\n- No camera zoom in or out\n- The ground line under the feet fixed at the same height\n- The character's centre does not move much from one frame to the next\n- Change the pose only as much as the motion needs\n\n[Most important: everything inside its cell]\n- Hair, clothes, arms and legs, weapons, props, effects, afterimages and particles all stay inside their own cell\n- Nothing spills into the next cell\n- Nothing enters the 10 px safety margin\n- Even when the action gets bigger, do not shrink the character to make it fit\n- If needed, tone down effects and arm swings so they stay in the cell\n\n[Drawing]\n- A clear silhouette that reads well as a 2D game sprite\n- Motion that flows naturally from frame to frame\n- Not a single illustration: unbroken continuity as animation material comes first\n- The same detail, line, colour and shading in every frame\n```\n\nHis second step, in ChatGPT's Work mode: 「この画像を均等に分割してGIFを作成。各フレームの前後でキャラの立ち位置や設置面が合うように調整する。」\n\"Split this image evenly and make a GIF. Adjust it so the character's standing position and ground\ncontact match from frame to frame.\" That step is `scripts\u002Fslice.sh … --align` (section 3).\n\nSettings on varg: `aspect_ratio: \"1:1\"` (or `image_size: {\"width\": 2048, \"height\": 2048}` for 512-px\ncells), `quality: \"high\"`, `reasoning_effort: \"high\"`, `output_format: \"png\"`. For a transparent sheet,\nreplace the white-background line with \"transparent background\" and set `background: \"transparent\"`.\n\n**Our example:** a knight run cycle, 4×4 on 1024×1024 (made on varg with `gpt_image_2_6`,\n2026-11-04\u002F05, from a prompt based on this spec):\nhttps:\u002F\u002Fs3.varg.ai\u002Ffiles\u002F194b94d0-58ff-4e8b-91de-4f1959d04013\u002Ffile_e80336e6b820.png\n\n## 2. Make the sheet\n\n```json\ncall_tool({\n  \"tool\": \"image\",\n  \"input\": {\n    \"model\": \"gpt_image_2_6\",\n    \"prompt\": \"\u003Cthe spec above, with the action filled in>\",\n    \"files\": [{\"url\": \"https:\u002F\u002Fs3.varg.ai\u002Ffiles\u002F…\u002Fcharacter.png\"}],\n    \"aspect_ratio\": \"1:1\",\n    \"provider_options\": {\"fal\": {\"quality\": \"high\", \"reasoning_effort\": \"high\", \"output_format\": \"png\"}}\n  },\n  \"wait\": true\n})\n```\n\nWithout a character image, drop `files` and describe the character in one paragraph at the top. Over\nREST the same `input` goes to `POST https:\u002F\u002Fapi.varg.ai\u002Fv2\u002Fimage` ([gpt-image-2-6](..\u002Fgpt-image-2-6\u002F)\nsection 6). Make one sheet per action (run, idle, attack); keep the character image and the spec text\nidentical between them.\n\n## 3. Slice it: scripts\u002Fslice.sh\n\n```bash\nbash scripts\u002Fslice.sh knight_run.png 4 4                         # frames + GIF + atlas + JSON\nbash scripts\u002Fslice.sh knight_run.png 4 4 --key white --align     # white -> transparent, one ground line\nbash scripts\u002Fslice.sh knight_run.png 4 4 --frames 14 --fps 10    # only the first 14 cells\n```\n\n| Option | Does |\n|---|---|\n| `--key COLOR` | makes that background colour transparent (`--fuzz 8` % tolerance by default) |\n| `--align` | moves each frame up or down so the lowest drawn pixel sits on the median ground line |\n| `--center` | with `--align`, also centres each frame on the median horizontal centre |\n| `--fps N` | GIF speed and `meta.frameRate` in the JSON (default 12) |\n| `--frames N` | the first N cells, in reading order |\n| `--name`, `--out` | file prefix and output folder |\n\nIt writes `frames\u002FNAME_00.png …`, `NAME.gif` (loops forever), `NAME_atlas.png` (the processed frames in\nthe same grid) and `NAME.json`.\n\nTested 2026-11-05 on the knight sheet: 16 frames of 256×256, GIF at 12 fps (80 ms), 1024×1024 atlas;\nwith `--key white --align`, 79% of the atlas became transparent and 11 of 16 frames moved by 1-20 px.\nThe 20 px move was frame 3, where the knight is in the air. **Use `--align` for idle, walk and attack\ncycles; leave it off for runs and jumps with airborne frames.** Keying white can leave a light fringe\non dark backgrounds; raise `--fuzz` or ask for a transparent sheet.\n\n## 4. Use the atlas\n\n**Phaser 3**: the JSON is TexturePacker's \"JSON Hash\" format (a `frames` object keyed by frame name,\neach with `frame: {x, y, w, h}`), which `load.atlas` reads:\n\n```js\n\u002F\u002F preload()\nthis.load.atlas('knight', 'knight_run_atlas.png', 'knight_run.json');\n\u002F\u002F create()\nthis.anims.create({\n  key: 'run',\n  frames: this.anims.generateFrameNames('knight', { prefix: 'knight_run_', start: 0, end: 15, zeroPad: 2 }),\n  frameRate: 12,\n  repeat: -1\n});\nthis.add.sprite(400, 300, 'knight').play('run');\n```\n\n**Godot 4**: Godot does not read this JSON; it only needs the grid, which is in `meta.grid`. Add an\nAnimatedSprite2D, create a new SpriteFrames, use \"Add frames from sprite sheet\" on `NAME_atlas.png`, set\nHorizontal and Vertical to the grid (4 and 4), select all frames, set the speed (12 FPS) and turn on\nloop. Or use a Sprite2D with Hframes 4, Vframes 4 and animate `frame` from 0 to 15.\n\nWe checked the JSON structure and the frame rectangles, but did not run either engine.\n\n**From a native GIF**: lay the GIF's frames out as a strip, then slice the strip:\n\n```bash\nmagick run.gif -coalesce +append +repage run_strip.png\nbash scripts\u002Fslice.sh run_strip.png 9 1 --name run      # 9 frames in one row\n```\n\n(tested on the 6-frame LOL sticker GIF: a 4608×768 atlas with its transparency kept).\n\n## 5. Failure → fix\n\n| What you see | Fix |\n|---|---|\n| A limb, sword or effect crosses into the next cell | The \"everything inside its cell\" block; smaller swings; a bigger sheet (2048²) |\n| The character grows or shrinks between frames | \"The same character scale in all 16 frames\", \"No camera zoom\" |\n| The feet jump up and down | `--align` (not for airborne frames) |\n| The style or colours change between sheets | Same character image in `files`, same spec text; one action per sheet |\n| Still and moving parts in one sheet break ([@AM09_21](https:\u002F\u002Fx.com\u002FAM09_21\u002Fstatus\u002F2118143217434800219)) | One character per sheet; props and backgrounds as separate sprites |\n| Pixel art fails ([@Angaisb_](https:\u002F\u002Fx.com\u002FAngaisb_\u002Fstatus\u002F2118126997855674470)) | Flat cartoon frames; pixelate afterwards with nearest-neighbour scaling, or use a pixel-art tool |\n| Choppy cycle, missing in-between poses | Fewer, clearer key poses (e.g. 8 frames as 4×2); the engine can hold frames longer |\n| Background not quite white, keying leaves specks | Raise `--fuzz`, or generate with `background: \"transparent\"` |\n\n## Related skills\n\n[gpt-image-2-6](..\u002Fgpt-image-2-6\u002F) (model guide, prices, character turnaround sheets),\n[gpt-image-gif](..\u002Fgpt-image-gif\u002F) (native GIFs and their pixel budget),\n[gpt-image-markup-edit](..\u002Fgpt-image-markup-edit\u002F) (fix one bad frame in the sheet by circling it),\n`varg-character-design` (designing the character).\n",{"name":5,"license":15,"metadata":53,"description":7,"allowed-tools":62,"compatibility":63},{"author":54,"version":55,"openclaw":56},"vargHQ","1.0.0",{"homepage":57,"requires":58},"https:\u002F\u002Fvarg.ai\u002Fhow-to",{"anyBins":59},[60,61],"curl","magick","Bash(curl:*) Bash(jq:*) Bash(magick:*) Bash(bash:*) Read Write Edit","Needs a VARG_API_KEY with curl (see the varg-ai skill) or the varg MCP connection (https:\u002F\u002Fmcp.varg.ai\u002Fmcp). One sheet costs one image: 6 credits at 1024×1024 (measured 2026-11-05). scripts\u002Fslice.sh needs bash and ImageMagick 7 (magick).","main","e70ab1d8b0e24fbf8d3f58f35d71702abf856cfc","plugins\u002FvargHQ\u002Fskills\u002Fgpt-image-sprite-sheet",468,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins","https:\u002F\u002Fhol.org\u002Fplugins\u002Fbest-codex-plugins","https:\u002F\u002Fgithub.com\u002Fhashgraph-online","https:\u002F\u002Fhol.org","Open-source standards and developer tools for interoperable AI agents: discovery, identity, communication, payments, privacy and security.","2026-11-11 02:22:54",{"source":8,"skillName":5,"commands":75,"prompt":85,"zipAvailable":86},[76,79,82],{"tool":77,"command":78},"npx","npx skills add hashgraph-online\u002Fawesome-codex-plugins --skill gpt-image-sprite-sheet",{"tool":80,"command":81},"bunx","bunx skills add hashgraph-online\u002Fawesome-codex-plugins --skill gpt-image-sprite-sheet",{"tool":83,"command":84},"pnpm","pnpm dlx skills add hashgraph-online\u002Fawesome-codex-plugins --skill gpt-image-sprite-sheet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FvargHQ\u002Fskills\u002Fgpt-image-sprite-sheet\u002FSKILL.md",true,[88],{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Fslice.sh","SCRIPT","脚本",6927,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FvargHQ\u002Fskills\u002Fgpt-image-sprite-sheet\u002Fscripts\u002Fslice.sh",[95,121,146,171,192,206],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":99,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":48},"01M716A6ETNB9B1SQ3GXZC75VR","deja-search","deja-vu memory — search the user's past AI coding sessions with the deja CLI. Holds what they already settled and never wrote into the repo (naming rules, banned or already-tried tools, required checks before merge, preferred values, who owns what). Use before your first edit in a task, before you call a change done or ready to merge, before you recommend a tool, library, design or reviewer, before re-debugging an error that may already be solved, when they say 'didn't we fix this before', 'what did we decide about X' or 'I already have that', and before telling them something on this machine does not exist.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-search\u002FSKILL.md",[],[103,104,105,42,106,107,108,109,110,111,112,31,113,114,115,116,117,118,119,120],"search","deja search","error","never","memory","re","decide","fix","design","debugging","you","done","reviewer","io","change","cli","merge","past",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":99,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":48},"01M716A3J2W5SENSE9VGMXB375","deja-reflect","End-of-session reflection and memory curation with deja-vu. Review what was decided, what commands broke and what repaired them, and record durable project rules or decisions with deja remember so the next session starts with them.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-reflect\u002FSKILL.md",[],[128,129,130,131,107,132,133,134,135,136,137,138,139,116,140,141,142,143,144,145],"reflect","deja reflect","brew","remember","project rules","project","session","end","reflection","Rules","decisions","review","with","record","github","next","https","node",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":99,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":157,"publishedAt":48},"01M715T3RR4BAYSR57HPPTJ0PF","revid","Make, edit, export and post AI videos with Revid (revid.ai) through the Revid MCP server. Use whenever the user wants a short-form or long-form video made (from an idea, a script, a URL, an article, a PDF, a tweet, a product page, their own clips, or a song), wants to find what is going viral on TikTok, YouTube, Instagram or X before making something, wants to edit or re-export an existing Revid project, generate a standalone AI image or clip, make a series episode, or publish and schedule a finished video to connected social accounts. Covers setup (hosted MCP with OAuth, or an API key), the 36 tools, credits, polling and the rules for publishing. Routes to the more specific revid-* skills when one fits.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftmakersas\u002Frevid-skills\u002Fskills\u002Frevid\u002FSKILL.md",[152,155,156],{"categoryNo":153,"categoryName":154,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[148,158,159,160,161,162,133,163,108,164,165,32,166,31,167,27,168,169,47,170],"Video","short-form","standalone","PDF","viral","tiktok","short","social","song","URL","mcp server","schedule","publish",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":99,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":177,"publishedAt":48},"01M71569ZM2X3H5RBFK8PVKMK2","review-study","Review a QuestionPunk survey before launch for wording, answer choices, branching, and missing settings. Use for check my survey or review this draft before publishing.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fquestionpunk\u002Fcodex-plugin\u002Fskills\u002Freview-study\u002FSKILL.md",[],[178,179,139,180,181,182,183,184,185,186,187,188,189,190,191],"study","review study","for","answer","missing","survey","publishing","use","check","draft","settings","launch","my","branching",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":99,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":198,"publishedAt":48},"01M71567GV0C35YQBY0DPGR86B","manage-study","Find QuestionPunk studies, check status, publish an explicitly requested draft, or retrieve its participant link. Use for find my survey, publish this study, or how many people responded.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fquestionpunk\u002Fcodex-plugin\u002Fskills\u002Fmanage-study\u002FSKILL.md",[],[199,178,200,180,183,185,201,186,187,170,202,203,204,205,190],"manage study","manage","people","how","find","link","status",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":99,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":212,"publishedAt":48},"01M71565A8TCA01AZQZRGRYMFZ","create-study","Create a saved QuestionPunk survey draft from a research brief or edit specified questions. Use for requests such as make a customer feedback survey or shorten my onboarding study.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fquestionpunk\u002Fcodex-plugin\u002Fskills\u002Fcreate-study\u002FSKILL.md",[],[213,178,214,215,216,217,180,218,183,219,185,220,221,187,222,223,224,225,226,190],"create study","create","brief","as","feedback","customer feedback","research brief","shorten","saved","research","requests","customer","questions","edit"]