feat: complete academic symbol lexicon heal, 2-column Cooper extraction, and updated assets
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
import math
|
||||
import numpy as np
|
||||
from PIL import Image, ImageDraw, ImageFilter
|
||||
|
||||
SIZE = 1024
|
||||
CENTER = SIZE / 2.0
|
||||
|
||||
bg = Image.new('RGBA', (SIZE, SIZE), (2, 4, 12, 255))
|
||||
bdraw = ImageDraw.Draw(bg)
|
||||
|
||||
np.random.seed(777)
|
||||
for _ in range(400):
|
||||
x = np.random.randint(0, SIZE)
|
||||
y = np.random.randint(0, SIZE)
|
||||
br = np.random.randint(150, 255)
|
||||
sz = np.random.choice([1, 1, 2, 2, 3], p=[0.7, 0.2, 0.07, 0.02, 0.01])
|
||||
bdraw.ellipse([x, y, x + sz, y + sz], fill=(br, br, 255, br))
|
||||
|
||||
N_POINTS = 13
|
||||
R_TIP = SIZE * 0.46
|
||||
R_VALLEY = SIZE * 0.28
|
||||
R_MEDALLION = SIZE * 0.255
|
||||
R_CORE = SIZE * 0.09
|
||||
|
||||
start_angle = -math.pi / 2.0
|
||||
|
||||
tips = []
|
||||
valleys = []
|
||||
for i in range(N_POINTS):
|
||||
ang_tip = start_angle + i * (2.0 * math.pi / N_POINTS)
|
||||
ang_val = ang_tip + (math.pi / N_POINTS)
|
||||
tips.append((CENTER + R_TIP * math.cos(ang_tip), CENTER + R_TIP * math.sin(ang_tip)))
|
||||
valleys.append((CENTER + R_VALLEY * math.cos(ang_val), CENTER + R_VALLEY * math.sin(ang_val)))
|
||||
|
||||
star_layer = Image.new('RGBA', (SIZE, SIZE), (0, 0, 0, 0))
|
||||
sdraw = ImageDraw.Draw(star_layer)
|
||||
|
||||
GOLD_CORE = (255, 255, 240, 255) # incandescent white-gold
|
||||
GOLD_MAIN = (255, 215, 80, 240) # warm celestial amber-gold
|
||||
GOLD_GLOW = (220, 160, 20, 90)
|
||||
|
||||
# Fill rays with deep translucent astral gradient
|
||||
for i in range(N_POINTS):
|
||||
p_tip = tips[i]
|
||||
p_vl = valleys[(i - 1) % N_POINTS]
|
||||
p_vr = valleys[i]
|
||||
sdraw.polygon([CENTER, CENTER, p_vl[0], p_vl[1], p_tip[0], p_tip[1]], fill=(35, 28, 12, 120))
|
||||
sdraw.polygon([CENTER, CENTER, p_tip[0], p_tip[1], p_vr[0], p_vr[1]], fill=(50, 38, 16, 150))
|
||||
|
||||
# Sacred tridecagram linear lattice (subtle geometric star web inside)
|
||||
for i in range(N_POINTS):
|
||||
p1 = tips[i]
|
||||
p2 = tips[(i + 3) % N_POINTS]
|
||||
sdraw.line([p1[0], p1[1], p2[0], p2[1]], fill=(255, 210, 70, 40), width=1)
|
||||
|
||||
# Fine outer outlines of the 13 rays
|
||||
for i in range(N_POINTS):
|
||||
p_tip = tips[i]
|
||||
p_vl = valleys[(i - 1) % N_POINTS]
|
||||
p_vr = valleys[i]
|
||||
|
||||
# Glow outline
|
||||
sdraw.line([p_vl[0], p_vl[1], p_tip[0], p_tip[1]], fill=GOLD_GLOW, width=5)
|
||||
sdraw.line([p_tip[0], p_tip[1], p_vr[0], p_vr[1]], fill=GOLD_GLOW, width=5)
|
||||
sdraw.line([CENTER, CENTER, p_tip[0], p_tip[1]], fill=GOLD_GLOW, width=5)
|
||||
|
||||
# Sharp gold line
|
||||
sdraw.line([p_vl[0], p_vl[1], p_tip[0], p_tip[1]], fill=GOLD_MAIN, width=2)
|
||||
sdraw.line([p_tip[0], p_tip[1], p_vr[0], p_vr[1]], fill=GOLD_MAIN, width=2)
|
||||
sdraw.line([CENTER, CENTER, p_tip[0], p_tip[1]], fill=GOLD_CORE, width=2)
|
||||
|
||||
# Medallion
|
||||
med_layer = Image.new('RGBA', (SIZE, SIZE), (0, 0, 0, 0))
|
||||
mdraw = ImageDraw.Draw(med_layer)
|
||||
|
||||
mdraw.ellipse([CENTER - R_MEDALLION, CENTER - R_MEDALLION, CENTER + R_MEDALLION, CENTER + R_MEDALLION], fill=(6, 8, 18, 250), outline=GOLD_MAIN, width=3)
|
||||
mdraw.ellipse([CENTER - R_MEDALLION + 6, CENTER - R_MEDALLION + 6, CENTER + R_MEDALLION - 6, CENTER + R_MEDALLION - 6], outline=(255, 240, 160, 160), width=1)
|
||||
|
||||
# Chrome Triskelion - 3 curved wings (number 9 loops sharing 1 central circle)
|
||||
# Center circle:
|
||||
mdraw.ellipse([CENTER - R_CORE, CENTER - R_CORE, CENTER + R_CORE, CENTER + R_CORE], fill=(3, 5, 14, 255), outline=GOLD_MAIN, width=4)
|
||||
mdraw.ellipse([CENTER - R_CORE + 4, CENTER - R_CORE + 4, CENTER + R_CORE - 4, CENTER + R_CORE - 4], outline=GOLD_CORE, width=1)
|
||||
|
||||
# Chrome pinwheel curved ribbon blades
|
||||
for k in range(3):
|
||||
rot = start_angle + k * (2.0 * math.pi / 3.0)
|
||||
outer_pts = []
|
||||
inner_pts = []
|
||||
steps = 50
|
||||
for s in range(steps + 1):
|
||||
t = s / float(steps)
|
||||
cr = R_CORE + t * (R_MEDALLION - R_CORE - 10)
|
||||
ca = rot + t * 1.35
|
||||
|
||||
bx = CENTER + cr * math.cos(ca)
|
||||
by = CENTER + cr * math.sin(ca)
|
||||
outer_pts.append((bx, by))
|
||||
|
||||
thick = (1.0 - t * 0.8) * 16
|
||||
ir = max(R_CORE, cr - thick)
|
||||
ix = CENTER + ir * math.cos(ca + 0.08)
|
||||
iy = CENTER + ir * math.sin(ca + 0.08)
|
||||
inner_pts.append((ix, iy))
|
||||
|
||||
poly = outer_pts + inner_pts[::-1]
|
||||
mdraw.polygon(poly, fill=(180, 130, 20, 120))
|
||||
|
||||
# Sharp gold boundary
|
||||
for p in range(len(outer_pts) - 1):
|
||||
mdraw.line([outer_pts[p], outer_pts[p+1]], fill=GOLD_CORE, width=2)
|
||||
for p in range(len(inner_pts) - 1):
|
||||
mdraw.line([inner_pts[p], inner_pts[p+1]], fill=GOLD_MAIN, width=1)
|
||||
|
||||
comp = Image.alpha_composite(bg, star_layer)
|
||||
comp = Image.alpha_composite(comp, med_layer)
|
||||
|
||||
bloom = comp.filter(ImageFilter.GaussianBlur(8))
|
||||
final_img = Image.blend(comp, bloom, 0.22)
|
||||
|
||||
out_file = '/home/alexives/.gemini/antigravity-ide/brain/4ff924d9-3d7f-4202-9066-3ac5c3088b8e/star_exact_13_gold_filigree_ribbons.png'
|
||||
final_img.save(out_file, 'PNG')
|
||||
print("Rendered ribbons variant to", out_file)
|
||||
Reference in New Issue
Block a user