All checks were successful
CI / test (push) Successful in 52s
* 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
169 lines
5.7 KiB
Markdown
169 lines
5.7 KiB
Markdown
# yt-local
|
|
|
|
Un cliente local de YouTube que se ejecuta en tu máquina. Sin anuncios, sin JavaScript, con soporte para Tor.
|
|
|
|
<p align="center">
|
|
<a href="#caracteristicas">Características</a> •
|
|
<a href="#instalación">Instalación</a> •
|
|
<a href="#uso">Uso</a> •
|
|
<a href="#tor">Tor</a> •
|
|
<a href="#desarrollo">Desarrollo</a>
|
|
</p>
|
|
|
|
---
|
|
|
|
## ¿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
|
|
|
|
```bash
|
|
python3 -m venv venv
|
|
source venv/bin/activate
|
|
pip install -r requirements.txt
|
|
python server.py
|
|
```
|
|
|
|
### Windows
|
|
|
|
Descarga el zip de [Releases](https://github.com/user234683/youtube-local/releases) y ejecuta `run.bat`.
|
|
|
|
### Con Make
|
|
|
|
```bash
|
|
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](https://github.com/einaregilsson/Redirector) para redirigir YouTube automáticamente:
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| Patrón | `^(https?://(?:[a-zA-Z0-9_-]*\.)?(?:youtube\.com|youtu\.be|youtube-nocookie\.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:**
|
|
```bash
|
|
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](https://torservers.net/donate.html).
|
|
|
|
## Importar suscripciones
|
|
|
|
1. Ve a [Google Takeout](https://takeout.google.com/takeout/custom/youtube)
|
|
2. Selecciona solo "subscriptions" y descarga el CSV
|
|
3. 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
|
|
|
|
```bash
|
|
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](LICENSE).
|
|
|
|
## Proyectos similares
|
|
|
|
- [invidious](https://github.com/iv-org/invidious) Similar a este proyecto, pero permite alojarlo como servidor para muchos usuarios
|
|
- [Yotter](https://github.com/ytorg/Yotter) Similar a este proyecto y a invidious. También soporta Twitter
|
|
- [FreeTube](https://github.com/FreeTubeApp/FreeTube) (Similar a este proyecto, pero es una app Electron fuera del navegador)
|
|
- [youtube-local](https://github.com/user234683/youtube-local) primer proyecto en el que se basa yt-local
|
|
- [NewPipe](https://newpipe.schabi.org/) (app para Android)
|
|
- [mps-youtube](https://github.com/mps-youtube/mps-youtube) (programa solo para terminal)
|
|
- [youtube-viewer](https://github.com/trizen/youtube-viewer)
|
|
- [smtube](https://www.smtube.org/)
|
|
- [Minitube](https://flavio.tordini.org/minitube), [github aquí](https://github.com/flaviotordini/minitube)
|
|
- [toogles](https://github.com/mikecrittenden/toogles) (solo inserta videos, no usa mp4)
|
|
- [YTLibre](https://git.sr.ht/~heckyel/ytlibre) solo extrae video
|
|
- [youtube-dl](https://rg3.github.io/youtube-dl/), en el que se basó este proyecto
|