Files
yt-local/README.es.md
Jesus c6c8030907
All checks were successful
CI / test (push) Successful in 52s
feat: add Spanish README and improve channel/playlist handling
* 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
2026-04-12 20:20:32 -05:00

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