{
  "mode": "built-in image_gen; user-authorized Python/Pillow horizontal registration",
  "created": "2026-10-14",
  "purpose": "게임엔진 I 6주차 1교시, 기존 초록 모자 캐릭터의 1행 8열 걷기 스프라이트",
  "reference": "teaching/game-engine-1/assets/week-02-sprites/Player.png",
  "output": "teaching/game-engine-1/assets/week-06-starter/Player_Walk_8.png",
  "canvas": {
    "width": 2048,
    "height": 768,
    "columns": 8,
    "rows": 1,
    "cellWidth": 256,
    "cellHeight": 768,
    "format": "RGBA PNG"
  },
  "prompts": [
    {
      "stage": "initial walk cycle",
      "prompt": "Use the attached reference as the EXACT character identity and pixel-art visual style. Generate a game-ready eight-frame WALK CYCLE SPRITE SHEET for this same green-cap adventurer, intended for a beginner Unity 2D lesson.\nOUTPUT COMPOSITION IS CRITICAL: ONE ROW OF EIGHT FRAMES, 8 columns x 1 row, on a very wide panoramic 8:1 TRANSPARENT canvas. Prefer 4096x512 pixels with eight 512x512 cells. There must be EXACTLY EIGHT complete full-body character drawings, evenly spaced, one per equal-size square cell. No second row. No grid lines, no labels, no numbers, no text, no ground, no cast shadows, no background color, no painted checkerboard. Genuine alpha transparency.\nCHARACTER INVARIANTS: brown tousled hair; long drooping green cap; large brown eyes; green tunic; cream collar and trousers; brown leather belt with square gold buckle; brown wrist cuffs and boots; no backpack, no weapons. Match the supplied chibi pixel-art character proportions and pixel treatment faithfully. All frames face RIGHT in the same three-quarter side view. Never flip the character to face left. Same body and head size, same lighting, same camera, no rotation across frames.\nLAYOUT INVARIANTS: center of the torso stays on each cell's horizontal midpoint, planted boot soles on one shared horizontal ground line at 90 percent of canvas height. Character cap top around 12 percent of canvas height. No frame is clipped. All feet, cap tips, and hands remain within each cell. Each frame has generous transparent left/right margins.\nEIGHT DISTINCT SEQUENTIAL WALK PHASES, LEFT TO RIGHT:\n1. Left-foot contact: left leg extended forward toward the right, right leg behind; right arm forward.\n2. Left-foot down/recoil: leading left foot planted, left knee slightly bends, rear heel rises; torso lowers a little.\n3. Right-leg passing: left supporting leg under body, right knee passes forward, feet close together.\n4. Right-leg up: left leg pushes off, right knee lifts forward, torso rises slightly.\n5. Right-foot contact: right leg extended forward toward the right, left leg behind; LEFT arm forward. Opposite limbs from frame 1.\n6. Right-foot down/recoil: right foot planted, right knee slightly bends, left heel rises.\n7. Left-leg passing: right supporting leg under body, left knee passes forward, feet close together.\n8. Left-leg up: right leg pushes off, left knee lifts forward, approaching frame 1.\nMake the arm and leg phases visually clear, not eight copies of the same stance. Frame 8 must smoothly lead back into frame 1; do not add a ninth repeated starting frame. This is one complete walk cycle, not eight different characters. The final asset must read as a single horizontal strip of eight sprites."
    },
    {
      "stage": "accepted spacing revision",
      "prompt": "Edit this exact eight-character horizontal sprite strip for safe grid slicing. Keep the SAME eight walk poses, exact green-cap adventurer identity, right-facing direction, eyes open, outfit, pixel-art style, and transparent background.\nOnly correct layout and size. Maintain ONE row and EXACTLY EIGHT columns. The characters are currently too wide for each column and touch their neighbours. Uniformly SHRINK EACH CHARACTER to 70% of its current size, independently in its own column, and center the torso within that column. This must leave CLEAR TRANSPARENT GAPS between every sprite. Never let a hat, hand, or boot cross its column boundary. Do NOT crop any character at the left or right image edge.\nUse canvas 2048 pixels wide by 768 pixels high if possible, eight cells of 256x768. Character torso centers at x=128,384,640,896,1152,1408,1664,1920. Each character is about 170px wide and 300px tall. All lowest planted boot soles on common y=535 line; head tops near y=235 with small natural walking bob. Plenty of transparent space ABOVE and BELOW the one row is intentional. Keep this canvas, do not auto-crop to content or expand the characters to fill the entire height. If exact size differs, keep equally sized eight columns and preserve 20% transparent padding on both left and right of each column.\nNo new art style, no extra character, no labels, no frames, no visible grid, no shadows, no floor, no checkerboard pattern. Return only the actual transparent sprite sheet."
    }
  ],
  "validation": {
    "visibleAlphaThreshold": 128,
    "visibleFeetY": 541,
    "transparentGaps": "All eight visible sprite bounds remain within their 256-pixel cells.",
    "importPPU": 360,
    "pivot": {
      "x": 0.5,
      "y": 0.296
    },
    "idle": {
      "source": "week-02-sprites/Player.png",
      "ppu": 1254,
      "pivot": {
        "x": 0.5,
        "y": 0.048
      }
    },
    "editing": "Generated sprite poses preserved with user-authorized integer horizontal translation. Web preview uses the same sheet and a uniform CSS crop of transparent vertical padding.",
    "headRegistration": {
      "landmark": "Mean alpha>128 silhouette midpoint across rows y=240..339 in each 256px cell.",
      "before": [
        138.2,
        131.47,
        130.415,
        130.585,
        128.635,
        127.09,
        126.59,
        125.02
      ],
      "after": [
        128.2,
        128.47,
        128.415,
        127.585,
        127.635,
        128.09,
        127.59,
        128.02
      ],
      "loopJumpBefore": 13.18,
      "loopJumpAfter": 0.18,
      "maximumAdjacentJumpAfter": 0.83,
      "test": "tests/game-engine-1-week06-sprites.test.py"
    }
  },
  "postprocessing": {
    "date": "2026-10-14",
    "purpose": "Keep the eight-frame walk in place, especially the 8→1 loop boundary.",
    "method": "Integer translation of each complete RGBA cell; no redrawing, scaling, resampling or alpha blending.",
    "authorization": "User explicitly approved Python pixel-position alignment after two built-in image edit requests were rejected.",
    "horizontalShiftPixels": [
      -10,
      -3,
      -2,
      -3,
      -1,
      1,
      1,
      3
    ],
    "sourceSha256": "926e780c68871ad769f05d0922181f168a42f44ce25e63b91c51e6d32111f936",
    "outputSha256": "ca0897e3ce5515c6268842eb0cebc2989068d4dc13bf05e385fac8571f4ebfed",
    "preserved": "All visible character pixels, eight poses, frame order, 2048×768 canvas, vertical alignment, PPU and pivots.",
    "edgePadding": "Two stray alpha=1 background pixels at the left edge of cell 4 fall outside the cell after translation; all pixels with alpha>1 are preserved."
  }
}
