______ ___ ______ __
_________ ___ ____/ / __ \____ _____/ (_)___ / __ \ \/ /
/ ___/ __ `__ \/ __ / /_/ / __ `/ __ / / __ \/ /_/ /\ /
/ /__/ / / / / / /_/ / _, _/ /_/ / /_/ / / /_/ / ____/ / /
\___/_/ /_/ /_/\__,_/_/ |_|\__,_/\__,_/_/\____/_/ /_/
Reproductor de radio online, principalmente se nutre de datos de listas .M3U, pero permite búsqueda online, reproducción aleatoria y continua, gestión de favoritos, historial de últimas escuchas, estadísticas de uso, descarga de playlists desde GitHub y búsqueda en repositorios remotos.
Escucha radio internacionales o temáticas, todo ello desde tu terminal, consumiendo menos de 15 Megas de memoria RAM.
- Publicado release
v1.2.9con artefactos Windows y Linux y sus archivossha256. - Contador de emisoras visible en el listado de playlists (
nombre [N]). - Caché persistente de contadores de playlists para arranque más rápido.
- Release más reciente: https://github.com/smelpillow/cmdRadioPy/releases/latest
- Release v1.2.9: https://github.com/smelpillow/cmdRadioPy/releases/tag/v1.2.9
cmdradiopy-win64.zip: https://github.com/smelpillow/cmdRadioPy/releases/download/v1.2.9/cmdradiopy-win64.zipcmdradiopy-win64.sha256: https://github.com/smelpillow/cmdRadioPy/releases/download/v1.2.9/cmdradiopy-win64.sha256
- Release v1.2.9 (assets Linux): https://github.com/smelpillow/cmdRadioPy/releases/tag/v1.2.9
cmdradiopy_1.2.9-1_all.deb: https://github.com/smelpillow/cmdRadioPy/releases/download/v1.2.9/cmdradiopy_1.2.9-1_all.debcmdradiopy_1.2.9-1_all.deb.sha256: https://github.com/smelpillow/cmdRadioPy/releases/download/v1.2.9/cmdradiopy_1.2.9-1_all.deb.sha256
- Descarga
cmdradiopy-win64.zipdesde la release. - Descomprime el zip en una carpeta local, por ejemplo
C:\Apps\cmdradiopy. - Ejecuta
cmdradiopy.exe. - Asegurate de tener
mpvinstalado y en PATH.
Opcional (PowerShell):
choco install mpv- Descarga
cmdradiopy_1.2.9-1_all.debdesde la release. - Instala el paquete con
apt:
sudo apt install ./cmdradiopy_1.2.9-1_all.deb- Ejecuta:
cmdradiopy --version
cmdradiopySi apt no resuelve dependencias en tu distro derivada:
sudo dpkg -i ./cmdradiopy_1.2.9-1_all.deb
sudo apt-get -f install -yPara usar la app necesitas disponer de listas .m3u/.m3u8.
- Opcion 1: copiar tus listas manualmente en el directorio de usuario:
- Windows:
%APPDATA%\cmdRadioPy\playlists\ - Linux/Mac:
~/.config/cmdRadioPy/playlists/
- Windows:
- Opcion 2: descargarlas desde la propia app (menu principal, opcion
10) o desde el repositorio remoto soportado por la aplicacion.
Nota: aunque algun artefacto de release puede incluir playlists iniciales, se recomienda mantener/actualizar tus listas en el directorio de usuario.
- Empaquetado Windows automatizado por tag con GitHub Actions (
vX.Y.Z). - Build reproducible de
cmdradiopy-win64.zipcon generación de SHA256. - Metadatos de packaging actualizados para GPL-3.0 (Scoop/Chocolatey/Debian).
- Corrección de render del encabezado ASCII en GitHub.
- OSD rediseñada y más limpia: sin logo ASCII superior, mejor distribución de bloques y controles en varias líneas.
- "Ahora suena" y buffer mejorados: el buffer usa
cache-buffering-statede mpv y se muestra debajo del título de canción. - Acciones directas en OSD: añadir/quitar favorito (
F), marcar emisora como no reproducible (B) y salto al siguiente canal (N). - Volumen persistente: al usar
+/-en OSD se guarda automáticamente enconfig.jsonpara próximas reproducciones. - Consumo en tiempo real: nueva línea con uso aproximado de CPU y RAM del proceso (
KB/MBsegún corresponda).
- mpv instalado y accesible en PATH
- Windows: instalar
mpv(por ejemplo conchoco install mpv) y asegurarse quempv.exeesté en PATH - Linux:
sudo apt install mpvo el gestor de paquetes equivalente - macOS:
brew install mpv
- Windows: instalar
- Python 3.9+
- (Recomendado) Para iconos en la interfaz:
pip install charstyle(si no está instalado, se usarán caracteres Unicode básicos) - (Opcional) Para mejor soporte de colores en Windows:
pip install colorama - Licencia del proyecto: GPL-3.0
pip install -r requirements.txtpipx install "cmdradiopy[ui]"Luego ejecútalo con:
cmdradiopy- Coloca tus listas M3U/M3U8 en el directorio de datos del usuario:
- Windows:
%APPDATA%\cmdRadioPy\playlists\ - Linux/Mac:
~/.config/cmdRadioPy/playlists/ - Si vienes de versiones anteriores, la app migra automáticamente listas desde
playlists/del proyecto al primer arranque.
- Ejecuta:
python main.pyPara ver la versión actual:
python main.py --version-
Menú principal (organizado por secciones):
REPRODUCCIÓN
-
- Mostrar canales (elige playlist y luego canal)
-
- Reproducción aleatoria (global) — atajo
r
- Reproducción aleatoria (global) — atajo
-
- Reproducir último canal — atajo
u/l
- Reproducir último canal — atajo
BÚSQUEDA
-
- Buscar en canales locales (búsqueda global en tus playlists) — atajo
/
- Buscar en canales locales (búsqueda global en tus playlists) — atajo
-
- Buscar online (Radio Browser) — atajo
b
- Buscar online (Radio Browser) — atajo
-
- Buscar en repositorio remoto — atajo
g
- Buscar en repositorio remoto — atajo
GESTIÓN
-
- Favoritos (incluye editar, exportar JSON/M3U, importar, validar URLs, buscar y aleatorio)
-
- Historial (incluye exportar/importar, limpiar, reproducir último y aleatorio)
-
- Estadísticas (top emisoras, resumen, fuentes más usadas) — atajo
s
- Estadísticas (top emisoras, resumen, fuentes más usadas) — atajo
CONFIGURACIÓN Y DATOS
-
- Descargar playlists desde GitHub — atajo
d
- Descargar playlists desde GitHub — atajo
-
- Configuración (incluye exportar/importar configuración completa) — atajo
c
- Configuración (incluye exportar/importar configuración completa) — atajo
-
- Salir — atajo
q
- Salir — atajo
-
-
Durante la reproducción usa la interfaz nativa de mpv (pulsa
qpara salir, etc.). -
mpv se lanza en modo solo audio desactivando el vídeo (
--no-video --vid=no).
Puedes activar la validación de URLs desde el menú de configuración (opción v). Cuando está activada, el programa comprobará si una URL está disponible antes de intentar reproducirla. Esto ayuda a evitar errores con emisoras que ya no están activas.
- Activación: Menú principal → 7 (Configuración) →
v - Configuración: Al activar, puedes establecer un timeout de validación (1-30 segundos, por defecto 5)
- Funcionamiento: Usa una petición HTTP ligera para verificar que la URL responde antes de iniciar la reproducción
La interfaz puede mostrar iconos visuales (emojis/Unicode) para mejorar la experiencia. Los iconos están habilitados por defecto y pueden activarse/desactivarse desde el menú de configuración (opción i).
- Listas paginadas (playlists, canales, historial):
- Numeración global: los índices continúan entre páginas (11, 12, ...)
- Vista en columnas: se adapta al ancho de la terminal
- Truncado: nombres largos se acortan con elipsis (…)
nsiguiente,panterior,gir a página #,0/qvolversalterna orden A↔Z;/filtra
- Selección de canales:
raleatorio entre resultados;fañadir/eliminar favorito por número - Favoritos:
eexportar JSON,mexportar M3U,iimportar,raleatoriovvalidar todas las URLs,/buscar/filtrar- Editar favoritos desde el submenú (cambiar nombre/URL)
- Historial:
lreproducir último canal,climpiar historial completo,raleatorio - Aleatorio: se omiten emisoras en
blacklisty si falla la reproducción se prueba otra automáticamente (hasta 3 intentos) - OSD propia (si está activada): tecla/botón
Npara “Siguiente canal”; en modos aleatorios salta directamente a otra emisora sin contar como fallo. - OSD propia: muestra consumo aproximado de la app en tiempo real (
CPU %yRAM MB) para visualizar el uso durante la reproducción. - Control de errores de emisoras: tras 3 fallos acumulados de conexión inicial, una emisora se marca como no reproducible y se omite en selección/aleatorio.
- Revisión de no reproducibles: desde Configuración puedes listar emisoras marcadas, desmarcar una o desmarcar todas.
- La interfaz usa colores ANSI; en Windows se habilitan automáticamente si
coloramaestá instalado. - Los conteos de elementos se muestran en títulos y headers para mejor orientación.
- Estadísticas: muestra top emisoras, totales, fuentes más escuchadas y últimas reproducciones.
- Búsqueda mejorada: historial de búsquedas, sugerencias inteligentes basadas en favoritos e historial, y validación de longitud mínima.
- Limpieza automática del historial: configurable por días o número máximo de entradas.
- Endpoints con fallback; se respeta
user_agentyproxydeconfig.json. - Filtros opcionales: país, idioma y bitrate mínimo.
- Tras la búsqueda, puedes listar resultados, reproducir aleatorio, añadir a favoritos y queda en
history.json.
- Búsqueda en tiempo real en el repositorio junguler/m3u-radio-music-playlists sin descargar archivos.
- Opciones de búsqueda:
- Todas las categorías disponibles (23+ categorías)
- Solo estilos más populares (12 categorías)
- Selección personalizada de categorías
- Los resultados se pueden reproducir directamente o descargar las categorías completas.
- No ocupa espacio en disco: busca sin descargar archivos.
El programa permite descargar playlists directamente desde el repositorio junguler/m3u-radio-music-playlists, que contiene una extensa colección de listas M3U categorizadas por género musical.
- Lista completa: Descarga
everything-full.m3ucon todas las emisoras disponibles - Una categoría: Descarga una categoría específica (Rock, Pop, Jazz, etc.)
- Múltiples categorías: Selección personalizada con checkboxes para descargar varias categorías a la vez
- Estilos más populares: Descarga rápida de los 12 estilos más populares con un solo clic
Rock, Pop, Electronic, Hip Hop, Jazz, Classical, Country, Reggae, Metal, Dance, Techno, House, Trance, Latin, Funk, Blues, Alternative, Indie, Hard Rock, Acid Jazz, Smooth Jazz, Eurodance, J-Pop y más.
Agradecimiento: Este proyecto utiliza y agradece el excelente trabajo del repositorio junguler/m3u-radio-music-playlists de @junguler, que proporciona una extensa colección de listas M3U categorizadas y actualizadas regularmente. ¡Gracias por compartir este valioso recurso con la comunidad!
Archivo opcional ubicado en el directorio de datos del usuario:
- Windows:
%APPDATA%\cmdRadioPy\config.json - Linux/Mac:
~/.config/cmdRadioPy/config.json(o$XDG_CONFIG_HOME/cmdRadioPy/config.json)
Desde el menú de configuración (opción 7), puedes:
- Exportar (e): Guarda en un archivo JSON toda tu configuración, favoritos e historial. Útil para hacer backups o transferir a otro sistema.
- Importar (i): Restaura configuración, favoritos, historial y emisoras no reproducibles desde un archivo de exportación. Permite elegir qué importar y muestra un resumen antes de confirmar.
Campos soportados:
user_agent: string (ej. "Mozilla/5.0 ...")proxy: string (ej. "http://127.0.0.1:8080")retries: número de reintentos si falla la reproducción (0-5)retry_delay_sec: segundos entre reintentos (0-10)ui_spacing: "comfortable" (más aire) o "compact" (más denso)page_size: tamaño de página para listas (5-100)sort_playlists: "asc" o "desc"sort_channels: "asc" o "desc"volume: volumen por defecto de mpv (0-130), por defecto 40shutdown_minutes: tiempo de apagado automático (0 para desactivar)blacklist: array de palabras/fragmentos a excluir en aleatorio (coincidencia por texto en nombre/URL)validate_urls: boolean, activa validación de URLs antes de reproducir (por defectofalse)url_validation_timeout: segundos de timeout para validación (1-30, por defecto 5)show_icons: boolean, mostrar iconos en la interfaz (por defectotrue)min_search_length: número mínimo de caracteres para búsquedas (por defecto 3)history_cleanup_mode: modo de limpieza automática del historial: "none", "days" o "count"history_cleanup_days: días de antigüedad para limpiar (si mode es "days")history_cleanup_max_entries: número máximo de entradas en historial (si mode es "count")
Ejemplo:
{
"user_agent": "Mozilla/5.0",
"proxy": "http://127.0.0.1:8080",
"retries": 2,
"retry_delay_sec": 2,
"ui_spacing": "comfortable",
"page_size": 20,
"sort_playlists": "asc",
"sort_channels": "asc",
"volume": 40,
"shutdown_minutes": 0,
"blacklist": ["demo", "prueba"],
"validate_urls": false,
"url_validation_timeout": 5,
"show_icons": true,
"min_search_length": 3,
"history_cleanup_mode": "none",
"history_cleanup_days": 30,
"history_cleanup_max_entries": 500
}main.py: CLI con paginación, columnas, colores, búsqueda, favoritos (export/import/aleatorio), configuración, historial (export/import/aleatorio) y búsqueda online con filtrosm3u_parser.py: parser de playlists.m3u/.m3u8player.py: integración conmpven modo audio (sin vídeo)version.py: versión central de la app (APP_VERSION) y metadatos de versionadoplaylists/: carpeta histórica del proyecto (las nuevas instalaciones usan el directorio de usuario)pyproject.toml: metadatos de empaquetado Python (base parapipx/PyPI)packaging/: plantillas iniciales para Scoop, Chocolatey y Debian/aptLICENSE: licencia GPL-3.0 del proyecto
Los siguientes archivos se guardan automáticamente en el directorio de datos del usuario:
- Windows:
%APPDATA%\cmdRadioPy\ - Linux/Mac:
~/.config/cmdRadioPy/config.json: configuración de red, reintentos, densidad UI, volumen, temporizador, blacklist, validación de URLs, iconos, búsqueda e historialplaylists/: listas M3U/M3U8 locales del usuario (lectura y descargas)favorites.json: favoritos persistenteshistory.json: historial de reproducciones (con limpieza automática opcional)search_history.json: historial de búsquedas para sugerenciasunplayable_stations.json: emisoras marcadas como no reproducibles por fallos de conexión inicial
- Si
mpvno está en PATH, el programa mostrará instrucciones de instalación. - El modo "aleatorio global" selecciona una playlist aleatoria y luego un canal aleatorio dentro (no uniformemente por número de canales).
- El empaquetado Windows publica un zip con
cmdradiopy.exey playlists iniciales incluidas en el artefacto de release por tag (vX.Y.Z).