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"
} Deterministic Asset Pipeline
Trace every sprite-processing stage from frozen fixture to final approved output.
atlas
5-rune tile atlas; chroma + residue should not bite the art
kind=atlas, key=#00ff00
{
"kind": "atlas",
"parts": [
"cyan_leaf_rune",
"gold_sun_rune",
"blue_moon_rune",
"violet_star_rune",
"cursed_cracked_tile"
],
"keyColor": "#00ff00"
} 3×2 grid · 5 cells · 1200×816px
{
"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
}
]
}
Template the model fills in · 50 guide marks recorded
{
"markCount": 50
}
Frozen fixture: what the image model returned, pre-processing
Keyed out #00ff00 → transparent
Erased surviving scaffold marks · 0 mark region(s) touched
Measured visible content + anchor for 5 cells
{
"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
}
}
]
}
Transparent sheet; game code slices it via frames.json
sprite_sheet
Flappy bird character sheet; character footprint guide
kind=sprite_sheet, key=#ff00ff
{
"kind": "sprite_sheet",
"parts": [
"flap_up",
"flap_mid",
"flap_down",
"dizzy"
],
"facing": "right",
"keyColor": "#ff00ff"
} 2×2 grid · 4 cells · 816×816px
{
"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
}
]
}
Template the model fills in · 44 guide marks recorded
{
"markCount": 44
}
Frozen fixture: what the image model returned, pre-processing
Keyed out #ff00ff → transparent
Erased surviving scaffold marks · 0 mark region(s) touched
Measured visible content + anchor for 4 cells
{
"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
}
}
]
}
Transparent sheet; game code slices it via frames.json