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):
- 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. - 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.
- Bloqueo de Seguridad de Chrome (v111+): Chrome prohíbe terminantemente activar
--remote-debugging-portsobre 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) │
└────────────────────────────────────────────────────────────────────────┘
- 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')")
- 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
| Criterio | Alternativa 1: Perfil Persistente Playwright (Recomendada) | Alternativa 2: Extensión Sidecar Local | Alternativa 3: Motor Local 100% Autónomo (Three.js) |
|---|---|---|---|
| Mecanismo | Playwright 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ón | Requiere 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 Pantalla | 100% 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ón | Depende 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ón | Clips 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']
- Botón de nuevo proyecto vertical:
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.