Files
fn_registry/bash/functions/browser/set_chrome_profile_appearance.md
T
egutierrez 25054ff64e feat(browser): set_chrome_profile_appearance — avatar + color de perfiles Chrome
Nueva función Bash del dominio browser para personalizar la apariencia de un
perfil Chrome/Chromium y diferenciarlo de un vistazo. Edita
`profile.info_cache.<perfil>` en el Local State del user-data-dir:

- `--avatar <N>`: avatar built-in de Chrome (índice 0..55) vía
  `avatar_icon = chrome://theme/IDR_PROFILE_AVATAR_<N>`. Camino robusto.
- `--avatar <ruta.png>`: avatar custom best-effort (copia la imagen al perfil y
  marca `is_using_default_avatar=false`); ver gotchas del .md.
- `--color <#rrggbb>`: color del perfil. Convierte el hex a int32 con signo en
  formato ARGB (0xAARRGGBB) y lo aplica a `profile_highlight_color`,
  `profile_color_seed` y `default_avatar_fill_color`.

Sigue el patrón de create/delete_chrome_profile: backup del Local State antes de
escribir, validación del JSON resultante con restauración del backup si queda
inválido, guard de SingletonLock (chromium debe estar cerrado), idempotente y
con --dry-run. No crea perfiles (eso es create_chrome_profile); requiere que el
perfil ya exista. Probada con --avatar 26 --color #1f6feb y casos edge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 09:57:12 +02:00

