Ctrl K
ComunidadGuías…

figma-export/find_glows.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import glob
import os
import colorsys
from PIL import Image

SRC = r"C:\Users\Abolfazl\Desktop\Phonix\figma-export\assets\images"

def analyze(path):
    try:
        im = Image.open(path).convert("RGBA")
    except Exception:
        return None
    w, h = im.size
    if w < 350 or h < 350:
        return None
    small = im.resize((48, 48))
    px = small.load()
    sat_pixels = []  # (sat, r,g,b)
    light = 0
    opaque = 0
    total = 48 * 48
    for y in range(48):
        for x in range(48):
            r, g, b, a = px[x, y]
            if a > 40:
                opaque += 1
            if r > 200 and g > 200 and b > 200 and a > 40:
                light += 1
            mx, mn = max(r, g, b), min(r, g, b)
            if a > 60 and mx > 80 and (mx - mn) > 18:
                sat_pixels.append((mx - mn, r, g, b))
    if not sat_pixels:
        return None
    sat_pixels.sort(reverse=True)
    # peak = average of the top 30 most saturated pixels (the glow core)
    top = sat_pixels[:30]
    pr = sum(p[1] for p in top) // len(top)
    pg = sum(p[2] for p in top) // len(top)
    pb = sum(p[3] for p in top) // len(top)
    hue = colorsys.rgb_to_hsv(pr / 255, pg / 255, pb / 255)[0] * 360
    return {
        "file": os.path.basename(path),
        "size": (w, h),
        "peak": (pr, pg, pb),
        "hex": f"#{pr:02X}{pg:02X}{pb:02X}",
        "hue": round(hue),
        "light_frac": round(light / max(opaque, 1), 2),
        "colored_frac": round(len(sat_pixels) / total, 2),
    }

rows = []
for p in glob.glob(os.path.join(SRC, "*.png")):
    r = analyze(p)
    if r:
        rows.append(r)

def cat(hue):
    if hue <= 22 or hue >= 330:
        return "PINK/RED"
    if 225 <= hue <= 285:
        return "PURPLE"
    return ""

# glow-like = large, soft (high light_frac OR moderate colored), single soft hue
glows = [r for r in rows if cat(r["hue"]) and r["light_frac"] > 0.25 and r["colored_frac"] < 0.85]
glows.sort(key=lambda r: (-(r["size"][0] * r["size"][1])))

print("=== GLOW CANDIDATES (large, soft, pink or purple) ===")
for r in glows[:20]:
    print(f'{cat(r["hue"]):9} {r["hex"]} hue={r["hue"]:>3} light={r["light_frac"]} colored={r["colored_frac"]} {r["size"][0]}x{r["size"][1]}  {r["file"]}')