* Add complete Spanish translation (README.es.md) * Restructure English README for clarity and conciseness * Filter out YouTube Shorts from channel video listings (sort=4) * Add fallback for video count using playlist metadata when API returns zero * Add get_playlist_metadata() to fetch metadata without full video list * Add is_short() utility to detect YouTube Shorts by duration, badges, and type * Export is_short from yt_data_extract for use across modules
5.7 KiB
yt-local
Un cliente local de YouTube que se ejecuta en tu máquina. Sin anuncios, sin JavaScript, con soporte para Tor.
Características • Instalación • Uso • Tor • Desarrollo
¿Qué es?
yt-local es un servidor web local que actúa como proxy entre tu navegador y YouTube. Las páginas se cargan rápido, sin anuncios ni tracking. Las peticiones pueden pasar por Tor de forma opcional.
No usa la API de YouTube. Hace las mismas peticiones que haría la web normal, pero sin todo lo demás.
Características
- Navegación anónima con Tor opcional
- Sin anuncios ni JavaScript
- Tres temas: claro, gris y oscuro
- Listas de reproducción locales (no se pierden si YouTube borra videos)
- Sistema de suscripciones independiente de YouTube
- Soporte de subtítulos
- Segmentos de SponsorBlock saltados automáticamente
- Calidades de 144p a 2160p con soporte HLS
- Descarga de videos (desactivada por defecto)
- Comentarios visibles al instante, sin lazy-loading
Instalación
Linux / macOS
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python server.py
Windows
Descarga el zip de Releases y ejecuta run.bat.
Con Make
make install # Dependencias
make dev # Servidor
make test # Tests
make help # Todos los comandos
Uso
El servidor arranca en http://localhost:9010/
Para ver un video, añade el dominio como prefijo:
http://localhost:9010/https://www.youtube.com/watch?v=VIDEO_ID
Redirector
Puedes usar una extensión del navegador como Redirector para redirigir YouTube automáticamente:
| Campo | Valor |
|---|---|
| Patrón | `^(https?://(?:[a-zA-Z0-9_-]*.)?(?:youtube.com |
| Redirigir a | http://localhost:9010/$1 |
| Modo | Expresión regular |
Activa "Iframes" en las opciones avanzadas para que funcionen los embeds.
Modo portable
Crea un archivo vacío settings.txt en el directorio principal. Así toda la configuración y datos se guardan ahí en vez de en ~/.yt-local.
Tor
Opción rápida: Tor Browser
Abre Tor Browser y déjalo abierto. En los ajustes de yt-local pon "Route Tor" en "On, except video".
Tor independiente
Debian/Ubuntu:
sudo apt install tor
sudo systemctl start tor
Cambia el puerto Tor a 9050 en los ajustes.
Windows:
Crea un acceso directo con: tor.exe SOCKSPort 9150 ControlPort 9151
Routing de video por Tor
Pon "Route Tor" en "On, including video". Es más lento y consume ancho de banda de la red Tor — considera hacer una donación a los nodos de Tor.
Importar suscripciones
- Ve a Google Takeout
- Selecciona solo "subscriptions" y descarga el CSV
- En yt-local, importa el archivo desde el gestor de suscripciones
Formatos soportados: CSV de Google Takeout, JSON de NewPipe, OPML, y JSON antiguo de Google Takeout.
Desarrollo
yt-local/
├── server.py # Punto de entrada, servidor WSGI
├── settings.py # Gestión de configuración
├── youtube/
│ ├── util.py # Funciones auxiliares, routing Tor
│ ├── watch.py # Página de video
│ ├── channel.py # Páginas de canal
│ ├── search.py # Búsquedas
│ ├── subscriptions.py # Suscripciones (SQLite)
│ ├── local_playlist.py # Listas locales
│ ├── yt_data_extract/ # Parser del JSON de YouTube
│ └── ...
├── tests/ # Tests con pytest
└── docs/HACKING.md # Guía de desarrollo
Comandos útiles
make test # Ejecutar tests
make lint # Verificar estilo
make i18n-extract # Extraer cadenas
make i18n-init LANG_CODE=fr # Nuevo idioma
make i18n-compile # Compilar traducciones
Python 3.8+ requerido. El código sigue PEP 8. Los mensajes de commit deben ser descriptivos.
Notas de compatibilidad
- Python 3.8+: Versión mínima requerida
- HLS: Soporte experimental para streaming en videos multi-audio
- Canales con limitaciones: Algunos canales devuelven pocos videos por respuesta. Esto es comportamiento de YouTube, no de yt-local. El proyecto usa la API interna de YouTube (innertube), no la API pública de YouTube.
Licencia
GNU AGPLv3 o posterior. Ver LICENSE.
Proyectos similares
- invidious Similar a este proyecto, pero permite alojarlo como servidor para muchos usuarios
- Yotter Similar a este proyecto y a invidious. También soporta Twitter
- FreeTube (Similar a este proyecto, pero es una app Electron fuera del navegador)
- youtube-local primer proyecto en el que se basa yt-local
- NewPipe (app para Android)
- mps-youtube (programa solo para terminal)
- youtube-viewer
- smtube
- Minitube, github aquí
- toogles (solo inserta videos, no usa mp4)
- YTLibre solo extrae video
- youtube-dl, en el que se basó este proyecto