Catálogo local de enlaces Acestream. Valida el Content ID, comprueba si hay peers, intenta capturar una imagen del stream y permite abrir el canal en VLC. Guarda la fecha de cada verificación porque los enlaces mueren y se reemplazan.
Versión 1.5.0. Ver CHANGELOG.md y plan.md.
- Alta de canales por Content ID o enlace
acestream://, con verificación automática. Sin título, se usa el nombre con el que se publica el stream. - Importación masiva: un enlace por línea, una lista M3U o un archivo exportado desde AceList.
- Explorador de fuentes: listas en la web o archivos del equipo (M3U, enlaces o exportaciones de AceList) que se leen para buscar en ellas y agregar al catálogo los canales elegidos. AceList no trae fuentes: las agrega cada usuario.
- Buscador en la barra superior: muestra los canales del catálogo que coinciden mientras se escribe.
- Exportación del catálogo (o de lo filtrado) a un archivo JSON con los datos de cada canal, para respaldo o para llevarlo a otro equipo.
- Verificación con el engine de Ace Stream: estado, peers y una captura del stream con ffmpeg, de la que se detecta la resolución (480p, 720p, 1080p, 4K u otra).
- Historial de verificaciones con fecha y captura de cada una.
- Re-verificación de un canal o de todos los del listado filtrado, en segundo plano y con progreso, y regeneración de capturas.
- Listado con orden (título, última verificación, peers, estado) y filtros (texto, categoría, idioma, país, estado, resolución), guardables en marcadores, y botón para copiar el hash.
- Galería tipo Netflix: los canales en tarjetas con su captura, agrupados por categoría, con etiquetas de resolución, categoría, idioma y país.
- Edición y borrado con confirmación; categoría, idioma y país por canal.
- Botón para abrir el canal en VLC.
- Ajustes con autodetección de VLC, ffmpeg y el engine, y prueba de conexión.
- Windows 10 u 11 de 64 bits.
- Ace Stream Media instalado (su engine responde en
http://127.0.0.1:6878). AceList puede abrirlo con el botón Iniciar de la barra superior. - VLC para reproducir.
- ffmpeg para las capturas (opcional: sin ffmpeg los canales se verifican igual, sin imagen).
No hace falta instalar Python: el ejecutable lo lleva dentro.
- En la página de releases, descarga
AceList-<versión>-win64.zip. - Descomprímelo donde quieras, por ejemplo en
Documentos\AceList. - Haz doble clic en
AceList.exe.
Se abre una consola que muestra lo que hace AceList y, cuando está listo, el navegador en http://127.0.0.1:8000/. Deja la consola abierta mientras lo uses; ciérrala para salir. Si AceList ya estaba abierto, solo se abre el navegador. Si el puerto 8000 lo usa otro programa, AceList toma el siguiente libre y lo indica en la consola.
AceList todavía no está firmado digitalmente, así que la primera vez Windows puede mostrar "Windows protegió su PC" (SmartScreen). Es el aviso habitual para programas que aún no son conocidos, no un diagnóstico de virus. Para abrirlo:
- Pulsa Más información.
- Pulsa Ejecutar de todos modos.
Para comprobar que el zip es el original, compara su huella con la del archivo .sha256 publicado junto a él:
Get-FileHash .\AceList-1.3.0-win64.zip -Algorithm SHA256La base de datos y las capturas se guardan en %LOCALAPPDATA%\AceList (escribe esa ruta en la barra del Explorador para abrirla), no en la carpeta del programa. Para hacer una copia de seguridad, copia esa carpeta o usa Exportar en el listado.
Cierra AceList, borra la carpeta del programa y descomprime la versión nueva en su lugar. Tus canales siguen en %LOCALAPPDATA%\AceList y la versión nueva actualiza la base de datos sola al arrancar.
Esa versión guarda los datos en la carpeta data\ del código. Para llevarlos al ejecutable, una de estas dos opciones:
- Exportar e importar: en la versión vieja, Exportar en el listado; en el ejecutable, sube el archivo en Importar. Se pasan los canales con todos sus datos, pero no el historial ni las capturas.
- Copiar la carpeta: con las dos versiones cerradas, copia el contenido de
data\(acelist.dbyscreenshots\) a%LOCALAPPDATA%\AceList. Se pasa todo, incluido el historial.
.\AceList.exe --port 8080 # usar ese puerto
.\AceList.exe --no-browser # no abrir el navegadorBorra la carpeta del programa. Si tampoco quieres conservar tus canales, borra %LOCALAPPDATA%\AceList.
Si prefieres ejecutarlo desde el código fuente (necesita Python 3.11 o superior):
- Descarga o clona el repositorio.
- Haz doble clic en
start.bat.
La primera vez crea el entorno virtual e instala las dependencias (tarda un minuto). Después aplica las migraciones, arranca el servidor y abre el navegador. Los datos quedan en la carpeta data\ del repositorio. Desde PowerShell, .\start.ps1 -Port 8080 usa otro puerto y .\start.ps1 -NoBrowser no abre el navegador.
- Ace Stream. La barra superior indica si Ace Stream está abierto (verde) o apagado (rojo). Si está apagado, Iniciar lo abre y espera a que responda; mientras está apagado no se verifica nada, para no marcar los canales como fallidos por culpa del servidor.
- Ajustes. La primera vez, entra en Ajustes, pulsa Autodetectar rutas y luego Guardar. Con Probar conexión se comprueba que el engine de Ace Stream responde.
- Agregar un canal. En Canales → Agregar canal, pega un Content ID (40 caracteres hexadecimales) o un enlace
acestream://y, si quieres, título, categoría, idioma, país y resolución. Sin título se usa el nombre que publica el stream (sin las URLs que a veces trae); si el engine aún no lo conoce, queda un título provisional en cursiva que se completa en la siguiente verificación. Al guardar se verifica con el engine: puede tardar unos segundos. - Importar varios. En Importar, pega una lista con un enlace por línea. El texto junto al enlace se usa como título (
Partido - acestream://…), y en una lista M3U se usa el título de#EXTINF. El resumen indica qué se creó, qué estaba repetido y qué líneas no se entendieron. Los canales nuevos se verifican en segundo plano. Con Exportar (en el listado o la galería) se descarga un archivo con los datos de los canales que se ven; al subirlo en Importar en otro equipo, o en este, se suman solo los canales que falten, con su categoría, idioma, país, resolución y fecha de alta. El historial y las capturas no se exportan. - Explorar fuentes. En Explorar → Fuentes, agrega una lista de la web con un nombre y su dirección (
http://ohttps://): una lista M3U, un texto con enlacesacestream://o una exportación de AceList, de hasta 5 MB y 5000 canales. AceList la descarga al agregarla y cada vez que pulsas Actualizar; si una descarga falla, se conservan los canales de la anterior y se muestra el motivo. También puedes usar un archivo de tu equipo (.m3u,.m3u8,.txto una exportación.json): arrástralo sobre el formulario, o sobre cualquier parte de Explorar, o elígelo con el selector. Toma el nombre del archivo si no escribes otro, y volver a subirlo con el mismo nombre reemplaza sus canales. En Explorar se busca por nombre, grupo (group-titlede la M3U) o Content ID entre los canales de las fuentes activas, con Solo los que no tengo para ocultar los que ya están en el catálogo. Marca los que quieras y pulsa Agregar los elegidos: se crean con el nombre de la lista (o el del stream, si la lista no trae nombre), en la categoría elegida, y se verifican en segundo plano. - Revisar el catálogo. El listado muestra la miniatura, la resolución, el estado y los peers de la última verificación, y hace cuánto fue (la fecha exacta al pasar el ratón). Haz clic en las cabeceras para ordenar y usa la barra de filtros; la URL guarda la vista. El texto busca en el título, la categoría y el Content ID. Desde cualquier página, el buscador de la barra superior (tecla
/) muestra los primeros canales que coinciden mientras escribes; Enter abre el listado filtrado. El botón junto al hash lo copia. Verificar los N canales vuelve a comprobar la disponibilidad y los peers de lo que se ve, en segundo plano, con una barra de progreso; no toca las capturas. Regenerar capturas además saca una captura nueva de cada canal activo (y actualiza su resolución): tarda más y pide confirmación. Los canales nuevos obtienen su primera captura al agregarlos o importarlos. - Galería. El selector Lista / Galería (o Galería en la barra superior) muestra los mismos canales como tarjetas con su captura, agrupadas por categoría. Usa los mismos filtros; el orden se elige en Ordenar por. Al pasar el ratón por una tarjeta aparece el botón para reproducir.
- Detalle. Al hacer clic en un título se ve la última captura, todos los datos y el historial de verificaciones. Desde allí se puede verificar de nuevo, sacar una nueva captura, abrir en el reproductor, editar o borrar. El historial muestra también el tamaño exacto de cada captura.
- Reproducir. Reproducir (en el listado) o Abrir en reproductor (en el detalle) inicia el stream en el engine y lo abre en VLC.
| Estado | Significado |
|---|---|
| Activo | El engine descargó datos con al menos los peers mínimos configurados. |
| Sin peers | El engine encontró el contenido pero no llegaron datos a tiempo. Puede revivir más tarde. |
| No encontrado | El engine no pudo cargar el Content ID: el enlace probablemente murió. |
| Error | No se pudo verificar (engine apagado, timeout, respuesta inesperada). Al pasar el ratón se ve el motivo. |
| Sin verificar | Todavía no tiene ninguna verificación. |
Los valores de Ajustes se guardan en la base de datos y tienen prioridad. Las variables de entorno sirven de valores por defecto:
| Variable | Por defecto | Uso |
|---|---|---|
ACELIST_DATA_DIR |
%LOCALAPPDATA%\AceList (ejecutable) o data (código) |
Carpeta de la base de datos (acelist.db) y las capturas (screenshots/). |
ACELIST_PORT |
8000 |
Puerto local con start.bat; el ejecutable usa --port. |
ACELIST_ENGINE_URL |
http://127.0.0.1:6878 |
URL del engine de Ace Stream. |
ACELIST_ENGINE_TIMEOUT |
15 |
Segundos de espera de cada petición al engine. |
ACELIST_VLC_PATH |
autodetección | Ruta de vlc.exe. |
ACELIST_FFMPEG_PATH |
PATH |
Ruta de ffmpeg.exe. |
ACELIST_SCREENSHOT_TIMEOUT |
30 |
Segundos máximos para sacar una captura. |
ACELIST_CHECK_CONCURRENCY |
2 |
Verificaciones simultáneas en segundo plano. |
Para hacer una copia de seguridad basta con copiar la carpeta de datos.
AceList es para uso local:
- Escucha solo en
127.0.0.1y rechaza peticiones dirigidas a otros nombres de host (protección contra DNS rebinding). - Rechaza envíos de formularios que vengan de otros sitios web (protección CSRF).
- VLC y ffmpeg se ejecutan sin shell, con argumentos validados.
No hay usuarios ni contraseñas: no lo expongas a la red.
| Síntoma | Qué revisar |
|---|---|
| "Ace Stream apagado" en la barra superior | Pulsa Iniciar, o abre Ace Stream a mano. Si no hay botón, indica la ruta de ace_engine.exe en Ajustes. |
| El indicador está en verde pero todo sale en "Error" | En Ajustes, revisa la URL del engine con Probar conexión. |
| "No se encontró VLC" | Instala VLC o indica la ruta de vlc.exe en Ajustes. |
| Canales activos sin captura | ffmpeg no está instalado o no se encuentra: Autodetectar rutas en Ajustes o indica la ruta de ffmpeg.exe. |
"Windows protegió su PC" al abrir AceList.exe |
Es SmartScreen con un programa sin firma: Más información → Ejecutar de todos modos (ver Aviso de Windows la primera vez). |
El antivirus bloquea AceList.exe |
Algunos antivirus desconfían de los programas hechos con PyInstaller (falso positivo). Comprueba el SHA-256 del zip y añade una excepción para la carpeta de AceList. |
| La consola se cierra con un mensaje de error | Léelo antes de pulsar Enter: suele ser que no hay puertos libres o que la carpeta de datos no se puede escribir. |
| El navegador no abre la página | Mira en la consola la dirección que indica AceList (puede haber usado otro puerto) y ábrela a mano. |
"Hace falta Python 3.11 o superior" (con start.bat) |
Instala Python desde python.org marcando Add python.exe to PATH, o usa el ejecutable. |
python -m venv .venv
.\.venv\Scripts\python -m pip install -e ".[dev]"
.\.venv\Scripts\ruff check .
.\.venv\Scripts\ruff format --check .
.\.venv\Scripts\pytest --cov # falla por debajo del 95% de cobertura
.\.venv\Scripts\alembic upgrade head
.\.venv\Scripts\python -m app.main # http://127.0.0.1:8000/Los tests no necesitan el engine ni ffmpeg: el engine se simula con respx y nunca se contacta uno real.
Para compilar el ejecutable: pip install -e ".[build]" y python windows\build.py (ver docs/packaging.md). Al publicar una release en GitHub, el CI lo compila, lo prueba y adjunta el zip.
Stack: Python, FastAPI, SQLite + SQLAlchemy (Alembic), Jinja2 + HTMX, httpx, ffmpeg. Detalle y justificación en plan.md.
El seguimiento se hace con issues de GitHub, etiquetados por fase (phase:N). Las siete fases de la versión 1.0 están completas.
| Fase | Objetivo | Issues |
|---|---|---|
| 0 | Base del proyecto y spike del engine | #1, #2, #3 |
| 1 | Persistencia | #4, #5 |
| 2 | Verificación | #6 a #10 |
| 3 | Gestión de canales | #11, #12 |
| 4 | Interfaz | #13 a #16 |
| 5 | Reproducción y ajustes | #17, #18 |
| 6 | Calidad y cierre | #19 a #22 |
- idea.md: idea original.
- plan.md: alcance, arquitectura, modelo de datos y fases.
- docs/engine-api.md: API del engine de Acestream observada en la práctica.
- docs/packaging.md: cómo se empaqueta el ejecutable para Windows.
- CHANGELOG.md: registro de cambios.
MIT.