netsky 0.1.6

netsky CLI: the viable system launcher and subcommand dispatcher
Documentation
#!/usr/bin/env -S uv run
# /// script
# requires-python = ">=3.11"
# dependencies = ["pillow>=10"]
# ///
"""Strip the near-black background from the netsky logo + crop + square-pad.

Output variants written to `website/static/`:
  - netsky-mark-transparent.png        (full resolution, transparent)
  - netsky-mark-transparent-512.png    (og-image / share)
  - netsky-mark-hero.png               (480px, hero usage)

Run: `uv run scripts/make-transparent-logo.py [SRC_PATH]`
Default SRC_PATH = ~/Desktop/netsky-mark-source.png
"""

import sys
from pathlib import Path

from PIL import Image

ROOT = Path(__file__).resolve().parent.parent
STATIC = ROOT / "website" / "static"
DEFAULT_SRC = Path.home() / "Desktop" / "netsky-mark-source.png"

# Max channel value (0-255) treated as background. Feather for
# THRESHOLD+40 for a soft halo that preserves the violet glow.
THRESHOLD = 28
FEATHER = 40


def strip_and_square(src: Path) -> Image.Image:
    img = Image.open(src).convert("RGBA")
    px = img.load()
    w, h = img.size
    for y in range(h):
        for x in range(w):
            r, g, b, a = px[x, y]
            brightness = max(r, g, b)
            if brightness <= THRESHOLD:
                px[x, y] = (0, 0, 0, 0)
            elif brightness < THRESHOLD + FEATHER:
                t = (brightness - THRESHOLD) / FEATHER
                px[x, y] = (r, g, b, min(a, int(255 * t)))

    bbox = img.getbbox()
    cropped = img.crop(bbox) if bbox else img
    cw, ch = cropped.size
    side = max(cw, ch)
    square = Image.new("RGBA", (side, side), (0, 0, 0, 0))
    square.paste(cropped, ((side - cw) // 2, (side - ch) // 2), cropped)
    return square


def main() -> None:
    src = Path(sys.argv[1]) if len(sys.argv) > 1 else DEFAULT_SRC
    if not src.exists():
        sys.exit(f"source not found: {src}")
    STATIC.mkdir(parents=True, exist_ok=True)

    square = strip_and_square(src)
    square.save(STATIC / "netsky-mark-transparent.png", "PNG")
    square.resize((512, 512), Image.LANCZOS).save(
        STATIC / "netsky-mark-transparent-512.png", "PNG"
    )
    square.resize((480, 480), Image.LANCZOS).save(
        STATIC / "netsky-mark-hero.png", "PNG"
    )
    print(f"src:  {src}")
    print(f"full: {square.size} -> {STATIC / 'netsky-mark-transparent.png'}")
    print(f"512:  -> {STATIC / 'netsky-mark-transparent-512.png'}")
    print(f"hero: 480 -> {STATIC / 'netsky-mark-hero.png'}")


if __name__ == "__main__":
    main()