6.5 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path params output
set_chrome_profile_appearance function bash browser 1.0.0 impure set_chrome_profile_appearance --user-data-dir <dir> --profile <dir-name> [--avatar <N|ruta.png>] [--color <#rrggbb>] [--dry-run] Personaliza la apariencia visual de un perfil Chrome/Chromium existente: asigna un avatar built-in (índice 0..55) o una imagen PNG/JPG custom, y/o un color de acento (hex #rrggbb). Edita los campos avatar_icon, is_using_default_avatar, profile_highlight_color, profile_color_seed y default_avatar_fill_color en profile.info_cache de Local State. Requiere que Chromium esté cerrado sobre el user-data-dir. Hace backup de Local State antes de escribir y valida el JSON resultante.
navegator
chromium
profile
browser
cdp
scraping
appearance
avatar
color
false error_go_core
false
bash/functions/browser/set_chrome_profile_appearance.sh
name desc
--user-data-dir Raíz del user-data-dir de Chrome/Chromium donde vive el perfil. El directorio y Local State deben existir. Obligatorio.
name desc
--profile Nombre de la carpeta del perfil dentro de user-data-dir, por ejemplo: Default, Automation, "Profile 1". El perfil debe existir previamente en info_cache de Local State. Obligatorio.
name desc
--avatar Índice entero 0..55 del avatar built-in de Chrome (56 avatares: animales, objetos, personas) o ruta absoluta/relativa a un archivo PNG/JPG para avatar custom. Con índice: sets avatar_icon=IDR_PROFILE_AVATAR_<N> e is_using_default_avatar=true. Con imagen: copia el archivo al perfil como 'Google Profile Picture.png' y sets is_using_default_avatar=false. Opcional; al menos uno de --avatar o --color debe darse.
name desc
--color Color de acento del perfil en hex #rrggbb, con o sin el '#' inicial. Se convierte internamente a int32 con signo en formato ARGB 0xFFRRGGBB y se aplica a profile_highlight_color, profile_color_seed y default_avatar_fill_color. Opcional; al menos uno de --avatar o --color debe darse.
name desc
--dry-run Describe las acciones que se ejecutarían (campos a modificar, conversión de color) sin escribir nada ni verificar si Chromium está corriendo. Emite JSON de resultado con dry_run:true.
JSON en stdout con los campos resultantes del perfil: {"profile":"<dir>","avatar_icon":"...","is_using_default_avatar":true|false,"profile_highlight_color":<int>,"profile_color_seed":<int>,"default_avatar_fill_color":<int>,"backup":"Local State.bak.YYYYMMDD"}. En dry-run: {"profile":"...","avatar_applied":true|false,"color_applied":true|false,"dry_run":true}. Mensajes de diagnóstico a stderr. Exit 0 en éxito.

Ejemplo

source $HOME/fn_registry/bash/functions/browser/set_chrome_profile_appearance.sh

# Asignar avatar built-in #26 (oso panda) y color azul GitHub al perfil Automation
set_chrome_profile_appearance \
  --user-data-dir ~/.config/chromium-cdp \
  --profile Automation \
  --avatar 26 \
  --color "#1f6feb"
# Salida JSON con los valores aplicados

# Solo cambiar color (sin tocar avatar)
set_chrome_profile_appearance \
  --user-data-dir ~/.config/chromium-cdp \
  --profile Default \
  --color "16a34a"

# Solo cambiar avatar built-in
set_chrome_profile_appearance \
  --user-data-dir ~/.config/chromium-cdp \
  --profile "Profile 1" \
  --avatar 5

# Avatar custom desde imagen
set_chrome_profile_appearance \
  --user-data-dir ~/.config/chromium-cdp \
  --profile Personal \
  --avatar /tmp/foto.png \
  --color "#0ea5e9"

# Dry-run: ver qué se aplicaría sin escribir
set_chrome_profile_appearance \
  --user-data-dir ~/.config/chromium-cdp \
  --profile Automation \
  --avatar 26 \
  --color "#1f6feb" \
  --dry-run

Cuando usarla

Úsala para diferenciar visualmente los perfiles de un user-data-dir de automatización — un color y avatar distintos por perfil hacen inmediata la identificación en el selector de Chrome. Ejecútala justo después de create_chrome_profile (con --no-launch) o como paso independiente de personalización batch antes de lanzar sesiones CDP.

Gotchas

  • Chromium debe estar cerrado: Chrome reescribe Local State completo desde memoria al cerrar; si se ejecuta mientras hay un proceso chromium vivo sobre el mismo user-data-dir, Chrome sobreescribirá los cambios al salir. La función detecta esto con pgrep -x chromium filtrando por cmdline y sale con exit 2 antes de modificar nada. Usa pkill -TERM chromium para cerrar y espera unos segundos.
  • El perfil debe existir en info_cache: esta función personaliza perfiles existentes; no los crea. Usa create_chrome_profile primero (con --no-launch basta para que aparezca en Local State) y luego set_chrome_profile_appearance.
  • color es int32 con signo en ARGB: Chrome almacena el color como entero con signo de 32 bits en formato 0xAARRGGBB. Un color como #1f6feb (azul) da ARGB 0xFF1F6FEB → signed int32 -14713877. La función hace la conversión internamente; tú pasas siempre hex #rrggbb.
  • Avatar custom (imagen) es best-effort: el campo gaia_picture_file_name y is_using_default_avatar=false se aplican correctamente en Local State y la imagen se copia al directorio del perfil. Sin embargo, Chrome puede ignorar la foto de perfil en perfiles sin sesión Google activa (Chromium sin cuenta). El camino robusto y garantizado es usar el índice built-in (--avatar 0..55): 56 avatares (animales, objetos, personas) son más que suficientes para diferenciar perfiles de automatización.
  • Backup diario: se crea Local State.bak.YYYYMMDD en el user-data-dir antes de cualquier escritura. Si ya existe el backup del día no se sobreescribe. Si el JSON resultante es inválido, se restaura automáticamente el backup.
  • is_using_default_avatar con índice built-in: Chrome considera los avatares IDR_PROFILE_AVATAR_* como "avatares por defecto" del sistema, por eso is_using_default_avatar permanece true con índice numérico. Esto es correcto y es lo que Chrome haría internamente.

Exit codes

Código Significado
0 Éxito
1 Argumento obligatorio faltante, rango inválido o archivo de imagen no encontrado
2 Lock: hay un chromium usando el mismo user-data-dir
3 El perfil no existe en info_cache de Local State
4 Error editando Local State (JSON inválido tras escritura, restaurado backup)