brand-kit/tools/trace_logo.py
jedarden d51a763da8 Vectorize logo: SVG source + render all logo assets from vector
Trace the flat-color logo to source/logo.svg (palette-locked to the canonical
brand colors via tools/trace_logo.py), and render every avatar/favicon/logo
master from the SVG at its exact size (tools/build_assets.py via resvg). Logo
assets are now crisp at any resolution — removes the 640px upscale ceiling.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 08:22:22 -04:00

51 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""Vectorize the raster logo into source/logo.svg (true infinite-scale vector).
The logo is flat cartoon line-art (~4 colors), so we:
1. Snap every pixel to the exact canonical brand palette (no color drift,
and anti-aliasing fringes collapse into clean regions), then
2. Trace the flat image to colored SVG paths with vtracer.
Requires the `vtracer` binary (cargo install vtracer).
Run: python3 tools/trace_logo.py
"""
import subprocess
import tempfile
from pathlib import Path
from PIL import Image
ROOT = Path(__file__).resolve().parent.parent
SRC = ROOT / "source"
# Exact canonical brand palette — see README.
PALETTE = [
0xEF, 0xDE, 0xCC, # canvas cream (background)
0xDC, 0x31, 0x27, # polo red
0xF5, 0xB0, 0x79, # skin tan
0x0A, 0x0A, 0x08, # ink (outlines + hair)
]
def main():
im = Image.open(SRC / "logo.png").convert("RGB")
pal = Image.new("P", (1, 1))
# Pad to 256 entries by repeating ink, so stray pixels never snap to a
# color outside the palette (e.g. pure black).
pal.putpalette(PALETTE + PALETTE[9:12] * (256 - 4))
flat = im.quantize(palette=pal, dither=Image.NONE).convert("RGB")
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tf:
flat.save(tf.name)
subprocess.run(
["vtracer", "--input", tf.name, "--output", str(SRC / "logo.svg"),
"--colormode", "color", "--mode", "spline",
"--filter_speckle", "8", "--color_precision", "8",
"--corner_threshold", "60", "--segment_length", "4",
"--splice_threshold", "45"],
check=True,
)
print("wrote", SRC / "logo.svg")
if __name__ == "__main__":
main()