Deterministic Asset Pipeline

Asset Regression Report

Trace every sprite-processing stage from frozen fixture to final approved output.

Production clean

Generated Jun 17, 2026, 6:52 PM

Download JSON
2cases
0changed
0size mismatch
2unchanged
0new

atlas

rune-atlas

5-rune tile atlas; chroma + residue should not bite the art

unchanged
data only

Spec

kind=atlas, key=#00ff00

Stage data
{
  "kind": "atlas",
  "parts": [
    "cyan_leaf_rune",
    "gold_sun_rune",
    "blue_moon_rune",
    "violet_star_rune",
    "cursed_cracked_tile"
  ],
  "keyColor": "#00ff00"
}
data only

Grid layout

3×2 grid · 5 cells · 1200×816px

Stage data
{
  "cols": 3,
  "rows": 2,
  "size": [
    1200,
    816
  ],
  "frames": [
    {
      "id": "cyan_leaf_rune",
      "sx": 56,
      "sy": 56,
      "sw": 320,
      "sh": 320
    },
    {
      "id": "gold_sun_rune",
      "sx": 440,
      "sy": 56,
      "sw": 320,
      "sh": 320
    },
    {
      "id": "blue_moon_rune",
      "sx": 824,
      "sy": 56,
      "sw": 320,
      "sh": 320
    },
    {
      "id": "violet_star_rune",
      "sx": 248,
      "sy": 440,
      "sw": 320,
      "sh": 320
    },
    {
      "id": "cursed_cracked_tile",
      "sx": 632,
      "sy": 440,
      "sw": 320,
      "sh": 320
    }
  ]
}
rune-atlas Scaffold template

Scaffold template

Template the model fills in · 50 guide marks recorded

Stage data
{
  "markCount": 50
}
rune-atlas Raw model output

Raw model output

Frozen fixture: what the image model returned, pre-processing

rune-atlas Chroma key

Chroma key

Delta vs raw

Keyed out #00ff00 → transparent

rune-atlas Guide residue cleanup

Guide residue cleanup

Delta vs chroma

Erased surviving scaffold marks · 0 mark region(s) touched

rune-atlas Content bounds + anchors

Content bounds + anchors

Measured visible content + anchor for 5 cells

Stage data
{
  "bounds": [
    {
      "id": "cyan_leaf_rune",
      "empty": false,
      "contentBounds": {
        "sx": 108,
        "sy": 33,
        "sw": 256,
        "sh": 356
      },
      "anchor": {
        "x": 236,
        "y": 388
      }
    },
    {
      "id": "gold_sun_rune",
      "empty": false,
      "contentBounds": {
        "sx": 472,
        "sy": 33,
        "sw": 256,
        "sh": 356
      },
      "anchor": {
        "x": 600,
        "y": 388
      }
    },
    {
      "id": "blue_moon_rune",
      "empty": false,
      "contentBounds": {
        "sx": 835,
        "sy": 32,
        "sw": 256,
        "sh": 357
      },
      "anchor": {
        "x": 963,
        "y": 388
      }
    },
    {
      "id": "violet_star_rune",
      "empty": false,
      "contentBounds": {
        "sx": 280,
        "sy": 419,
        "sw": 256,
        "sh": 357
      },
      "anchor": {
        "x": 408,
        "y": 775
      }
    },
    {
      "id": "cursed_cracked_tile",
      "empty": false,
      "contentBounds": {
        "sx": 646,
        "sy": 419,
        "sw": 260,
        "sh": 357
      },
      "anchor": {
        "x": 776,
        "y": 775
      }
    }
  ]
}
rune-atlas Final asset

Final asset

Transparent sheet; game code slices it via frames.json

sprite_sheet

bird-sheet

Flappy bird character sheet; character footprint guide

unchanged
data only

Spec

kind=sprite_sheet, key=#ff00ff

Stage data
{
  "kind": "sprite_sheet",
  "parts": [
    "flap_up",
    "flap_mid",
    "flap_down",
    "dizzy"
  ],
  "facing": "right",
  "keyColor": "#ff00ff"
}
data only

Grid layout

2×2 grid · 4 cells · 816×816px

Stage data
{
  "cols": 2,
  "rows": 2,
  "size": [
    816,
    816
  ],
  "frames": [
    {
      "id": "flap_up",
      "sx": 56,
      "sy": 56,
      "sw": 320,
      "sh": 320
    },
    {
      "id": "flap_mid",
      "sx": 440,
      "sy": 56,
      "sw": 320,
      "sh": 320
    },
    {
      "id": "flap_down",
      "sx": 56,
      "sy": 440,
      "sw": 320,
      "sh": 320
    },
    {
      "id": "dizzy",
      "sx": 440,
      "sy": 440,
      "sw": 320,
      "sh": 320
    }
  ]
}
bird-sheet Scaffold template

Scaffold template

Template the model fills in · 44 guide marks recorded

Stage data
{
  "markCount": 44
}
bird-sheet Raw model output

Raw model output

Frozen fixture: what the image model returned, pre-processing

bird-sheet Chroma key

Chroma key

Delta vs raw

Keyed out #ff00ff → transparent

bird-sheet Guide residue cleanup

Guide residue cleanup

Delta vs chroma

Erased surviving scaffold marks · 0 mark region(s) touched

bird-sheet Content bounds + anchors

Content bounds + anchors

Measured visible content + anchor for 4 cells

Stage data
{
  "bounds": [
    {
      "id": "flap_up",
      "empty": false,
      "contentBounds": {
        "sx": 77,
        "sy": 108,
        "sw": 276,
        "sh": 249
      },
      "anchor": {
        "x": 215,
        "y": 356
      }
    },
    {
      "id": "flap_mid",
      "empty": false,
      "contentBounds": {
        "sx": 437,
        "sy": 143,
        "sw": 294,
        "sh": 214
      },
      "anchor": {
        "x": 584,
        "y": 356
      }
    },
    {
      "id": "flap_down",
      "empty": false,
      "contentBounds": {
        "sx": 77,
        "sy": 501,
        "sw": 280,
        "sh": 227
      },
      "anchor": {
        "x": 217,
        "y": 727
      }
    },
    {
      "id": "dizzy",
      "empty": false,
      "contentBounds": {
        "sx": 456,
        "sy": 501,
        "sw": 266,
        "sh": 220
      },
      "anchor": {
        "x": 589,
        "y": 720
      }
    }
  ]
}
bird-sheet Final asset

Final asset

Transparent sheet; game code slices it via frames.json