Files
OmniOilPersonal/services/edge-agent/wix/generate_assets.py
Wilman Yesid Farfan Diaz 78b56807b0
Some checks failed
Build, MSI & Deploy / Build Docker images (push) Failing after 6m30s
Build, MSI & Deploy / Deploy to Dokploy (push) Has been skipped
Build, MSI & Deploy / Build Edge Agent Binaries (push) Failing after 1s
Build, MSI & Deploy / Send notification (push) Successful in 0s
Build, MSI & Deploy / Build Edge Agent MSI (push) Has been skipped
fix(ci): secuenciar build y push de tags para evitar perdida de etiquetas
2026-07-11 19:57:24 -05:00

114 lines
4.5 KiB
Python

import os
import sys
import subprocess
# Asegurar que Pillow este instalado
try:
from PIL import Image, ImageDraw, ImageFont
except ImportError:
print("Pillow no esta instalado. Instalando...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "Pillow"])
from PIL import Image, ImageDraw, ImageFont
def generate_assets():
wix_dir = os.path.dirname(os.path.abspath(__file__))
agent_dir = os.path.dirname(wix_dir)
# Rutas
logo_path = os.path.join(agent_dir, "icon_custom.png")
if not os.path.exists(logo_path):
logo_path = os.path.join(agent_dir, "icon.png")
dialog_bmp_path = os.path.join(wix_dir, "dialog.bmp")
banner_bmp_path = os.path.join(wix_dir, "banner.bmp")
# Paleta de colores OmniOil
color_bg = (9, 11, 15) # #090b0f
color_primary = (255, 122, 26) # #ff7a1a
color_text = (244, 247, 251) # #f4f7fb
color_muted = (154, 168, 186) # #9aa8ba
# Cargar logo si existe
logo = None
if os.path.exists(logo_path):
try:
logo = Image.open(logo_path).convert("RGBA")
print(f"Logo cargado desde {logo_path}")
except Exception as e:
print(f"No se pudo cargar el logo: {e}")
# ----------------------------------------------------
# 1. Generar dialog.bmp (493x312) - Bienvenida/Finalizacion
# ----------------------------------------------------
img_dialog = Image.new("RGB", (493, 312), color_bg)
draw_dialog = ImageDraw.Draw(img_dialog)
# Dibujar panel lateral con gradiente o color primario
draw_dialog.rectangle([0, 0, 164, 312], fill=(15, 20, 28)) # Un azul ligeramente mas claro
draw_dialog.rectangle([162, 0, 164, 312], fill=color_primary) # Linea naranja divisoria
# Colocar logo en el panel lateral
if logo:
# Redimensionar logo para el panel lateral (120x120)
logo_dialog = logo.resize((120, 120), Image.Resampling.LANCZOS)
# Pegar con canal alfa
img_dialog.paste(logo_dialog, (22, 96), logo_dialog)
# Textos principales (Usamos fuentes estandar para evitar fallos si no existe Geist)
try:
font_title = ImageFont.truetype("arial.ttf", 20)
font_subtitle = ImageFont.truetype("arial.ttf", 12)
font_body = ImageFont.truetype("arial.ttf", 10)
except IOError:
font_title = ImageFont.load_default()
font_subtitle = ImageFont.load_default()
font_body = ImageFont.load_default()
draw_dialog.text((185, 30), "OmniOil Analytics", fill=color_primary, font=font_title)
draw_dialog.text((185, 55), "Edge Agent Setup Wizard", fill=color_text, font=font_title)
body_text = (
"Este asistente instalara el componente de telemetria\n"
"Edge Agent en su equipo local.\n\n"
"El agente se ejecutara como un servicio de Windows en\n"
"segundo plano para recolectar y reportar datos industriales\n"
"bajo los lineamientos de la Resolucion ANH 0651/2025.\n\n"
"Desarrollado por KYRBOT INNOVATIONS S.A.S.\n"
"NIT 902002081-8"
)
draw_dialog.text((185, 110), body_text, fill=color_muted, font=font_body)
# Guardar como BMP de 24 bits
img_dialog.save(dialog_bmp_path, "BMP")
print(f"dialog.bmp generado exitosamente en {dialog_bmp_path}")
# ----------------------------------------------------
# 2. Generar banner.bmp (493x58) - Banner superior interno
# ----------------------------------------------------
img_banner = Image.new("RGB", (493, 58), color_bg)
draw_banner = ImageDraw.Draw(img_banner)
# Linea naranja inferior
draw_banner.rectangle([0, 56, 493, 58], fill=color_primary)
# Colocar logo pequeno a la derecha
if logo:
logo_banner = logo.resize((42, 42), Image.Resampling.LANCZOS)
img_banner.paste(logo_banner, (435, 8), logo_banner)
try:
font_banner_title = ImageFont.truetype("arial.ttf", 12)
font_banner_sub = ImageFont.truetype("arial.ttf", 9)
except IOError:
font_banner_title = ImageFont.load_default()
font_banner_sub = ImageFont.load_default()
draw_banner.text((15, 12), "OmniOil Edge Agent", fill=color_primary, font=font_banner_title)
draw_banner.text((15, 28), "Configuracion de Telemetria Industrial", fill=color_text, font=font_banner_sub)
# Guardar como BMP de 24 bits
img_banner.save(banner_bmp_path, "BMP")
print(f"banner.bmp generado exitosamente en {banner_bmp_path}")
if __name__ == "__main__":
generate_assets()