from PIL import Image, ImageDraw, ImageFont, ImageFilter, ImageEnhance, ImageChops
import random, math

src='/home/spazio/.hermes/cache/images/img_a260c53e39d2.jpg'
out='/home/spazio/cosmos_luminosity_futuristic_mask_v1.jpg'
im=Image.open(src).convert('RGB')
W,H=im.size

# 1. Clean fashion grade: cool violet shadows, controlled skin and whites.
base=ImageEnhance.Contrast(im).enhance(1.14)
base=ImageEnhance.Color(base).enhance(.82)
pix=base.load()
for y in range(H):
    for x in range(W):
        r,g,b=pix[x,y]
        lum=(r+g+b)/3
        # violet/indigo shadow grade; highlights remain neutral
        shadow=max(0,min(1,(155-lum)/155))
        r=int(min(255,r+24*shadow))
        g=int(max(0,g-10*shadow))
        b=int(min(255,b+38*shadow))
        pix[x,y]=(r,g,b)
base=base.convert('RGBA')

# 2. Cinematic vignette with a clean central portrait field.
vig=Image.new('RGBA',(W,H),(0,0,0,0)); vp=vig.load()
cx,cy=W*.50,H*.47
for y in range(H):
    for x in range(W):
        dx=(x-cx)/(W*.72); dy=(y-cy)/(H*.72)
        q=min(1,max(0,(dx*dx+dy*dy-.15)/.85))
        vp[x,y]=(15,3,30,int(145*q))
base=Image.alpha_composite(base,vig)

# 3. Detect bright neutral mask pixels in central face region and add pearl/chrome luminosity.
arr=Image.new('L',(W,H),0); ap=arr.load(); srcp=im.load()
face_box=(int(W*.24),int(H*.05),int(W*.76),int(H*.55))
for y in range(face_box[1],face_box[3]):
    for x in range(face_box[0],face_box[2]):
        r,g,b=srcp[x,y]
        if min(r,g,b)>142 and max(r,g,b)-min(r,g,b)<47:
            ap[x,y]=min(255,int((min(r,g,b)-125)*3.0))
arr=arr.filter(ImageFilter.GaussianBlur(1.4))
pearl=Image.new('RGBA',(W,H),(202,188,255,0)); pearl.putalpha(arr.point(lambda v:int(v*.43)))
base=Image.alpha_composite(base,pearl)
# bloom from mask
bloom_alpha=arr.filter(ImageFilter.GaussianBlur(18)).point(lambda v:int(v*.22))
bloom=Image.new('RGBA',(W,H),(143,77,255,0)); bloom.putalpha(bloom_alpha)
base=Image.alpha_composite(base,bloom)

# 4. Futuristic energy architecture, kept away from facial features.
fx=Image.new('RGBA',(W,H),(0,0,0,0)); d=ImageDraw.Draw(fx)
V=(163,91,255,210); Y=(255,214,52,220); G=(215,174,91,205); WHT=(240,235,255,160)
# concentric partial portal arcs framing the head
for inset,color,width,start,end in [
    (70,V,3,198,342),(91,G,2,202,338),(115,WHT,1,207,333)]:
    box=(W*.18-inset/4,H*.01-inset/5,W*.82+inset/4,H*.68+inset/5)
    d.arc(box,start=start,end=end,fill=color,width=width)
# precision ticks around halo
cx,cy=W*.5,H*.31; rx,ry=W*.37,H*.34
for i in range(18):
    a=math.radians(202+i*7.6)
    x=cx+rx*math.cos(a); y=cy+ry*math.sin(a)
    x2=cx+(rx+10+(i%3)*5)*math.cos(a); y2=cy+(ry+10+(i%3)*5)*math.sin(a)
    d.line((x,y,x2,y2),fill=G if i%3==0 else V,width=2 if i%3==0 else 1)
# subtle circuit lines at sides, not face
for side in [1,-1]:
    sx=W*.5+side*W*.33
    pts=[(sx,H*.40),(sx+side*42,H*.46),(sx+side*42,H*.61),(sx+side*78,H*.66)]
    d.line(pts,fill=(164,92,255,130),width=2,joint='curve')
    for x,y in pts[1:]: d.ellipse((x-4,y-4,x+4,y+4),outline=G,width=2)
# gold scan lines on lower black garment
for yy,alpha in [(H*.74,125),(H*.82,90),(H*.90,60)]:
    d.line((W*.12,yy,W*.88,yy),fill=(215,174,91,alpha),width=1)
# particles
random.seed(43)
for _ in range(58):
    x=random.randint(35,W-35); y=random.randint(70,H-70)
    # avoid central face
    if W*.29<x<W*.71 and H*.08<y<H*.58: continue
    rad=random.choice([1,1,2,2,3])
    col=random.choice([(166,93,255,130),(255,214,52,150),(220,180,95,120),(240,240,255,100)])
    d.ellipse((x-rad,y-rad,x+rad,y+rad),fill=col)
# tiny interface glyphs
font='/home/spazio/.fonts/cl/Manrope.ttf'
f=ImageFont.truetype(font,15)
d.text((35,35),'CL // BIOINTERFACE 01',font=f,fill=G)
d.text((W-35,H-43),'COSMOS LUMINOSITY',font=f,fill=G,anchor='ra')
d.text((35,H-43),'SELF / FUTURE / SIGNAL',font=f,fill=(235,230,245,150))

# glow layer + crisp layer
soft=fx.filter(ImageFilter.GaussianBlur(8)); soft.putalpha(soft.getchannel('A').point(lambda a:int(a*.42)))
base=Image.alpha_composite(base,soft)
base=Image.alpha_composite(base,fx)

# 5. Light face-safe sharpening concentrated globally but restrained.
sharp=ImageEnhance.Sharpness(base.convert('RGB')).enhance(1.22)
sharp.save(out,quality=96,subsampling=0)
print(out, sharp.size)
