| # make_gopu_badge.py | |
| from PIL import Image, ImageDraw, ImageFont | |
| import math | |
| W, H = 1200, 400 | |
| BG = (8, 10, 12) # deep near-black | |
| ACCENT = (24, 190, 88) # Gopu green | |
| ACCENT_2 = (120, 255, 190) | |
| TEXT = (230, 235, 240) # soft white | |
| GRID = (20, 28, 32) | |
| TITLE = "GopuOS" | |
| SUB = "Agent 2K FDF" | |
| TAG = "Exclusive • Introspectable • Modular" | |
| img = Image.new("RGB", (W, H), BG) | |
| draw = ImageDraw.Draw(img) | |
| # Load fonts (fallback to default if not found) | |
| def load_font(name, size): | |
| try: | |
| return ImageFont.truetype(name, size) | |
| except: | |
| return ImageFont.load_default() | |
| font_title = load_font("DejaVuSans-Bold.ttf", 120) | |
| font_sub = load_font("DejaVuSans.ttf", 56) | |
| font_tag = load_font("DejaVuSans.ttf", 36) | |
| font_mono = load_font("DejaVuSansMono.ttf", 28) | |
| # Subtle grid background | |
| for y in range(0, H, 20): | |
| draw.line([(0, y), (W, y)], fill=GRID, width=1) | |
| for x in range(0, W, 20): | |
| draw.line([(x, 0), (x, H)], fill=GRID, width=1) | |
| # Accent diagonal bars | |
| for i in range(0, 60): | |
| y = int(H * 0.15 + i * 2) | |
| x0 = int(W * 0.55 - i * 8) | |
| x1 = W | |
| col = ( | |
| int(ACCENT[0] + (ACCENT_2[0] - ACCENT[0]) * (i / 60)), | |
| int(ACCENT[1] + (ACCENT_2[1] - ACCENT[1]) * (i / 60)), | |
| int(ACCENT[2] + (ACCENT_2[2] - ACCENT[2]) * (i / 60)), | |
| ) | |
| draw.rectangle([x0, y, x1, y + 3], fill=col) | |
| # Badge ring | |
| cx, cy, r = 140, 200, 90 | |
| for t in range(0, 360, 2): | |
| a = math.radians(t) | |
| x = cx + int(r * math.cos(a)) | |
| y = cy + int(r * math.sin(a)) | |
| draw.ellipse([x - 3, y - 3, x + 3, y + 3], fill=ACCENT) | |
| # Inner icon: stylized neuron-kernel | |
| draw.ellipse([cx - 36, cy - 36, cx + 36, cy + 36], outline=ACCENT, width=4) | |
| for i, ang in enumerate([0, 72, 144, 216, 288]): | |
| a = math.radians(ang) | |
| x = cx + int(44 * math.cos(a)) | |
| y = cy + int(44 * math.sin(a)) | |
| draw.line([cx, cy, x, y], fill=ACCENT, width=4) | |
| draw.ellipse([x - 6, y - 6, x + 6, y + 6], fill=ACCENT) | |
| # Title and subtitle | |
| draw.text((240, 120), TITLE, font=font_title, fill=TEXT) | |
| draw.text((248, 240), SUB, font=font_sub, fill=ACCENT) | |
| # Tag line | |
| draw.text((248, 300), TAG, font=font_tag, fill=(180, 190, 196)) | |
| # Signature stripe | |
| draw.rectangle([0, H - 18, W, H], fill=(14, 18, 22)) | |
| draw.text((18, H - 32), "🧠 GopuOS — Live, Modular, Agentic", font=font_mono, fill=(150, 160, 168)) | |
| img.save("gopu_badge.png", format="PNG", optimize=True) | |
| print("Saved gopu_badge.png") | |