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 devAlternativamente, 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
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ón | Salida | Argumentos clave | Uso |
|---|---|---|---|
extract-mp3 | .mp3 | -vn -c:a libmp3lame -b:a 192k | Extracción rápida de audio |
remux-mp4 | .mp4 | -c copy -movflags +faststart | Conversión sin pérdida |
compress | .mp4 | -c:v libx264 -crf 28 -preset veryfast | Reducción de tamaño |
resize-50 | .mp4 | -vf scale=iw*0.5:ih*0.5 | Reducció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