"""Label an actual D3D11 WARP shader output; no generated or painted stars."""
import json
from pathlib import Path
from PIL import Image,ImageDraw,ImageFont
folder=Path('artifacts/galaxy-reference-20261023')
raw=(folder/'stellar-native-size.bgra').read_bytes()
image=Image.frombytes('RGBA',(1960,950),raw,'raw','BGRA')
draw=ImageDraw.Draw(image);font=ImageFont.truetype('C:/Windows/Fonts/segoeui.ttf',18)
labels=['O','B','A','F','G','K','M','L','T','Y','WD','Neutron','Black hole','Unknown']
for column,name in enumerate(labels):draw.text((20+column*140,12),name,fill=(180,195,210),font=font)
for row,name in enumerate(['Normal catalogue points, scale 4, focus distance 60','Near view, scale 64','Selection glyph around unchanged photosphere','Classified map spheres','Same G star: original size .05 / .1 / .3 / .7 / 1.2 / 1.5, repeated']):
draw.text((14,57+row*165),name,fill=(180,195,210),font=font)
draw.text((14,903),'Rendered final GalaxyMap.hlsl directly on D3D11 WARP. Synthetic positions; original native scene remains unverified.',fill=(150,165,185),font=font)
image.save(folder/'stellar-native-size.png')
# Measure the unlabelled GPU pixels, not the annotated image.
measures=[]
for column,size in enumerate([.05,.1,.3,.7,1.2,1.5]):
cx=70+column*140;cy=800;signal=[]
for y in range(cy-15,cy+16):
for x in range(cx-15,cx+16):
index=(y*1960+x)*4
signal.append(sum(max(0,raw[index+i]-base) for i,base in enumerate((5,4,3))))
measures.append(dict(originalSize=size,integratedByteSignal=sum(signal),pixelsAbove12=sum(value>12 for value in signal)))
(folder/'stellar-native-size-measurements.json').write_text(json.dumps(measures,indent=2)+'\n')
print(json.dumps(measures,indent=2))
"""Label an actual D3D11 WARP shader output; no generated or painted stars."""
import json
from pathlib import Path
from PIL import Image,ImageDraw,ImageFont
folder=Path('artifacts/galaxy-reference-20261023')
raw=(folder/'stellar-native-size.bgra').read_bytes()
image=Image.frombytes('RGBA',(1960,950),raw,'raw','BGRA')
draw=ImageDraw.Draw(image);font=ImageFont.truetype('C:/Windows/Fonts/segoeui.ttf',18)
labels=['O','B','A','F','G','K','M','L','T','Y','WD','Neutron','Black hole','Unknown']
for column,name in enumerate(labels):draw.text((20+column*140,12),name,fill=(180,195,210),font=font)
for row,name in enumerate(['Normal catalogue points, scale 4, focus distance 60','Near view, scale 64','Selection glyph around unchanged photosphere','Classified map spheres','Same G star: original size .05 / .1 / .3 / .7 / 1.2 / 1.5, repeated']):
draw.text((14,57+row*165),name,fill=(180,195,210),font=font)
draw.text((14,903),'Rendered final GalaxyMap.hlsl directly on D3D11 WARP. Synthetic positions; original native scene remains unverified.',fill=(150,165,185),font=font)
image.save(folder/'stellar-native-size.png')
# Measure the unlabelled GPU pixels, not the annotated image.
measures=[]
for column,size in enumerate([.05,.1,.3,.7,1.2,1.5]):
cx=70+column*140;cy=800;signal=[]
for y in range(cy-15,cy+16):
for x in range(cx-15,cx+16):
index=(y*1960+x)*4
signal.append(sum(max(0,raw[index+i]-base) for i,base in enumerate((5,4,3))))
measures.append(dict(originalSize=size,integratedByteSignal=sum(signal),pixelsAbove12=sum(value>12 for value in signal)))
(folder/'stellar-native-size-measurements.json').write_text(json.dumps(measures,indent=2)+'\n')
print(json.dumps(measures,indent=2))