File size: 1,302 Bytes
eae424a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #!/usr/bin/env python3
"""Generate the deterministic RGB8 frame used for host/device parity."""
from __future__ import annotations
import argparse
import hashlib
from pathlib import Path
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("--output", required=True, type=Path)
parser.add_argument("--size", type=int, default=224)
args = parser.parse_args()
if args.size <= 1 or args.size % 16:
raise SystemExit("--size must be greater than one and divisible by 16")
pixels = bytearray()
center = (args.size - 1) / 2.0
radius_squared = (args.size * 0.28) ** 2
for y in range(args.size):
for x in range(args.size):
red = round(255 * x / (args.size - 1))
green = round(255 * y / (args.size - 1))
checker = 48 if ((x // 16) ^ (y // 16)) & 1 else 208
in_circle = (x - center) ** 2 + (y - center) ** 2 < radius_squared
blue = 255 - checker if in_circle else checker
pixels.extend((red, green, blue))
args.output.parent.mkdir(parents=True, exist_ok=True)
args.output.write_bytes(pixels)
digest = hashlib.sha256(pixels).hexdigest()
print(f"wrote {args.output}: {len(pixels)} bytes, SHA-256 {digest}")
if __name__ == "__main__":
main()
|