← Proyectos

Video Accessibility

Extensión de Chrome que lleva los atajos de teclado de YouTube a cualquier web con un vídeo HTML. Saltar al 30 % con el 3, cambiar la velocidad, bucle A-B, filtros, modo cine y eventos personalizados para pulsar u ocultar cualquier botón con una tecla. Solo en las webs que tú eliges y todo en local.

Un vídeo en una web de demostración con el aviso "Salto al 30%" en el centro, tras pulsar la tecla 3
El popup de la extensión activo en la web, con los atajos básicos y un interruptor para apagar cada uno solo en ese sitioLa pestaña de eventos personalizados con un evento "Me gusta" que pulsa el botón .like-btn con Shift + LEl modo cine, con el resto de la página oscurecida y el vídeo destacado
atajos de serie
30
atajos de serie
idiomas
5
idiomas
datos enviados
0
datos enviados
tests (Vitest)
106
tests (Vitest)

Qué hace

  • Los atajos de YouTube, en cualquier <video>. Del 0 al 9 para saltar del 0 al 90 %, espacio para pausar, flechas para avanzar, retroceder y cambiar el volumen, M para silenciar, F para pantalla completa, + y - para la velocidad y P para picture-in-picture.
  • Lo que YouTube no trae. Bucle A-B, filtros de brillo, contraste y saturación, y un modo cine que oscurece el resto de la página.
  • Eventos personalizados. Una tecla que pulsa u oculta cualquier elemento a partir de un selector CSS, por ejemplo el botón de "me gusta". Sin tecla, se ejecutan solos al aparecer el elemento.
  • A tu medida. Todas las teclas se cambian, se pueden tener atajos distintos por web y, desde el popup, apagar un atajo solo en la web en la que estás.
  • Solo donde tú dices. La lista de webs permitidas empieza vacía. Aviso en pantalla configurable, tema claro u oscuro y cinco idiomas. Sin telemetría, sin analíticas y sin servidores.

Cómo está hecho

El script solo entra en tus webs

El manifiesto pide acceso a todas las webs para no tener que aceptar un permiso nuevo en cada una, pero el content script no se declara para ninguna. El service worker lo registra en tiempo de ejecución con chrome.scripting.registerContentScripts, solo para los dominios de la lista, y lo vuelve a registrar únicamente cuando la lista cambia.

Encontrar el vídeo que estás viendo

El script busca vídeos también dentro de shadow DOM y en los iframes cuyo dominio está en la lista. Si hay varios, elige el que se está reproduciendo y, si no, el más grande.

El popup y la página de opciones son Vue 3 con Tailwind. Los ajustes viven en chrome.storage, y el content script los escucha para aplicar los cambios sin recargar.

Problemas que resolví

  • No robar teclas. Si estás escribiendo en un campo, aunque esté dentro de shadow DOM, la extensión no hace nada. Tampoco con Ctrl, Alt o Cmd. Y un evento personalizado solo se queda la tecla si de verdad ha encontrado algo que pulsar.
  • Clics que los reproductores sí escuchan. Muchos botones reaccionan a mousedown y no a click, así que el clic simulado lanza la secuencia completa.
  • Un espacio que nunca coincidía. El atajo por defecto para pausar se guardaba como ' ' y la tecla llegaba como space. Ahora se normalizan los dos lados, también para los ajustes que ya estaban guardados.
  • Un aviso sin estilos. Al registrar el script en tiempo de ejecución, la hoja de estilos del aviso en pantalla se quedó fuera y el aviso salía como texto suelto debajo del vídeo. Ahora se registra junto al script, con un test que lo comprueba.

Stack

WXTManifest V3Vue 3TypeScriptTailwind CSSChrome Scripting APIChrome StorageMutationObserverShadow DOMVitestjsdomVue Test Utils