Licensing (GPL-3.0 preserved): - NOTICE attributes the ComfyUI upstream and the fork's modifications, GPL-3.0. - README credits upstream ComfyUI prominently and states GPL-3.0. Branding (frontend served from the comfyui-frontend-package static dir): - apply-branding.sh installs the Hanzo favicon (svg + multi-res ico), injects icon links, sets <title>Hanzo Studio</title>, and patches display strings. - make_favicon.py renders the committed favicon.ico from favicon.svg. Hanzo Engine nodes (custom_nodes/hanzo_engine/, OpenAI-compatible HTTP): - HanzoChat, HanzoImageGen, HanzoVisionCaption, HanzoSaveText. Graceful node errors on connection failure. Fashion/swimwear starter workflows (user/default/workflows/fashion/): - fashion_product_shot (FLUX.2 klein t2i), fashion_edit_garment (Qwen-Image-Edit i2i), fashion_caption_dataset (Hanzo vision caption loop). Each carries a Note node with usage and required files.
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Render branding/favicon.svg to a multi-resolution favicon.ico.
|
|
|
|
Source of truth is favicon.svg (the Hanzo mark). The .ico is a committed build
|
|
artifact so that apply-branding.sh can install it without needing a rasterizer
|
|
in the Docker image. Re-run this whenever favicon.svg changes:
|
|
|
|
rsvg-convert must be on PATH (librsvg2-bin); Pillow provides ICO packing.
|
|
python3 branding/make_favicon.py
|
|
"""
|
|
import os
|
|
import subprocess
|
|
import tempfile
|
|
|
|
from PIL import Image
|
|
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
SVG = os.path.join(HERE, "favicon.svg")
|
|
ICO = os.path.join(HERE, "favicon.ico")
|
|
SIZES = [16, 32, 48, 64, 128, 256]
|
|
|
|
|
|
def render_png(size: int, path: str) -> None:
|
|
subprocess.run(
|
|
["rsvg-convert", "-w", str(size), "-h", str(size), SVG, "-o", path],
|
|
check=True,
|
|
)
|
|
|
|
|
|
def main() -> None:
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
frames = []
|
|
for size in SIZES:
|
|
png = os.path.join(tmp, f"favicon-{size}.png")
|
|
render_png(size, png)
|
|
frames.append(Image.open(png).convert("RGBA"))
|
|
base = frames[-1]
|
|
base.save(ICO, format="ICO", sizes=[(s, s) for s in SIZES])
|
|
print(f"Wrote {ICO} ({os.path.getsize(ICO)} bytes) sizes={SIZES}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|