{
  "comparison_figure": {
    "encoded_bytes": 111117,
    "height": 1784,
    "layout": "header + three rows, each: caption line above a 640x520 2x-nearest crop",
    "path": "output/comparison-rows.png",
    "rows": [
      "A · source native 640×360 → normalized 1280×720 (Lanczos) → 2× nearest",
      "B · source native 1280×720 → identity normalization (unchanged pixels) → 2× nearest",
      "C · source native 3840×2160 → normalized 1280×720 (Lanczos) → 2× nearest"
    ],
    "sha256": "8ec28a7616ba8308663f5c5700806a6784ef4492d2603704c71be9cd01480725",
    "sources": [
      "output/crop2x-from-640.png",
      "output/crop2x-from-1280.png",
      "output/crop2x-from-3840.png"
    ],
    "width": 900
  },
  "crop_2x": {
    "box_logical_1280": [
      480,
      340,
      800,
      600
    ],
    "box_on_normalized_1280x720": [
      480,
      340,
      800,
      600
    ],
    "contents": [
      "small text block (16 px logical)",
      "fine diagonal lines (16 px logical spacing)",
      "circle outline arc"
    ],
    "crop_size": "320x260",
    "enlargement": "Image.resize((640, 520), Image.Resampling.NEAREST), factor 2",
    "items": [
      {
        "encoded_bytes": 34707,
        "height": 520,
        "path": "output/crop2x-from-640.png",
        "sha256": "069fd8d1cf6aec683ce84aa3c92bef9a2c7059438ed1b233e01677515f77f508",
        "source": "output/normalized-from-640.png",
        "width": 640
      },
      {
        "encoded_bytes": 12443,
        "height": 520,
        "path": "output/crop2x-from-1280.png",
        "sha256": "ca02bcd55a8d5da9acaf70dc215b59207b4267b947c1b35a41862bf54dcf0ea7",
        "source": "output/normalized-from-1280.png",
        "width": 640
      },
      {
        "encoded_bytes": 29551,
        "height": 520,
        "path": "output/crop2x-from-3840.png",
        "sha256": "6d8b51247a4dc995c0879b33a133035dd2c725a69e6467cce711df3407655d38",
        "source": "output/normalized-from-3840.png",
        "width": 640
      }
    ],
    "native_size_label_position_logical": [
      24,
      656
    ]
  },
  "design": {
    "colors": {
      "background_dark_green": [
        18,
        48,
        38
      ],
      "cream": [
        242,
        233,
        210
      ],
      "diagonal_line_green": [
        108,
        140,
        120
      ],
      "muted_cream": [
        214,
        206,
        184
      ]
    },
    "elements_logical": {
      "circle": {
        "center": [
          760,
          380
        ],
        "radius": 130,
        "stroke": 2
      },
      "diagonal_band": {
        "angle_deg": 45,
        "box": [
          150,
          320,
          560,
          650
        ],
        "spacing": 16,
        "stroke": 1
      },
      "native_size_label": {
        "at": [
          24,
          656
        ],
        "format": "native {W}×{H}, drawn natively",
        "outside_crop_box": [
          480,
          340,
          800,
          600
        ],
        "px": 20
      },
      "small_text_lines": [
        {
          "at": [
            600,
            520
          ],
          "text": "16 px logical small text"
        },
        {
          "at": [
            600,
            544
          ],
          "text": "diagonal spacing 16 px"
        },
        {
          "at": [
            600,
            568
          ],
          "text": "circle stroke 2 px"
        }
      ],
      "subtitle": {
        "center": [
          640,
          176
        ],
        "font": "Arial",
        "px": 16,
        "text": "One vector-like design, drawn natively at each size"
      },
      "title": {
        "center": [
          640,
          116
        ],
        "font": "Arial Bold",
        "px": 64,
        "text": "RESOLUTION STUDY"
      }
    },
    "logical_canvas": "1280x720",
    "scaling_rule": "s = native_width / 1280; coordinates int(round(v*s)); font px int(round(px*s)); stroke widths max(1, int(round(w*s))); every native drawn independently, none derived by resampling another"
  },
  "determinism_note": "no clock, randomness or network inputs; fixed PNG compress_level=6; safe to rerun",
  "fonts": {
    "bold": "/System/Library/Fonts/Supplemental/Arial Bold.ttf",
    "both_present": true,
    "regular": "/System/Library/Fonts/Supplemental/Arial.ttf"
  },
  "generator": "make-study.py",
  "natives": [
    {
      "drawn_params": {
        "circle_bbox_px": [
          315,
          125,
          445,
          255
        ],
        "circle_radius_px": 65,
        "circle_stroke_px": 1,
        "diagonal_band_box_px": [
          75,
          160,
          280,
          325
        ],
        "diagonal_spacing_px": 8,
        "diagonal_stroke_px": 1,
        "label_font_px": 10,
        "scale_factor": 0.5,
        "small_text_font_px": 8,
        "title_font_px": 32
      },
      "encoded_bytes": 12672,
      "height": 360,
      "native_pixel_count": 230400,
      "native_size": "640x360",
      "path": "output/native-640x360.png",
      "sha256": "d846a5ef0ddc766f8d702269f84429693b950beeaa207e15ac948d1db4a1c05b",
      "width": 640
    },
    {
      "drawn_params": {
        "circle_bbox_px": [
          630,
          250,
          890,
          510
        ],
        "circle_radius_px": 130,
        "circle_stroke_px": 2,
        "diagonal_band_box_px": [
          150,
          320,
          560,
          650
        ],
        "diagonal_spacing_px": 16,
        "diagonal_stroke_px": 1,
        "label_font_px": 20,
        "scale_factor": 1.0,
        "small_text_font_px": 16,
        "title_font_px": 64
      },
      "encoded_bytes": 32995,
      "height": 720,
      "native_pixel_count": 921600,
      "native_size": "1280x720",
      "path": "output/native-1280x720.png",
      "sha256": "167df7c99dba4d2e31ff439ed3e19ec76ab666f0b63fd00b38291f042b48ece6",
      "width": 1280
    },
    {
      "drawn_params": {
        "circle_bbox_px": [
          1890,
          750,
          2670,
          1530
        ],
        "circle_radius_px": 390,
        "circle_stroke_px": 6,
        "diagonal_band_box_px": [
          450,
          960,
          1680,
          1950
        ],
        "diagonal_spacing_px": 48,
        "diagonal_stroke_px": 3,
        "label_font_px": 60,
        "scale_factor": 3.0,
        "small_text_font_px": 48,
        "title_font_px": 192
      },
      "encoded_bytes": 142144,
      "height": 2160,
      "native_pixel_count": 8294400,
      "native_size": "3840x2160",
      "path": "output/native-3840x2160.png",
      "sha256": "b421b75cd473ec2f392ef58eb5f2b5e3665559692e27971652bdc59d934ae14e",
      "width": 3840
    }
  ],
  "normalization": {
    "items": [
      {
        "encoded_bytes": 102070,
        "height": 720,
        "path": "output/normalized-from-640.png",
        "pixel_data_identical_to_native": false,
        "sha256": "41dbe05a5c82cc18cbca5ea898ceab6b43424f1033a2bf1148c6cd4433efaea3",
        "source": "output/native-640x360.png",
        "width": 1280
      },
      {
        "encoded_bytes": 32995,
        "height": 720,
        "path": "output/normalized-from-1280.png",
        "pixel_data_identical_to_native": true,
        "sha256": "167df7c99dba4d2e31ff439ed3e19ec76ab666f0b63fd00b38291f042b48ece6",
        "source": "output/native-1280x720.png",
        "width": 1280
      },
      {
        "encoded_bytes": 84836,
        "height": 720,
        "path": "output/normalized-from-3840.png",
        "pixel_data_identical_to_native": false,
        "sha256": "4d9ce2c1b3b6373ee5251a27c2441c88bbfed294792dc7549c75aa79607e9035",
        "source": "output/native-3840x2160.png",
        "width": 1280
      }
    ],
    "method": "Image.resize((1280, 720), Image.Resampling.LANCZOS), single pass per native",
    "resampling": "LANCZOS",
    "target_size": "1280x720"
  },
  "previews_320x180": {
    "items": [
      {
        "encoded_bytes": 13898,
        "height": 180,
        "path": "output/preview-320x180-from-640.png",
        "sha256": "77ff5c732fecd7077674b28cb9e0548a69abf8a3b7b89fc219c3a110456a5524",
        "source": "output/native-640x360.png",
        "width": 320
      },
      {
        "encoded_bytes": 13673,
        "height": 180,
        "path": "output/preview-320x180-from-1280.png",
        "sha256": "8ed4009fb84baf0e18561a906020fba30e620922f315616d834af06d5875812d",
        "source": "output/native-1280x720.png",
        "width": 320
      },
      {
        "encoded_bytes": 14294,
        "height": 180,
        "path": "output/preview-320x180-from-3840.png",
        "sha256": "3c587d63924950a9fce75295906a274e935a15a6563983e15b4d2efd42a41816",
        "source": "output/native-3840x2160.png",
        "width": 320
      }
    ],
    "method": "Image.resize((320, 180), Image.Resampling.LANCZOS), single pass from native",
    "resampling": "LANCZOS",
    "size": "320x180"
  },
  "self_checks": [
    {
      "detail": "expected 640x360, 1280x720, 3840x2160",
      "name": "native_dimensions",
      "passed": true
    },
    {
      "detail": "re-read every native PNG and recomputed size + SHA256",
      "name": "native_files_hash_and_size",
      "passed": true
    },
    {
      "detail": "all normalized outputs are 1280x720",
      "name": "normalized_dimensions",
      "passed": true
    },
    {
      "detail": "1280x720 native and its 1280x720 Lanczos output have identical pixel data",
      "name": "normalized_1280_identity_pixel_exact",
      "passed": true
    },
    {
      "detail": "all 2x crops re-derived from saved normalized PNGs at box [480, 340, 800, 600] match saved outputs (crop2x-from-640.png: (640, 520) ok; crop2x-from-1280.png: (640, 520) ok; crop2x-from-3840.png: (640, 520) ok)",
      "name": "crop_consistency_same_box_rederived",
      "passed": true
    },
    {
      "detail": "each row derives from the normalized image of its own native size, same crop box",
      "name": "crop_same_source_box_all_rows",
      "passed": true
    },
    {
      "detail": "header and all captions measured with font.getlength-style textlength fit 900 px figure width minus margins",
      "name": "comparison_text_fits_figure",
      "passed": true
    },
    {
      "detail": "13 output files, all under output/",
      "name": "outputs_confined_to_owned_dir",
      "passed": true
    },
    {
      "detail": "results.json reparsed; every recorded encoded_bytes and SHA256 recomputed from disk",
      "name": "results_json_reparses_and_hashes_match_disk",
      "passed": true
    }
  ],
  "task": "023400-resolution-study",
  "versions": {
    "freetype": "2.14.3",
    "machine": "arm64",
    "pillow": "12.3.0",
    "platform": "macOS-27.0-arm64-arm-64bit",
    "python": "3.12.14",
    "raqm_layout_engine": false
  }
}
