Plan Maestro: Automatización 100% CLI y Headless para Google Vids

Este documento detalla la arquitectura técnica, las razones por las que la automatización anterior se veía interrumpida por el cambio de pestañas, y las 3 alternativas viables para controlar Google Vids exclusivamente mediante terminal (CLI) en segundo plano (headless).


1. Diagnóstico Técnico: ¿Por qué fallaba al cambiar de pestañas?

Hasta ahora se utilizaba automatización basada en coordenadas de pantalla (DISPLAY=:0, pyautogui, xwd):

  1. Puntero y Foco Compartidos: El ratón físico y el gestor de ventanas de Linux (X11) son un recurso único y compartido. Si un script envía un clic a (x=1323, y=190) mientras tú estás navegando en Brave o escribiendo en Obsidian, el clic impacta en la ventana activa de tu monitor.
  2. Desplazamiento Dinámico del DOM: En Google Vids, las barras laterales y los menús cambian de posición según la resolución, el zoom de la página o los tooltips flotantes.
  3. Bloqueo de Seguridad de Chrome (v111+): Chrome prohíbe terminantemente activar --remote-debugging-port sobre la carpeta personal ~/.config/google-chrome/Default. Si se intenta forzar, Chrome se cierra de inmediato arrojando el error:
    DevTools remote debugging requires a non-default data directory. Specify this using --user-data-dir.

2. La Solución Real: Control Headless por Selectores DOM

¿Cómo funciona la arquitectura Headless?

┌────────────────────────────────────────────────────────────────────────┐
│ Tu Entorno de Trabajo (DISPLAY=:0)                                     │
│  - Brave, Obsidian, Terminal, Navegación normal                        │
│  - Tu ratón y teclado están 100% libres                                │
└───────────────────────────────────┬────────────────────────────────────┘
                                    │ NO interfieren entre sí
┌───────────────────────────────────▼────────────────────────────────────┐
│ Motor CLI en Segundo Plano (Playwright / Chromium Headless)            │
│  - Proceso de Chrome aislado en memoria (sin ventana física en pantalla)│
│  - No usa coordenadas (x, y); usa selectores semánticos del DOM        │
│  - Acceso directo al árbol HTML mediante WebSocket interno (CDP)       │
└────────────────────────────────────────────────────────────────────────┘
  1. Selectores DOM Semánticos: En lugar de hacer clic en un píxel, Playwright busca los elementos por su identificador accesible:
    • page.locator("button[aria-label*='Vídeo con IA']")
    • page.locator("div[role='tab']:has-text('Crear')")
    • page.locator("textarea, [contenteditable='true']")
    • page.locator("button:has-text('Generar')")
  2. Aislamiento Total: Al no existir ventana visible en tu escritorio, puedes cambiar de pestaña, minimizar aplicaciones o bloquear la pantalla sin que el proceso se entere ni se interrumpa.

3. Comparativa de Alternativas para Implementar el CLI

CriterioAlternativa 1: Perfil Persistente Playwright (Recomendada)Alternativa 2: Extensión Sidecar LocalAlternativa 3: Motor Local 100% Autónomo (Three.js)
MecanismoPlaywright con directorio de datos dedicado (~/.config/google-vids-cli).Extensión interna en tu Chrome que escucha un servidor local en localhost:8080.Renderizado en tu máquina con Three.js + Playwright + FFmpeg.
AutenticaciónRequiere iniciar sesión en Google 1 sola vez en una ventana inicial. Luego queda guardada para siempre.Usa tu sesión actual de Chrome sin volver a iniciar sesión.No requiere Google Vids ni conexión a internet.
Independencia de Pantalla100% Headless: No toca tu ratón, corre en segundo plano.Corre dentro de la pestaña en segundo plano de tu Chrome.100% Headless en segundo plano.
Tiempo de GeneraciónDepende de la nube de Google (~2 a 3 min por clip de 10s).Depende de la nube de Google (~2 a 3 min por clip de 10s).Ultrarrápido: Video completo de 60s en ~60 segundos.
Límite de DuraciónClips de 10 segundos (limitación de Google Vids).Clips de 10 segundos.Sin límites: 1 minuto, 2 minutos, etc.

4. Plan de Implementación Paso a Paso (Alternativa 1 - CLI Headless Robusto)

Fase 1: Inicialización del Perfil Aislado y Sesión Segura

  • Paso 1.1: Crear un directorio de datos independiente para el CLI:
    ~/.config/google-vids-cli (evita el bloqueo de seguridad de Chrome 111+).
  • Paso 1.2: Crear el comando de configuración inicial:
    python cli_vids.py auth
    Abre una ventana única por 60 segundos para que inicies sesión en Google Workspace una sola vez y almacena los tokens encriptados de forma permanente.

Fase 2: Mapeo de Selectores DOM en Google Vids

  • Paso 2.1: Mapear los selectores web sin dependencia de coordenadas:
    • Botón de nuevo proyecto vertical: button:has-text('Vertical')
    • Botón de panel IA: button[aria-label*='Vídeo con IA']
    • Input de texto de Gemini: textarea, div[contenteditable='true']
    • Botón Generar / Aplicar: button:has-text('Generar')
    • Línea de tiempo y escenas: div[role='region'][aria-label*='escena']

Fase 3: Controlador CLI Desacoplado (src/engine_vids/headless_cli.py)

  • Paso 3.1: Implementar subcomandos CLI reutilizables:
    • python cli_vids.py status → Comprueba si la sesión de Google Vids está activa.
    • python cli_vids.py new --title "Mi Proyecto" → Crea un lienzo vertical limpio.
    • python cli_vids.py generate-ai --prompt "..." → Inyecta el prompt, dispara la generación en la nube y espera la respuesta sin bloquear tu monitor.
    • python cli_vids.py upload --file video.mp4 → Carga medios locales directamente a la biblioteca.
  • Paso 3.2: Captura de logs y eventos mediante Playwright sin depender de capturas de pantalla globales.