Documentación

Instala la extensión, registra el host de Native Messaging y verifica la cadena de herramientas.

1. Inicio rápido

Operant es una extensión multi-navegador en Manifest V3. No requiere paso de build para desarrollo.

Desarrollo
npm install
npm run dev

Alternativamente, abre chrome://extensions (o edge://extensions), activa el modo desarrollador y carga la extensión descomprimida.

2. Instalación del host nativo

El host nativo (native-host/operant_host.py) es el proceso en Python que corre fuera del sandbox y controla ffmpeg y yt-dlp. Chromium exige que esté registrado en el sistema.

Windows (Chrome y Edge)
native-host\install_host.bat <extension-id>
¿Por qué un wrapper .bat?
Si el manifest apuntara directamente al .py, Windows abriría una ventana de consola visible. El wrapper lanza pythonw.exe, manteniendo la ejecución silenciosa.
Linux / macOS
chmod +x native-host/install_host.sh
./native-host/install_host.sh <extension-id>

3. Protocolo de mensajería

La comunicación usa canales stdio estructurados según la especificación de Chromium:

  • Prefijo de longitud: entero sin signo de 4 bytes en little endian (uint32).
  • Cuerpo del mensaje: JSON codificado en UTF-8.
Ping / pong
{ "type": "ping" }

{
  "type": "pong",
  "tools": {
    "ytDlp": { "installed": true, "version": "2026.03.11", "source": "app" },
    "ffmpeg": { "installed": true, "version": "7.1", "source": "app" }
  }
}

4. Operaciones ffmpeg

OperaciónSalidaArgumentos claveUso
extract-mp3.mp3-vn -c:a libmp3lame -b:a 192kExtracción rápida de audio
remux-mp4.mp4-c copy -movflags +faststartConversión sin pérdida
compress.mp4-c:v libx264 -crf 28 -preset veryfastReducción de tamaño
resize-50.mp4-vf scale=iw*0.5:ih*0.5Reducción dimensional
hls-dash.mp4-c copy (URL directa)Ensamblado m3u8 / mpd
dash-merge.mp4-c copy (vídeo + audio)Fusión de pistas separadas

5. Testing

Suites deterministas con Puppeteer y Chrome for Testing:

# 10 casos deterministas locales (galerías, lazy loading, HLS local, shadow DOM)
npm run test:verify

# + 5 casos contra sitios públicos reales
npm run test:verify:public

# Auditoría visual del side panel
npm run test:audit