{
  "schemaVersion": 1,
  "metadata": {
    "assetType": "reference-generated-pixel-sprite-atlas",
    "generatedAt": "2026-11-08T15:23:41.087Z",
    "alphaThreshold": 96,
    "frameOrder": "row-major",
    "defaultScale": 0.66,
    "durationUnit": "seconds",
    "fpsUnit": "source-frames per second",
    "rawImageEditing": false,
    "generationCommand": "node scripts/check-reference-atlas.mjs --write",
    "validationCommand": "node scripts/check-reference-atlas.mjs",
    "drawFormula": "drawImage(sheet, frame.x, frame.y, frame.w, frame.h, worldX - frame.anchorX * character.scale, worldY - frame.anchorY * character.scale, frame.w * character.scale, frame.h * character.scale)",
    "note": "Both characters use the same scale. The sister is naturally smaller in the source artwork. Bounds do not drive per-frame scaling or horizontal weapon-centred registration."
  },
  "brother": {
    "name": "陸川",
    "image": "/assets/characters/brother-reference-atlas.png",
    "original": "/assets/characters/brother-original.png",
    "scale": 0.66,
    "scaleMode": "uniform-whole-character",
    "alphaThreshold": 96,
    "sheet": {
      "width": 1536,
      "height": 1024,
      "columns": 6,
      "rows": 4,
      "cellWidth": 256,
      "cellHeight": 256,
      "frameCount": 24
    },
    "registration": {
      "anchorX": 128,
      "rowBaselineY": [
        232,
        221,
        222,
        223
      ],
      "baselineSampleFrames": [
        [
          0,
          1
        ],
        [
          7,
          8
        ],
        [
          13,
          14,
          15,
          16,
          17
        ],
        [
          18,
          19,
          20,
          21
        ]
      ],
      "maxGroundContactCorrectionPx": 4,
      "anchorSpace": "cell-local pixel centres",
      "boundsSpace": "cell-local; x/y inclusive and w/h pixel counts",
      "airborneFrames": [
        5,
        9,
        11,
        12
      ],
      "climbingFrames": [
        22,
        23
      ],
      "perFrameScaling": false
    },
    "provenance": {
      "creationMethod": "Reference-guided built-in image_gen; raw output preserved without image editing.",
      "reference": {
        "file": "brother-original.png",
        "url": "/assets/characters/brother-original.png",
        "sha256": "9a06ff9c3cf9037a280d1e79802e3e948dc31d749a06da2f26262e78fa145d5c",
        "bytes": 50295,
        "width": 139,
        "height": 249
      },
      "atlas": {
        "file": "brother-reference-atlas.png",
        "url": "/assets/characters/brother-reference-atlas.png",
        "sha256": "613e792419170dc19a28a72cd34e41ba113355a5b7fa6d11a33e25851eda8d0c",
        "bytes": 1793001,
        "width": 1536,
        "height": 1024,
        "bitDepth": 8,
        "pngColorType": 6
      },
      "idleFrameIsOriginal": false,
      "rawPixelsUnmodified": true
    },
    "frames": [
      {
        "index": 0,
        "pose": "idle",
        "row": 0,
        "column": 0,
        "x": 0,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 79,
          "y": 46,
          "w": 104,
          "h": 187
        },
        "boundsRightExclusive": 183,
        "boundsBottomExclusive": 233,
        "validPixelCount": 9672,
        "nonzeroAlphaPixelCount": 17026,
        "lowAlphaPixelCount": 7354,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 79,
          "top": 46,
          "right": 73,
          "bottom": 23
        },
        "anchorX": 128,
        "anchorY": 232,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 232,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 1,
        "pose": "idle_breath",
        "row": 0,
        "column": 1,
        "x": 256,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 79,
          "y": 46,
          "w": 105,
          "h": 187
        },
        "boundsRightExclusive": 184,
        "boundsBottomExclusive": 233,
        "validPixelCount": 9504,
        "nonzeroAlphaPixelCount": 16215,
        "lowAlphaPixelCount": 6711,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 79,
          "top": 46,
          "right": 72,
          "bottom": 23
        },
        "anchorX": 128,
        "anchorY": 232,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 232,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 2,
        "pose": "run_right_contact",
        "row": 0,
        "column": 2,
        "x": 512,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 66,
          "y": 51,
          "w": 124,
          "h": 178
        },
        "boundsRightExclusive": 190,
        "boundsBottomExclusive": 229,
        "validPixelCount": 8816,
        "nonzeroAlphaPixelCount": 16131,
        "lowAlphaPixelCount": 7315,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 66,
          "top": 51,
          "right": 66,
          "bottom": 27
        },
        "anchorX": 128,
        "anchorY": 228,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 232,
        "anchorCorrectionY": -4,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 3,
        "pose": "run_right_down",
        "row": 0,
        "column": 3,
        "x": 768,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 75,
          "y": 53,
          "w": 99,
          "h": 179
        },
        "boundsRightExclusive": 174,
        "boundsBottomExclusive": 232,
        "validPixelCount": 7964,
        "nonzeroAlphaPixelCount": 13446,
        "lowAlphaPixelCount": 5482,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 75,
          "top": 53,
          "right": 82,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 232,
        "anchorCorrectionY": -1,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 4,
        "pose": "run_right_passing",
        "row": 0,
        "column": 4,
        "x": 1024,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 73,
          "y": 52,
          "w": 105,
          "h": 180
        },
        "boundsRightExclusive": 178,
        "boundsBottomExclusive": 232,
        "validPixelCount": 8554,
        "nonzeroAlphaPixelCount": 14455,
        "lowAlphaPixelCount": 5901,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 73,
          "top": 52,
          "right": 78,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 232,
        "anchorCorrectionY": -1,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 5,
        "pose": "run_right_up",
        "row": 0,
        "column": 5,
        "x": 1280,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 75,
          "y": 51,
          "w": 102,
          "h": 179
        },
        "boundsRightExclusive": 177,
        "boundsBottomExclusive": 230,
        "validPixelCount": 8658,
        "nonzeroAlphaPixelCount": 14387,
        "lowAlphaPixelCount": 5729,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 75,
          "top": 51,
          "right": 79,
          "bottom": 26
        },
        "anchorX": 128,
        "anchorY": 232,
        "anchorMode": "row-baseline",
        "grounding": "airborne",
        "rowBaselineY": 232,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": -3,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 6,
        "pose": "run_left_contact",
        "row": 1,
        "column": 0,
        "x": 0,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 60,
          "y": 49,
          "w": 134,
          "h": 170
        },
        "boundsRightExclusive": 194,
        "boundsBottomExclusive": 219,
        "validPixelCount": 8999,
        "nonzeroAlphaPixelCount": 16058,
        "lowAlphaPixelCount": 7059,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 60,
          "top": 49,
          "right": 62,
          "bottom": 37
        },
        "anchorX": 128,
        "anchorY": 218,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 221,
        "anchorCorrectionY": -3,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 7,
        "pose": "run_left_down",
        "row": 1,
        "column": 1,
        "x": 256,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 78,
          "y": 51,
          "w": 98,
          "h": 171
        },
        "boundsRightExclusive": 176,
        "boundsBottomExclusive": 222,
        "validPixelCount": 7455,
        "nonzeroAlphaPixelCount": 13400,
        "lowAlphaPixelCount": 5945,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 78,
          "top": 51,
          "right": 80,
          "bottom": 34
        },
        "anchorX": 128,
        "anchorY": 221,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 221,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 8,
        "pose": "run_left_passing",
        "row": 1,
        "column": 2,
        "x": 512,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 78,
          "y": 50,
          "w": 98,
          "h": 172
        },
        "boundsRightExclusive": 176,
        "boundsBottomExclusive": 222,
        "validPixelCount": 7531,
        "nonzeroAlphaPixelCount": 13166,
        "lowAlphaPixelCount": 5635,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 78,
          "top": 50,
          "right": 80,
          "bottom": 34
        },
        "anchorX": 128,
        "anchorY": 221,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 221,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 9,
        "pose": "run_left_up",
        "row": 1,
        "column": 3,
        "x": 768,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 74,
          "y": 48,
          "w": 104,
          "h": 147
        },
        "boundsRightExclusive": 178,
        "boundsBottomExclusive": 195,
        "validPixelCount": 7386,
        "nonzeroAlphaPixelCount": 12744,
        "lowAlphaPixelCount": 5358,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 74,
          "top": 48,
          "right": 78,
          "bottom": 61
        },
        "anchorX": 128,
        "anchorY": 221,
        "anchorMode": "row-baseline",
        "grounding": "airborne",
        "rowBaselineY": 221,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": -27,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "Keep this foot lift: snapping the anchor to the visible foot would lower the body and erase the authored airborne pose."
        ]
      },
      {
        "index": 10,
        "pose": "jump_crouch",
        "row": 1,
        "column": 4,
        "x": 1024,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 69,
          "y": 70,
          "w": 107,
          "h": 150
        },
        "boundsRightExclusive": 176,
        "boundsBottomExclusive": 220,
        "validPixelCount": 8358,
        "nonzeroAlphaPixelCount": 13243,
        "lowAlphaPixelCount": 4885,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 69,
          "top": 70,
          "right": 80,
          "bottom": 36
        },
        "anchorX": 128,
        "anchorY": 219,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 221,
        "anchorCorrectionY": -2,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 11,
        "pose": "jump_rise",
        "row": 1,
        "column": 5,
        "x": 1280,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 79,
          "y": 34,
          "w": 104,
          "h": 157
        },
        "boundsRightExclusive": 183,
        "boundsBottomExclusive": 191,
        "validPixelCount": 7278,
        "nonzeroAlphaPixelCount": 12257,
        "lowAlphaPixelCount": 4979,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 79,
          "top": 34,
          "right": 73,
          "bottom": 65
        },
        "anchorX": 128,
        "anchorY": 221,
        "anchorMode": "row-baseline",
        "grounding": "airborne",
        "rowBaselineY": 221,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": -31,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "Keep this foot lift: snapping the anchor to the visible foot would lower the body and erase the authored airborne pose."
        ]
      },
      {
        "index": 12,
        "pose": "jump_fall",
        "row": 2,
        "column": 0,
        "x": 0,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 75,
          "y": 36,
          "w": 103,
          "h": 171
        },
        "boundsRightExclusive": 178,
        "boundsBottomExclusive": 207,
        "validPixelCount": 7908,
        "nonzeroAlphaPixelCount": 13606,
        "lowAlphaPixelCount": 5698,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 75,
          "top": 36,
          "right": 78,
          "bottom": 49
        },
        "anchorX": 128,
        "anchorY": 222,
        "anchorMode": "row-baseline",
        "grounding": "airborne",
        "rowBaselineY": 222,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": -16,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "Keep this foot lift: snapping the anchor to the visible foot would lower the body and erase the authored airborne pose."
        ]
      },
      {
        "index": 13,
        "pose": "land",
        "row": 2,
        "column": 1,
        "x": 256,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 76,
          "y": 80,
          "w": 100,
          "h": 143
        },
        "boundsRightExclusive": 176,
        "boundsBottomExclusive": 223,
        "validPixelCount": 8313,
        "nonzeroAlphaPixelCount": 13671,
        "lowAlphaPixelCount": 5358,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 76,
          "top": 80,
          "right": 80,
          "bottom": 33
        },
        "anchorX": 128,
        "anchorY": 222,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 222,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 14,
        "pose": "attack_anticipation",
        "row": 2,
        "column": 2,
        "x": 512,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 70,
          "y": 44,
          "w": 109,
          "h": 179
        },
        "boundsRightExclusive": 179,
        "boundsBottomExclusive": 223,
        "validPixelCount": 10229,
        "nonzeroAlphaPixelCount": 18239,
        "lowAlphaPixelCount": 8010,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 70,
          "top": 44,
          "right": 77,
          "bottom": 33
        },
        "anchorX": 128,
        "anchorY": 222,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 222,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 15,
        "pose": "attack_release",
        "row": 2,
        "column": 3,
        "x": 768,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 67,
          "y": 45,
          "w": 154,
          "h": 178
        },
        "boundsRightExclusive": 221,
        "boundsBottomExclusive": 223,
        "validPixelCount": 9784,
        "nonzeroAlphaPixelCount": 17052,
        "lowAlphaPixelCount": 7268,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 67,
          "top": 45,
          "right": 35,
          "bottom": 33
        },
        "anchorX": 128,
        "anchorY": 222,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 222,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 16,
        "pose": "attack_recovery",
        "row": 2,
        "column": 4,
        "x": 1024,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 74,
          "y": 44,
          "w": 96,
          "h": 179
        },
        "boundsRightExclusive": 170,
        "boundsBottomExclusive": 223,
        "validPixelCount": 8951,
        "nonzeroAlphaPixelCount": 14963,
        "lowAlphaPixelCount": 6012,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 74,
          "top": 44,
          "right": 86,
          "bottom": 33
        },
        "anchorX": 128,
        "anchorY": 222,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 222,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 17,
        "pose": "hurt",
        "row": 2,
        "column": 5,
        "x": 1280,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 72,
          "y": 52,
          "w": 103,
          "h": 171
        },
        "boundsRightExclusive": 175,
        "boundsBottomExclusive": 223,
        "validPixelCount": 9416,
        "nonzeroAlphaPixelCount": 15026,
        "lowAlphaPixelCount": 5610,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 72,
          "top": 52,
          "right": 81,
          "bottom": 33
        },
        "anchorX": 128,
        "anchorY": 222,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 222,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 18,
        "pose": "gesture_windup",
        "row": 3,
        "column": 0,
        "x": 0,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 72,
          "y": 49,
          "w": 111,
          "h": 175
        },
        "boundsRightExclusive": 183,
        "boundsBottomExclusive": 224,
        "validPixelCount": 9516,
        "nonzeroAlphaPixelCount": 16787,
        "lowAlphaPixelCount": 7271,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 72,
          "top": 49,
          "right": 73,
          "bottom": 32
        },
        "anchorX": 128,
        "anchorY": 223,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 223,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 19,
        "pose": "gesture_extension",
        "row": 3,
        "column": 1,
        "x": 256,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 67,
          "y": 53,
          "w": 139,
          "h": 171
        },
        "boundsRightExclusive": 206,
        "boundsBottomExclusive": 224,
        "validPixelCount": 9252,
        "nonzeroAlphaPixelCount": 16077,
        "lowAlphaPixelCount": 6825,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 67,
          "top": 53,
          "right": 50,
          "bottom": 32
        },
        "anchorX": 128,
        "anchorY": 223,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 223,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 20,
        "pose": "stairs_right",
        "row": 3,
        "column": 2,
        "x": 512,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 74,
          "y": 45,
          "w": 104,
          "h": 179
        },
        "boundsRightExclusive": 178,
        "boundsBottomExclusive": 224,
        "validPixelCount": 8885,
        "nonzeroAlphaPixelCount": 14497,
        "lowAlphaPixelCount": 5612,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 74,
          "top": 45,
          "right": 78,
          "bottom": 32
        },
        "anchorX": 128,
        "anchorY": 223,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 223,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 21,
        "pose": "stairs_left",
        "row": 3,
        "column": 3,
        "x": 768,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 75,
          "y": 43,
          "w": 99,
          "h": 181
        },
        "boundsRightExclusive": 174,
        "boundsBottomExclusive": 224,
        "validPixelCount": 8393,
        "nonzeroAlphaPixelCount": 13938,
        "lowAlphaPixelCount": 5545,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 75,
          "top": 43,
          "right": 82,
          "bottom": 32
        },
        "anchorX": 128,
        "anchorY": 223,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 223,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 22,
        "pose": "ladder_rear_right",
        "row": 3,
        "column": 4,
        "x": 1024,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 76,
          "y": 50,
          "w": 104,
          "h": 174
        },
        "boundsRightExclusive": 180,
        "boundsBottomExclusive": 224,
        "validPixelCount": 8143,
        "nonzeroAlphaPixelCount": 12711,
        "lowAlphaPixelCount": 4568,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 76,
          "top": 50,
          "right": 76,
          "bottom": 32
        },
        "anchorX": 128,
        "anchorY": 223,
        "anchorMode": "row-baseline",
        "grounding": "climbing",
        "rowBaselineY": 223,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "The generated pair changes leg position but repeats the same raised hand; use as a limited climbing preview, not a validated alternating-hand cycle."
        ]
      },
      {
        "index": 23,
        "pose": "ladder_rear_left",
        "row": 3,
        "column": 5,
        "x": 1280,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 79,
          "y": 50,
          "w": 101,
          "h": 174
        },
        "boundsRightExclusive": 180,
        "boundsBottomExclusive": 224,
        "validPixelCount": 8258,
        "nonzeroAlphaPixelCount": 12363,
        "lowAlphaPixelCount": 4105,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 79,
          "top": 50,
          "right": 76,
          "bottom": 32
        },
        "anchorX": 128,
        "anchorY": 223,
        "anchorMode": "row-baseline",
        "grounding": "climbing",
        "rowBaselineY": 223,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "The generated pair changes leg position but repeats the same raised hand; use as a limited climbing preview, not a validated alternating-hand cycle."
        ]
      }
    ],
    "animations": {
      "idle": {
        "frames": [
          0,
          1
        ],
        "fps": 2,
        "loop": true,
        "duration": 1,
        "label": "待機與呼吸"
      },
      "run": {
        "frames": [
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "fps": 12,
        "loop": true,
        "duration": 0.666667,
        "label": "跑步"
      },
      "walk": {
        "frames": [
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "fps": 12,
        "loop": true,
        "duration": 0.666667,
        "label": "移動",
        "sourceAnimation": "run",
        "dedicatedWalkFrames": false
      },
      "jump_start": {
        "frames": [
          10
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.1,
        "label": "起跳預備",
        "clampWhenFinished": true
      },
      "jump_rise": {
        "frames": [
          11
        ],
        "fps": 1,
        "loop": true,
        "duration": 1,
        "label": "上升姿態"
      },
      "jump_fall": {
        "frames": [
          12
        ],
        "fps": 1,
        "loop": true,
        "duration": 1,
        "label": "下落姿態"
      },
      "jump_loop": {
        "frames": [
          11,
          12
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "空中姿態",
        "selection": "verticalVelocity",
        "velocityFrames": {
          "rising": 11,
          "falling": 12
        },
        "note": "Gameplay should choose frame 11 while rising and 12 while falling, rather than cycling them independently of physics."
      },
      "jump_land": {
        "frames": [
          13
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.1,
        "label": "落地緩衝",
        "clampWhenFinished": true
      },
      "attack_1": {
        "frames": [
          14,
          15,
          16
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.3,
        "label": "小刀攻擊",
        "clampWhenFinished": true,
        "events": [
          {
            "type": "hit",
            "time": 0.1,
            "sourceFrame": 15
          }
        ]
      },
      "hit_front": {
        "frames": [
          17
        ],
        "fps": 6,
        "loop": false,
        "duration": 0.166667,
        "label": "受擊",
        "clampWhenFinished": true
      },
      "stairs_up": {
        "frames": [
          20,
          21
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "上階梯"
      },
      "stairs_down": {
        "frames": [
          21,
          20
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "下階梯",
        "sourceAnimation": "stairs_up",
        "reversed": true,
        "dedicatedDescentFrames": false
      },
      "ladder_up": {
        "frames": [
          22,
          23
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "攀梯",
        "knownIssue": "LADDER_HANDS_NOT_ALTERNATING"
      },
      "ladder_down": {
        "frames": [
          23,
          22
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "下梯",
        "sourceAnimation": "ladder_up",
        "reversed": true,
        "dedicatedDescentFrames": false,
        "knownIssue": "LADDER_HANDS_NOT_ALTERNATING"
      },
      "punch": {
        "frames": [
          18,
          19
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.2,
        "label": "出拳",
        "clampWhenFinished": true,
        "events": [
          {
            "type": "hit",
            "time": 0.1,
            "sourceFrame": 19
          }
        ]
      },
      "interact": {
        "frames": [
          18
        ],
        "fps": 6,
        "loop": false,
        "duration": 0.166667,
        "label": "互動預備",
        "sourceAnimation": "punch",
        "clampWhenFinished": true
      },
      "jump": {
        "frames": [
          10,
          11,
          12,
          13
        ],
        "fps": 8,
        "loop": false,
        "duration": 0.5,
        "label": "跳躍預覽",
        "previewOnly": true,
        "clampWhenFinished": true
      },
      "attack": {
        "frames": [
          14,
          15,
          16
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.3,
        "label": "小刀攻擊",
        "clampWhenFinished": true,
        "events": [
          {
            "type": "hit",
            "time": 0.1,
            "sourceFrame": 15
          }
        ],
        "aliasOf": "attack_1"
      },
      "hurt": {
        "frames": [
          17
        ],
        "fps": 6,
        "loop": false,
        "duration": 0.166667,
        "label": "受擊",
        "clampWhenFinished": true,
        "aliasOf": "hit_front"
      },
      "stairs": {
        "frames": [
          20,
          21
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "上階梯",
        "aliasOf": "stairs_up"
      },
      "ladder": {
        "frames": [
          22,
          23
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "攀梯",
        "knownIssue": "LADDER_HANDS_NOT_ALTERNATING",
        "aliasOf": "ladder_up"
      }
    },
    "warnings": [
      {
        "code": "RAW_ALPHA_FEATHERING",
        "frames": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20,
          21,
          22,
          23
        ],
        "message": "RGBA transparency is present, but low-opacity edge/matte pixels remain in the unmodified source. Bounds use alpha >= 96."
      },
      {
        "code": "LADDER_HANDS_NOT_ALTERNATING",
        "frames": [
          22,
          23
        ],
        "message": "Both rear-view ladder drawings raise the same hand. The leg pose changes, but the hand cycle is not fully alternating."
      },
      {
        "code": "FIXED_SCALE_SOURCE_VARIATION",
        "frames": [
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "message": "Minor source drawing/body-scale variation remains across run frames. Registration adjusts position only; no frame is resized independently."
      },
      {
        "code": "REUSED_DESCENT_POSES",
        "frames": [
          20,
          21,
          22,
          23
        ],
        "message": "Descending sequences reuse the corresponding ascending drawings in reverse; dedicated descending art has not been generated."
      }
    ]
  },
  "sister": {
    "name": "陸寧",
    "image": "/assets/characters/sister-reference-atlas.png",
    "original": "/assets/characters/sister-original.png",
    "scale": 0.66,
    "scaleMode": "uniform-whole-character",
    "alphaThreshold": 96,
    "sheet": {
      "width": 1536,
      "height": 1024,
      "columns": 6,
      "rows": 4,
      "cellWidth": 256,
      "cellHeight": 256,
      "frameCount": 24
    },
    "registration": {
      "anchorX": 128,
      "rowBaselineY": [
        231,
        231,
        231,
        233
      ],
      "baselineSampleFrames": [
        [
          0,
          1,
          2,
          3,
          4
        ],
        [
          6,
          7,
          10
        ],
        [
          13,
          14,
          15,
          16,
          17
        ],
        [
          18,
          19,
          20,
          21
        ]
      ],
      "maxGroundContactCorrectionPx": 4,
      "anchorSpace": "cell-local pixel centres",
      "boundsSpace": "cell-local; x/y inclusive and w/h pixel counts",
      "airborneFrames": [
        5,
        9,
        11,
        12
      ],
      "climbingFrames": [
        22,
        23
      ],
      "perFrameScaling": false
    },
    "provenance": {
      "creationMethod": "Reference-guided built-in image_gen; raw output preserved without image editing.",
      "reference": {
        "file": "sister-original.png",
        "url": "/assets/characters/sister-original.png",
        "sha256": "a22e94abb9c8fbbb217761e3dee5e030b590f09427d9ac43dcf134cb6f1bc462",
        "bytes": 40510,
        "width": 127,
        "height": 201
      },
      "atlas": {
        "file": "sister-reference-atlas.png",
        "url": "/assets/characters/sister-reference-atlas.png",
        "sha256": "4862c5a404db10a7b432236b61645c440fb9f5c17727dbadb7c86e51b8332c2b",
        "bytes": 1816009,
        "width": 1536,
        "height": 1024,
        "bitDepth": 8,
        "pngColorType": 6
      },
      "idleFrameIsOriginal": false,
      "rawPixelsUnmodified": true
    },
    "frames": [
      {
        "index": 0,
        "pose": "idle",
        "row": 0,
        "column": 0,
        "x": 0,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 88,
          "y": 59,
          "w": 92,
          "h": 173
        },
        "boundsRightExclusive": 180,
        "boundsBottomExclusive": 232,
        "validPixelCount": 9109,
        "nonzeroAlphaPixelCount": 15077,
        "lowAlphaPixelCount": 5968,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 88,
          "top": 59,
          "right": 76,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 1,
        "pose": "idle_breath",
        "row": 0,
        "column": 1,
        "x": 256,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 88,
          "y": 59,
          "w": 92,
          "h": 173
        },
        "boundsRightExclusive": 180,
        "boundsBottomExclusive": 232,
        "validPixelCount": 8997,
        "nonzeroAlphaPixelCount": 14726,
        "lowAlphaPixelCount": 5729,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 88,
          "top": 59,
          "right": 76,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 2,
        "pose": "run_right_contact",
        "row": 0,
        "column": 2,
        "x": 512,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 64,
          "y": 66,
          "w": 122,
          "h": 166
        },
        "boundsRightExclusive": 186,
        "boundsBottomExclusive": 232,
        "validPixelCount": 9650,
        "nonzeroAlphaPixelCount": 15275,
        "lowAlphaPixelCount": 5625,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 64,
          "top": 66,
          "right": 70,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 3,
        "pose": "run_right_down",
        "row": 0,
        "column": 3,
        "x": 768,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 86,
          "y": 72,
          "w": 101,
          "h": 160
        },
        "boundsRightExclusive": 187,
        "boundsBottomExclusive": 232,
        "validPixelCount": 8682,
        "nonzeroAlphaPixelCount": 13208,
        "lowAlphaPixelCount": 4526,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 86,
          "top": 72,
          "right": 69,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 4,
        "pose": "run_right_passing",
        "row": 0,
        "column": 4,
        "x": 1024,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 86,
          "y": 69,
          "w": 98,
          "h": 163
        },
        "boundsRightExclusive": 184,
        "boundsBottomExclusive": 232,
        "validPixelCount": 9045,
        "nonzeroAlphaPixelCount": 13679,
        "lowAlphaPixelCount": 4634,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 86,
          "top": 69,
          "right": 72,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 5,
        "pose": "run_right_up",
        "row": 0,
        "column": 5,
        "x": 1280,
        "y": 0,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 67,
          "y": 61,
          "w": 120,
          "h": 148
        },
        "boundsRightExclusive": 187,
        "boundsBottomExclusive": 209,
        "validPixelCount": 8792,
        "nonzeroAlphaPixelCount": 13489,
        "lowAlphaPixelCount": 4697,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 67,
          "top": 61,
          "right": 69,
          "bottom": 47
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline",
        "grounding": "airborne",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": -23,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "Keep this foot lift: snapping the anchor to the visible foot would lower the body and erase the authored airborne pose."
        ]
      },
      {
        "index": 6,
        "pose": "run_left_contact",
        "row": 1,
        "column": 0,
        "x": 0,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 66,
          "y": 65,
          "w": 120,
          "h": 167
        },
        "boundsRightExclusive": 186,
        "boundsBottomExclusive": 232,
        "validPixelCount": 9300,
        "nonzeroAlphaPixelCount": 14740,
        "lowAlphaPixelCount": 5440,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 66,
          "top": 65,
          "right": 70,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 7,
        "pose": "run_left_down",
        "row": 1,
        "column": 1,
        "x": 256,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 88,
          "y": 68,
          "w": 98,
          "h": 164
        },
        "boundsRightExclusive": 186,
        "boundsBottomExclusive": 232,
        "validPixelCount": 9046,
        "nonzeroAlphaPixelCount": 13265,
        "lowAlphaPixelCount": 4219,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 88,
          "top": 68,
          "right": 70,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 8,
        "pose": "run_left_passing",
        "row": 1,
        "column": 2,
        "x": 512,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 87,
          "y": 65,
          "w": 100,
          "h": 164
        },
        "boundsRightExclusive": 187,
        "boundsBottomExclusive": 229,
        "validPixelCount": 8809,
        "nonzeroAlphaPixelCount": 13222,
        "lowAlphaPixelCount": 4413,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 87,
          "top": 65,
          "right": 69,
          "bottom": 27
        },
        "anchorX": 128,
        "anchorY": 228,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": -3,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 9,
        "pose": "run_left_up",
        "row": 1,
        "column": 3,
        "x": 768,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 69,
          "y": 62,
          "w": 118,
          "h": 142
        },
        "boundsRightExclusive": 187,
        "boundsBottomExclusive": 204,
        "validPixelCount": 8445,
        "nonzeroAlphaPixelCount": 12728,
        "lowAlphaPixelCount": 4283,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 69,
          "top": 62,
          "right": 69,
          "bottom": 52
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline",
        "grounding": "airborne",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": -28,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "Keep this foot lift: snapping the anchor to the visible foot would lower the body and erase the authored airborne pose."
        ]
      },
      {
        "index": 10,
        "pose": "jump_crouch",
        "row": 1,
        "column": 4,
        "x": 1024,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 80,
          "y": 90,
          "w": 107,
          "h": 142
        },
        "boundsRightExclusive": 187,
        "boundsBottomExclusive": 232,
        "validPixelCount": 8884,
        "nonzeroAlphaPixelCount": 12860,
        "lowAlphaPixelCount": 3976,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 80,
          "top": 90,
          "right": 69,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 11,
        "pose": "jump_rise",
        "row": 1,
        "column": 5,
        "x": 1280,
        "y": 256,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 80,
          "y": 60,
          "w": 107,
          "h": 158
        },
        "boundsRightExclusive": 187,
        "boundsBottomExclusive": 218,
        "validPixelCount": 9041,
        "nonzeroAlphaPixelCount": 13434,
        "lowAlphaPixelCount": 4393,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 80,
          "top": 60,
          "right": 69,
          "bottom": 38
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline",
        "grounding": "airborne",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": -14,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "Keep this foot lift: snapping the anchor to the visible foot would lower the body and erase the authored airborne pose."
        ]
      },
      {
        "index": 12,
        "pose": "jump_fall",
        "row": 2,
        "column": 0,
        "x": 0,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 78,
          "y": 56,
          "w": 102,
          "h": 167
        },
        "boundsRightExclusive": 180,
        "boundsBottomExclusive": 223,
        "validPixelCount": 9275,
        "nonzeroAlphaPixelCount": 13436,
        "lowAlphaPixelCount": 4161,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 78,
          "top": 56,
          "right": 76,
          "bottom": 33
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline",
        "grounding": "airborne",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": -9,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 13,
        "pose": "land",
        "row": 2,
        "column": 1,
        "x": 256,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 79,
          "y": 93,
          "w": 104,
          "h": 139
        },
        "boundsRightExclusive": 183,
        "boundsBottomExclusive": 232,
        "validPixelCount": 8864,
        "nonzeroAlphaPixelCount": 12599,
        "lowAlphaPixelCount": 3735,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 79,
          "top": 93,
          "right": 73,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 14,
        "pose": "attack_anticipation",
        "row": 2,
        "column": 2,
        "x": 512,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 84,
          "y": 61,
          "w": 88,
          "h": 171
        },
        "boundsRightExclusive": 172,
        "boundsBottomExclusive": 232,
        "validPixelCount": 9581,
        "nonzeroAlphaPixelCount": 15099,
        "lowAlphaPixelCount": 5518,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 84,
          "top": 61,
          "right": 84,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 15,
        "pose": "attack_release",
        "row": 2,
        "column": 3,
        "x": 768,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 72,
          "y": 61,
          "w": 140,
          "h": 171
        },
        "boundsRightExclusive": 212,
        "boundsBottomExclusive": 232,
        "validPixelCount": 10908,
        "nonzeroAlphaPixelCount": 18404,
        "lowAlphaPixelCount": 7496,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 72,
          "top": 61,
          "right": 44,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 16,
        "pose": "attack_recovery",
        "row": 2,
        "column": 4,
        "x": 1024,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 83,
          "y": 62,
          "w": 94,
          "h": 170
        },
        "boundsRightExclusive": 177,
        "boundsBottomExclusive": 232,
        "validPixelCount": 9536,
        "nonzeroAlphaPixelCount": 14871,
        "lowAlphaPixelCount": 5335,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 83,
          "top": 62,
          "right": 79,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 17,
        "pose": "hurt",
        "row": 2,
        "column": 5,
        "x": 1280,
        "y": 512,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 64,
          "y": 71,
          "w": 124,
          "h": 161
        },
        "boundsRightExclusive": 188,
        "boundsBottomExclusive": 232,
        "validPixelCount": 10345,
        "nonzeroAlphaPixelCount": 15881,
        "lowAlphaPixelCount": 5536,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 64,
          "top": 71,
          "right": 68,
          "bottom": 24
        },
        "anchorX": 128,
        "anchorY": 231,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 231,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 18,
        "pose": "gesture_windup",
        "row": 3,
        "column": 0,
        "x": 0,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 73,
          "y": 69,
          "w": 120,
          "h": 165
        },
        "boundsRightExclusive": 193,
        "boundsBottomExclusive": 234,
        "validPixelCount": 9980,
        "nonzeroAlphaPixelCount": 15623,
        "lowAlphaPixelCount": 5643,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 73,
          "top": 69,
          "right": 63,
          "bottom": 22
        },
        "anchorX": 128,
        "anchorY": 233,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 233,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "Interaction/guard gesture, not a dedicated punch drawing."
        ]
      },
      {
        "index": 19,
        "pose": "gesture_extension",
        "row": 3,
        "column": 1,
        "x": 256,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 60,
          "y": 80,
          "w": 136,
          "h": 154
        },
        "boundsRightExclusive": 196,
        "boundsBottomExclusive": 234,
        "validPixelCount": 9525,
        "nonzeroAlphaPixelCount": 14137,
        "lowAlphaPixelCount": 4612,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 60,
          "top": 80,
          "right": 60,
          "bottom": 22
        },
        "anchorX": 128,
        "anchorY": 233,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 233,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "Interaction/guard gesture, not a dedicated punch drawing."
        ]
      },
      {
        "index": 20,
        "pose": "stairs_right",
        "row": 3,
        "column": 2,
        "x": 512,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 81,
          "y": 66,
          "w": 98,
          "h": 168
        },
        "boundsRightExclusive": 179,
        "boundsBottomExclusive": 234,
        "validPixelCount": 9429,
        "nonzeroAlphaPixelCount": 14409,
        "lowAlphaPixelCount": 4980,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 81,
          "top": 66,
          "right": 77,
          "bottom": 22
        },
        "anchorX": 128,
        "anchorY": 233,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 233,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 21,
        "pose": "stairs_left",
        "row": 3,
        "column": 3,
        "x": 768,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 83,
          "y": 66,
          "w": 93,
          "h": 168
        },
        "boundsRightExclusive": 176,
        "boundsBottomExclusive": 234,
        "validPixelCount": 9017,
        "nonzeroAlphaPixelCount": 12881,
        "lowAlphaPixelCount": 3864,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 0,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 83,
          "top": 66,
          "right": 80,
          "bottom": 22
        },
        "anchorX": 128,
        "anchorY": 233,
        "anchorMode": "row-baseline-with-contact-correction",
        "grounding": "grounded",
        "rowBaselineY": 233,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image."
        ]
      },
      {
        "index": 22,
        "pose": "ladder_rear_right",
        "row": 3,
        "column": 4,
        "x": 1024,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 91,
          "y": 66,
          "w": 84,
          "h": 168
        },
        "boundsRightExclusive": 175,
        "boundsBottomExclusive": 234,
        "validPixelCount": 8854,
        "nonzeroAlphaPixelCount": 12552,
        "lowAlphaPixelCount": 3698,
        "minAlpha": 0,
        "maxAlpha": 253,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 91,
          "top": 66,
          "right": 81,
          "bottom": 22
        },
        "anchorX": 128,
        "anchorY": 233,
        "anchorMode": "row-baseline",
        "grounding": "climbing",
        "rowBaselineY": 233,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "The generated pair changes leg position but repeats the same raised hand; use as a limited climbing preview, not a validated alternating-hand cycle."
        ]
      },
      {
        "index": 23,
        "pose": "ladder_rear_left",
        "row": 3,
        "column": 5,
        "x": 1280,
        "y": 768,
        "w": 256,
        "h": 256,
        "bounds": {
          "x": 90,
          "y": 66,
          "w": 83,
          "h": 168
        },
        "boundsRightExclusive": 173,
        "boundsBottomExclusive": 234,
        "validPixelCount": 8458,
        "nonzeroAlphaPixelCount": 11427,
        "lowAlphaPixelCount": 2969,
        "minAlpha": 0,
        "maxAlpha": 254,
        "borderMaxAlpha": 1,
        "validBorderPixelCount": 0,
        "margin": {
          "left": 90,
          "top": 66,
          "right": 83,
          "bottom": 22
        },
        "anchorX": 128,
        "anchorY": 233,
        "anchorMode": "row-baseline",
        "grounding": "climbing",
        "rowBaselineY": 233,
        "anchorCorrectionY": 0,
        "visibleBottomOffsetY": 0,
        "notes": [
          "The raw source includes alpha values below the metadata threshold; these pixels are excluded from bounds, not removed from the image.",
          "The generated pair changes leg position but repeats the same raised hand; use as a limited climbing preview, not a validated alternating-hand cycle."
        ]
      }
    ],
    "animations": {
      "idle": {
        "frames": [
          0,
          1
        ],
        "fps": 2,
        "loop": true,
        "duration": 1,
        "label": "待機與呼吸"
      },
      "run": {
        "frames": [
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "fps": 12,
        "loop": true,
        "duration": 0.666667,
        "label": "跑步"
      },
      "walk": {
        "frames": [
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "fps": 12,
        "loop": true,
        "duration": 0.666667,
        "label": "移動",
        "sourceAnimation": "run",
        "dedicatedWalkFrames": false
      },
      "jump_start": {
        "frames": [
          10
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.1,
        "label": "起跳預備",
        "clampWhenFinished": true
      },
      "jump_rise": {
        "frames": [
          11
        ],
        "fps": 1,
        "loop": true,
        "duration": 1,
        "label": "上升姿態"
      },
      "jump_fall": {
        "frames": [
          12
        ],
        "fps": 1,
        "loop": true,
        "duration": 1,
        "label": "下落姿態"
      },
      "jump_loop": {
        "frames": [
          11,
          12
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "空中姿態",
        "selection": "verticalVelocity",
        "velocityFrames": {
          "rising": 11,
          "falling": 12
        },
        "note": "Gameplay should choose frame 11 while rising and 12 while falling, rather than cycling them independently of physics."
      },
      "jump_land": {
        "frames": [
          13
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.1,
        "label": "落地緩衝",
        "clampWhenFinished": true
      },
      "attack_1": {
        "frames": [
          14,
          15,
          16
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.3,
        "label": "時序器施放",
        "clampWhenFinished": true,
        "events": [
          {
            "type": "cast",
            "time": 0.1,
            "sourceFrame": 15
          }
        ]
      },
      "hit_front": {
        "frames": [
          17
        ],
        "fps": 6,
        "loop": false,
        "duration": 0.166667,
        "label": "受擊",
        "clampWhenFinished": true
      },
      "stairs_up": {
        "frames": [
          20,
          21
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "上階梯"
      },
      "stairs_down": {
        "frames": [
          21,
          20
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "下階梯",
        "sourceAnimation": "stairs_up",
        "reversed": true,
        "dedicatedDescentFrames": false
      },
      "ladder_up": {
        "frames": [
          22,
          23
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "攀梯",
        "knownIssue": "LADDER_HANDS_NOT_ALTERNATING"
      },
      "ladder_down": {
        "frames": [
          23,
          22
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "下梯",
        "sourceAnimation": "ladder_up",
        "reversed": true,
        "dedicatedDescentFrames": false,
        "knownIssue": "LADDER_HANDS_NOT_ALTERNATING"
      },
      "interact": {
        "frames": [
          18,
          19
        ],
        "fps": 6,
        "loop": false,
        "duration": 0.333333,
        "label": "伸手互動／護持",
        "clampWhenFinished": true
      },
      "punch": {
        "frames": [
          18,
          19
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.2,
        "label": "徒手動作（互動姿勢重用）",
        "sourceAnimation": "interact",
        "dedicatedPunchFrames": false,
        "clampWhenFinished": true,
        "note": "These reference-generated sister frames show interaction/guarding gestures, not a separately authored fist-strike cycle."
      },
      "jump": {
        "frames": [
          10,
          11,
          12,
          13
        ],
        "fps": 8,
        "loop": false,
        "duration": 0.5,
        "label": "跳躍預覽",
        "previewOnly": true,
        "clampWhenFinished": true
      },
      "attack": {
        "frames": [
          14,
          15,
          16
        ],
        "fps": 10,
        "loop": false,
        "duration": 0.3,
        "label": "時序器施放",
        "clampWhenFinished": true,
        "events": [
          {
            "type": "cast",
            "time": 0.1,
            "sourceFrame": 15
          }
        ],
        "aliasOf": "attack_1"
      },
      "hurt": {
        "frames": [
          17
        ],
        "fps": 6,
        "loop": false,
        "duration": 0.166667,
        "label": "受擊",
        "clampWhenFinished": true,
        "aliasOf": "hit_front"
      },
      "stairs": {
        "frames": [
          20,
          21
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "上階梯",
        "aliasOf": "stairs_up"
      },
      "ladder": {
        "frames": [
          22,
          23
        ],
        "fps": 6,
        "loop": true,
        "duration": 0.333333,
        "label": "攀梯",
        "knownIssue": "LADDER_HANDS_NOT_ALTERNATING",
        "aliasOf": "ladder_up"
      }
    },
    "warnings": [
      {
        "code": "RAW_ALPHA_FEATHERING",
        "frames": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20,
          21,
          22,
          23
        ],
        "message": "RGBA transparency is present, but low-opacity edge/matte pixels remain in the unmodified source. Bounds use alpha >= 96."
      },
      {
        "code": "LADDER_HANDS_NOT_ALTERNATING",
        "frames": [
          22,
          23
        ],
        "message": "Both rear-view ladder drawings raise the same hand. The leg pose changes, but the hand cycle is not fully alternating."
      },
      {
        "code": "FIXED_SCALE_SOURCE_VARIATION",
        "frames": [
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "message": "Minor source drawing/body-scale variation remains across run frames. Registration adjusts position only; no frame is resized independently."
      },
      {
        "code": "REUSED_DESCENT_POSES",
        "frames": [
          20,
          21,
          22,
          23
        ],
        "message": "Descending sequences reuse the corresponding ascending drawings in reverse; dedicated descending art has not been generated."
      },
      {
        "code": "NO_DEDICATED_FIST_STRIKE",
        "frames": [
          18,
          19
        ],
        "message": "The sister reference atlas uses these cells for interaction/guard gestures."
      }
    ]
  }
}
