{
  "status": "All candidates unapproved. Chapter 1 is preproduction, not a playable chapter.",
  "tool": "Built-in ImageGen; Aseprite native export. Python image use read-only.",
  "art_contract": {
    "logical_view": [
      640,
      360
    ],
    "display": [
      1920,
      1080
    ],
    "portrait": [
      160,
      192
    ],
    "sprite_cell": [
      48,
      64
    ],
    "foot_anchor": [
      24,
      61
    ]
  },
  "book": "Complete supplied 01-chapter-1.txt, 891 lines; source-grounded planning in CHAPTER1_ART_PLAN.md",
  "assets": [
    {
      "character": "fishergirl",
      "role": "dialogue portrait candidate",
      "file": "art/chapter1/portraits/fishergirl_neutral_v2.png",
      "size": [
        160,
        192
      ],
      "transparent": true,
      "source": "art/chapter1/source/fishergirl_neutral_v2.png",
      "prompt": "art/chapter1/source/fishergirl_neutral_v2.prompt.txt",
      "sha256": "972d1952505b47e2d790005e27d1beda582801575aea26bab17c5cfc9b5cb41e",
      "processing": "Aseprite crop, uniform nearest-neighbour fit and binary alpha; tools/export_portrait.lua",
      "status": "unapproved; not in playable timeline"
    },
    {
      "character": "fishergirl",
      "role": "dialogue portrait candidate",
      "file": "art/chapter1/portraits/fishergirl_possessed_locked_v6.png",
      "size": [
        160,
        192
      ],
      "transparent": true,
      "source": "art/chapter1/source/fishergirl_possessed_v5.png",
      "prompt": "art/chapter1/source/fishergirl_possessed_v5.prompt.txt",
      "sha256": "d3101fa1d9582fff83174bbfefd753bc5d055b41bb5419552c558b33ffddd88c",
      "processing": "Only eye/brow/under-eye and mouth regions copied onto neutral v2; exact neutral hair/clothes/alpha retained.",
      "status": "unapproved; not in playable timeline"
    },
    {
      "character": "fishergirl",
      "role": "four-direction static identity study; not an animation",
      "file": "art/chapter1/sprites/fishergirl_turnaround_v2.png",
      "size": [
        192,
        64
      ],
      "source": "art/chapter1/source/fishergirl_turnaround_v2.png",
      "prompt": "art/chapter1/source/fishergirl_turnaround_v2.prompt.txt",
      "status": "unapproved; not in playable timeline"
    },
    {
      "character": "rigga",
      "role": "dialogue portrait candidate",
      "file": "art/chapter1/portraits/rigga_neutral_v1.png",
      "size": [
        160,
        192
      ],
      "transparent": true,
      "source": "art/chapter1/source/rigga_neutral_v1.png",
      "prompt": "art/chapter1/source/rigga_neutral_v1.prompt.txt",
      "sha256": "8ac73381f11735a6d7aa5d053daef2eac94e98efa1049a11ec6a2b1ab816d199",
      "processing": "Aseprite crop, uniform nearest-neighbour fit and binary alpha; tools/export_portrait.lua",
      "status": "unapproved; not in playable timeline"
    },
    {
      "character": "ganoes_adult",
      "role": "dialogue portrait candidate",
      "file": "art/chapter1/portraits/ganoes_adult_neutral_black_v3.png",
      "size": [
        160,
        192
      ],
      "transparent": true,
      "source": "art/chapter1/source/ganoes_adult_neutral_v2.png",
      "prompt": "art/chapter1/source/ganoes_adult_neutral_v2.prompt.txt",
      "sha256": "98db6f61f22409f76ac1ba7cd89f13bca4ac6700211393963036845ffc4aed59",
      "processing": "Aseprite crop, uniform nearest-neighbour fit and binary alpha; tools/export_portrait.lua; native hair colour correction with tools/recolor_ganoes_hair.lua",
      "status": "unapproved; not in playable timeline"
    },
    {
      "character": "ganoes_adult",
      "role": "four-direction static identity study; not an animation",
      "file": "art/chapter1/sprites/ganoes_adult_turnaround_v2.png",
      "size": [
        192,
        64
      ],
      "source": "art/chapter1/source/ganoes_adult_turnaround_v2.png",
      "prompt": "art/chapter1/source/ganoes_adult_turnaround_v2.prompt.txt",
      "status": "unapproved; not in playable timeline"
    },
    {
      "character": "lorn",
      "role": "dialogue portrait candidate",
      "file": "art/chapter1/portraits/lorn_neutral_v1.png",
      "size": [
        160,
        192
      ],
      "transparent": true,
      "source": "art/chapter1/source/lorn_neutral_v1.png",
      "prompt": "art/chapter1/source/lorn_neutral_v1.prompt.txt",
      "sha256": "af4732fecc8ff144fc77fd8fc86400b7e358c82bcab503c0521059e1925b6f7a",
      "processing": "Aseprite crop, uniform nearest-neighbour fit and binary alpha; tools/export_portrait.lua",
      "status": "unapproved; not in playable timeline"
    },
    {
      "character": "topper",
      "role": "dialogue portrait candidate",
      "file": "art/chapter1/portraits/topper_neutral_v3.png",
      "size": [
        160,
        192
      ],
      "transparent": true,
      "source": "art/chapter1/source/topper_neutral_v3.png",
      "prompt": "art/chapter1/source/topper_neutral_v3.prompt.txt",
      "sha256": "beb48ccd4d8e23a26a8b0a8fbb4b134d206573dfafc4344a44e79aacc9ce5c43",
      "processing": "Aseprite crop, uniform nearest-neighbour fit and binary alpha; tools/export_portrait.lua",
      "status": "unapproved; not in playable timeline"
    },
    {
      "character": "topper",
      "role": "dialogue portrait candidate",
      "file": "art/chapter1/portraits/topper_long_hair_v1.png",
      "size": [
        160,
        192
      ],
      "transparent": true,
      "source": "art/chapter1/source/topper_long_hair_v1.png",
      "prompt": "art/chapter1/source/topper_long_hair_v1.prompt.txt",
      "sha256": "ab0c74dc59d81f7440639d262ef5bb54705ab2a352cecc477d5053b092a087d5",
      "processing": "Aseprite crop, uniform nearest-neighbour fit and binary alpha; tools/export_portrait.lua",
      "status": "unapproved; not in playable timeline"
    },
    {
      "character": "tavore",
      "role": "dialogue portrait candidate",
      "file": "art/chapter1/portraits/tavore_neutral_v1.png",
      "size": [
        160,
        192
      ],
      "transparent": true,
      "source": "art/chapter1/source/tavore_neutral_v1.png",
      "prompt": "art/chapter1/source/tavore_neutral_v1.prompt.txt",
      "sha256": "3915090ef62d38d6721152d6009eb2b55f0694f0d3773d004d2bc772b026f34b",
      "processing": "Aseprite crop, uniform nearest-neighbour fit and binary alpha; tools/export_portrait.lua",
      "status": "unapproved; not in playable timeline"
    }
  ],
  "pending": [
    "Ammanas and Cotillion hood silhouettes",
    "Kan captain, Aragan, house guard portraits",
    "Laseen seated variant with existing Surly identity",
    "Outriders, horses, seven Hounds, birds and crowds",
    "Scene tile kits and action poses",
    "Actual drawn walking/riding/galloping animations",
    "Chapter 1 timeline and exact-dialogue compilation"
  ]
}
