Antes --color solo escribía los campos de color en Local State (info_cache), que únicamente tiñen el círculo del avatar en el selector de perfiles. Ahora --color aplica además el tema del navegador (toolbar, frame/bordes, barra de pestañas y omnibox), que es lo que permite identificar un perfil de un vistazo. El tema vive en el Preferences del perfil, no en Local State. La función ahora escribe browser.theme.user_color2 (SkColor ARGB con signo), browser_color_variant y is_grayscale2, y fuerza extensions.theme.system_theme=0. Escribe también las claves legacy sin sufijo "2" por compatibilidad de versiones. Nuevo flag --variant <0..4> (default 3 vibrant) para la intensidad del tinte. Backup y validación del Preferences con el mismo patrón que Local State. Claves verificadas empíricamente con captura de pantalla en Chromium 148: un perfil lanzado con estas claves muestra la toolbar y el frame teñidos del color. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8.9 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.1.0 | impure | set_chrome_profile_appearance --user-data-dir <dir> --profile <dir-name> [--avatar <N|ruta.png>] [--color <#rrggbb>] [--variant <0..4>] [--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). Con --color aplica el tinte tanto al círculo del avatar en Local State (profile_highlight_color, profile_color_seed, default_avatar_fill_color) como al tema completo del navegador en el Preferences del perfil (browser.theme.user_color2, browser_color_variant, extensions.theme.system_theme), tiñendo toolbar, frame, barra de pestañas y omnibox. Requiere que Chromium esté cerrado sobre el user-data-dir. Hace backup de Local State y Preferences antes de escribir y valida el JSON resultante. |
|
false | error_go_core | false | bash/functions/browser/set_chrome_profile_appearance.sh |
|
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>,"theme_applied":true|false,"variant":<int>,"preferences_path":"...","browser_theme_user_color2":<int>,"browser_theme_color_variant":<int>,"extensions_theme_system_theme":<int>,"backup":"Local State.bak.YYYYMMDD"}. En dry-run: {"profile":"...","avatar_applied":true|false,"color_applied":true|false,"theme_applied":true|false,"variant":<int>,"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 #30 y tinte verde a toolbar/frame/omnibox del perfil Automation
# (verde #16a34a tiñe toda la chrome del navegador, no solo el círculo del avatar)
set_chrome_profile_appearance \
--user-data-dir ~/.config/chromium-cdp \
--profile Automation \
--avatar 30 \
--color "#16a34a"
# Salida JSON incluye: theme_applied:true, variant:3, browser_theme_user_color2:-15293622
# Color con intensidad personalizada (expressive = máxima saturación)
set_chrome_profile_appearance \
--user-data-dir ~/.config/chromium-cdp \
--profile Scraping \
--color "#1f6feb" \
--variant 4
# Solo cambiar avatar (no toca Preferences del perfil)
set_chrome_profile_appearance \
--user-data-dir ~/.config/chromium-cdp \
--profile "Profile 1" \
--avatar 5
# Dry-run: ver qué se aplicaría en Local State y Preferences sin escribir
set_chrome_profile_appearance \
--user-data-dir ~/.config/chromium-cdp \
--profile Automation \
--avatar 30 \
--color "#16a34a" \
--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 Y en la chrome del navegador (toolbar/frame visible mientras navega). 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. Si solo quieres teñir el círculo del avatar (sin el tema), basta esta función; si quieres el tinte completo del navegador (lo más identificable), pasa --color.
Gotchas
- Chromium debe estar cerrado: Chrome reescribe
Local StateyPreferencescompletos 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 conpgrep -x chromiumfiltrando por cmdline y sale con exit 2 antes de modificar nada. Usapkill -TERM chromiumpara cerrar y espera unos segundos. - El tema se escribe en Preferences del perfil, distinto de Local State: los cambios de color al avatar van en
<user-data-dir>/Local State(global a todos los perfiles); los cambios de tema del navegador van en<user-data-dir>/<profile_dir>/Preferences(específico de cada perfil). La función hace backup de ambos archivos por separado antes de tocarlos. - El perfil debe existir en info_cache: esta función personaliza perfiles existentes; no los crea. Usa
create_chrome_profileprimero (con--no-launchbasta para que aparezca en Local State) y luegoset_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#16a34a(verde) da ARGB0xFF16A34A→ signed int32-15293622. La función hace la conversión internamente; tú pasas siempre hex#rrggbb. - En modo oscuro del sistema el tinte sale más apagado: en temas oscuros del sistema el color se mezcla con el fondo oscuro y queda menos saturado. Para compensar, usa
--variant 3(vibrant, default) o--variant 4(expressive); valores bajos como 1 o 2 pueden resultar casi imperceptibles en modo oscuro. extensions.theme.system_themese fuerza a 0: si el perfil usaba el tema GTK del sistema (system_theme=1), el GTK puede ignorar eluser_color. Esta función lo fuerza a 0 (tema propio de Chrome) para que eluser_color2tenga efecto. Si quieres devolver el perfil al tema del sistema, tendrás que resetearsystem_thememanualmente.- Avatar custom (imagen) es best-effort: el campo
gaia_picture_file_nameyis_using_default_avatar=falsese 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.YYYYMMDDyPreferences.bak.YYYYMMDDantes de cualquier escritura. Si ya existen los backups del día no se sobreescriben. Si el JSON resultante es inválido, se restaura automáticamente el backup correspondiente.
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 o Preferences (JSON inválido tras escritura, restaurado backup) |
Capability growth log
v1.1.0 (2026-06-06) — --color ahora aplica también el tema del navegador (toolbar/frame/omnibox) escribiendo browser.theme.user_color2 + browser_color_variant en el Preferences del perfil, no solo el color del avatar en Local State. Nuevo flag --variant (0..4, default 3 vibrant). Verificado con captura en Chromium 148.