Video 9:16 · Fútbol · automático

Lo que dijo el fútbol de YouTube, en 3 minutos

Los 10 mayores canales de fútbol de YouTube (Brasileirão, fútbol europeo, mercado de fichajes y polémicas), transcritos, verificados y resumidos en un video con la fuente en pantalla y Nei comentando.

Banner RADAR FÚTBOL: lo que dijeron los 10 mayores canales de fútbol de YouTube, en 3 minutos
En resumen

futviral es un sistema que hace, solo, videos verticales (9:16) de 2 a 3 minutos con el resumen de lo que dijeron los 10 mayores canales de fútbol de YouTube: Brasileirão, fútbol europeo, mercado de fichajes, polémicas y negocios del fútbol. "Mira" los videos a través de la transcripción, separa los hechos y los números con la fuente de cada uno y arma un video con números grandes, sellos (RUMOR, NEGOCIANDO, FECHADO (cerrado), POLÊMICA (polémica)) y Nei (Nei Maldaner, creador de INEMA) comentando en avatar. El rumor se trata como rumor, ningún club tiene preferencia y las apuestas no entran. Sirve para quien quiere saber, en pocos minutos, de qué están hablando los principales canales. Funciona en una computadora con GPU, con la suscripción de Claude Code y de HeyGen.

Qué es

Un radar de fútbol que se arma solo

futviral lee lo que publicaron los canales, verifica cada hecho contra la transcripción y publica un video listo. El video cuenta lo que dijo cada canal, siempre con la fuente, sin hinchar por nadie.

Flujo de futviral: recolección, transcripción, guion, verificación, avatar y publicación

🔎 Solo hechos con fuente

Cada hecho o número tiene que estar en la transcripción, con el fragmento literal. Canal, fecha y título aparecen en pantalla. Marcador, monto de transferencia y cláusula de rescisión solo entran si el canal lo dijo.

📰 El rumor es rumor

Un fichaje, una salida o el despido de un técnico solo pasa a "fechado" (cerrado) cuando el club lo confirma; antes es "rumor" o "negociando". Todo se atribuye a quien lo dijo, sin hinchar por nadie. Las apuestas no entran.

🔒 Todo por suscripción

Guion con claude -p (suscripción, sin API), transcripción local con Whisper y avatar por el estudio de HeyGen. La oferta de cambio de plan de HeyGen siempre se rechaza.

Cómo funciona

De la transcripción a YouTube, sin manos humanas en el medio

Etapas encadenadas por auto/rodar.sh. Si la verificación reprueba dos veces, el video no se hace. Un día flojo tampoco se convierte en video: el bot recibe "sem pauta" (sin tema).

Recolección→ Transcripción→ Guion→ Verificación→ Avatar→ Video→ YouTube + bot
1

Recolección y transcripción

Lista los videos de los canales de canais.json (solo metadatos, yt-dlp), elige primero el más visto de cada canal (hasta 3 por canal, sin repetir un video ya usado y saltando videos/lives de más de 75 min), toma los subtítulos de YouTube y, si no los hay, descarga el audio y lo transcribe localmente (inemavox, Whisper large-v3; en inglés para Fabrizio Romano).

2

Guion

claude -p lee las transcripciones y guarda base.md (cada hecho, quién lo dijo, el video y el fragmento literal), roteiro.json (textos hablados y visuales) y legenda.txt.

3

Verificación

auto/checar.py verifica los fragmentos en la transcripción, los números escritos con letras en el habla, al menos 5 temas, el aviso "Rumor só vale quando o clube confirma." (el rumor solo vale cuando el club lo confirma), el CTA de inema.club y reprueba cualquier frase sobre apuestas. Si reprueba: vuelve una vez para corrección.

4

Avatar

HeyGen genera el avatar de Nei por el estudio (suscripción). Si falla, sale la versión con la foto y la voz de Nei, que solo va al bot.

5

Video

motor/palco.html se renderiza cuadro por cuadro con Playwright, con contadores, sellos y la fuente en pantalla. La imagen es la miniatura del video del canal: jugadas, goles y escudos de clubes no entran.

6

Publicación

En la agenda, el video listo va primero al bot v3 como vista previa; al mediodía auto/publicar-pendente.sh lo publica en el YouTube Inema Club24 (lives24) con yt-pubx y manda el enlace al bot.

Rondas

Tres tipos de ronda

Cada ronda es un modo de auto/rodar.sh. La agenda (timers en systemd/) está activada: la generación corre a las 09:00 y la publicación a las 12:00, fuera de los horarios de los proyectos hermanos que usan la misma GPU y el mismo HeyGen.

Diario
Ronda diarioEl resumen de los diez, de 2 a 3 minutos: los videos de ayer y anteayer aún no usados, con al menos cinco temas (uno por canal siempre que se pueda). Si menos de cinco canales publicaron en esos dos días, la ventana se amplía a cinco días.
Sábado
Ronda semanalBalance de la semana (los 7 días hasta ayer), de 2 a 3 minutos. Después, el video largo 16:9 "A semana explicada" (La semana explicada), de 5,5 a 7 minutos.
Domingo
Ronda domingoLo que los canales esperan para la próxima semana (clásicos, definiciones, técnico en la cuerda floja, negociaciones), de 2 a 3 minutos. Después, el video largo 16:9 explicado (de 5,5 a 7 minutos).
Los 10 canales

A quién sigue futviral

Elegidos el 26/10/2026 con medición propia (yt-dlp, mediana de vistas de los últimos 15 videos, canal activo y hablado). Quedaron fuera los canales de mejores momentos, de reacción de hinchas y de apuestas. Detalles en pesquisa/canais.md (en portugués).

🌍 Fútbol europeo y mercado mundial

Eurão (resúmenes e historias del fútbol europeo), Fabrizio Romano (mercado mundial, en inglés) y Fred Caldeira (fútbol europeo y opinión).

📺 Noticias, debate y opinión

Jovem Pan Esportes (noticias y debate), Jozão (opinión sobre los partidos), Chico Garcia (Brasileirão) y Mauro Cezar (opinión y polémica).

💼 Mercado de fichajes y negocios

Tode (mercado de fichajes diario), Canal do Nicola (mercado brasileño y detrás de escena) y TiaGOL (análisis y negocios del fútbol).

Requisitos previos

Lo que tiene que estar en la máquina

futviral no es una app aislada: usa otras herramientas del ecosistema INEMA, todas en ~/projetos/, en una computadora con GPU. El repositorio está en ~/projetos/futviral (los timers de systemd y los enlaces apuntan ahí).

Recolección y transcripción

yt-dlp para listar y descargar. inemavox (~/projetos/inemavox, con baixar_v1.py y transcrever_v1.py) es el kit local de descarga y transcripción con Whisper.

Render

Node con Playwright y ffmpeg. motor/node_modules es un enlace a ~/projetos/eventosextremospub/motor/node_modules; sin ese proyecto, ejecuta npm install playwright en motor/.

Guion

claude (Claude Code con sesión iniciada en la suscripción, llamado como claude -p). El video largo del fin de semana usa el motor ~/projetos/explicavideos/engine/v2.

Avatar y voz

El estudio de HeyGen abierto en un navegador en pantalla virtual (Xvfb :99), con el perfil ya con sesión iniciada del proyecto explicavideos. Sin él, la ronda sale con la foto y la voz clonada de Nei (Chatterbox, voz nei, con el proyecto ~/projetos/cardshorts).

Publicación

yt-pubx (~/projetos/yt-pubx), la herramienta que publica en YouTube; lives24 es el nombre que usa para el canal Inema Club24.

Aviso en Telegram

El bot v3 es el bot de Telegram de Nei que recibe cada video y cada aviso, con el script ~/projetos/refazvideo/ferramentas/enviar_bot_v3.mjs.

Guía de uso · paso a paso

Instalar, elegir los canales, probar y ejecutar

Comandos reales del repositorio, ejecutados en la raíz del proyecto.

1

Descargar el proyecto y sus hermanos

futviral está en ~/projetos/futviral y usa proyectos públicos de INEMA instalados a su lado. También necesita yt-dlp, ffmpeg, node y claude con sesión iniciada en la suscripción.

cd ~/projetos
git clone https://github.com/inematds/futviral
for r in inemavox yt-pubx cardshorts explicavideos refazvideo eventosextremospub; do
  git clone https://github.com/inematds/$r
done

Cada hermano tiene su propio README con la configuración: las credenciales del canal en yt-pubx, el bot de Telegram en refazvideo, el perfil del estudio de HeyGen y la pantalla virtual en explicavideos, la transcripción en inemavox y la voz en cardshorts. La prueba del paso 3 ya necesita inemavox, cardshorts y refazvideo; la publicación necesita todos.

2

Elegir los canales

La lista está en canais.json. Para pausar un canal sin borrarlo, usa "ativo": false. El handle es la ruta del canal en YouTube, rk es la etiqueta que aparece en pantalla y lang es el idioma del canal para Whisper (por defecto pt).

{"handle": "channel/UCX1em-uaFMS02Rrk_Bowyng", "nome": "Fabrizio Romano", "rk": "MERCADO MUNDIAL", "lang": "en", "ativo": true}

Si otro canal de fútbol consolidado aparece destacado, el sistema sugiere incluirlo en el mensaje del bot (nunca un canal emergente ni de apuestas). Solo entra con el visto bueno de Nei.

3

Probar sin avatar y sin publicar

Ejecuta una ronda sin HeyGen, sin el video largo y sin enviar al bot ni a YouTube. Igual usa claude -p (cuota de la suscripción), descarga el audio y ocupa la GPU con Whisper. La terminal queda en silencio: la salida va al log de la edición.

SEM_AVATAR=1 SEM_BOT=1 SEM_LONGO=1 auto/rodar.sh diario   # prueba: sin HeyGen, sin video largo y sin enviar
tail -f edicoes/$(date +%F)-diario/rodada.log              # seguir el progreso

En la carpeta edicoes/AAAA-MM-DD-diario/ quedan base.md, roteiro.json, legenda.txt, checar.log y el video listo (video.mp4).

4

Ejecutar a mano

Pasa el modo y la fecha. La ronda completa genera el avatar, publica en lives24 y lo manda al bot.

auto/rodar.sh diario 2026-10-26                   # ronda completa (avatar + lives24 + bot)
SEM_AVATAR=1 auto/rodar.sh diario 2026-10-26      # versión con foto, solo para el bot
REUSAR_ROTEIRO=1 auto/rodar.sh diario 2026-10-26  # rehace avatar/video/publicación con el guion ya aprobado
VALIDAR=1 auto/rodar.sh diario 2026-10-26        # edición de prueba (carpeta -validacao), nunca va a YouTube
5

Saltar una ronda

Agrega la fecha y el modo en auto/pular.txt.

echo "2026-11-01 semanal" >> auto/pular.txt   # saltar una ronda
6

Activar la agenda y retener una publicación

Generación a las 09:00 (diario de lunes a viernes, semanal el sábado, domingo el domingo) y publicación a las 12:00. Copia las unidades al systemd de usuario y activa los cuatro timers. Para retener la publicación de un video que ya fue al bot como vista previa, crea el archivo SEGURAR en la carpeta de la edición.

cp systemd/futviral-* ~/.config/systemd/user/ && systemctl --user daemon-reload
systemctl --user enable --now futviral-diario.timer futviral-semanal.timer futviral-domingo.timer futviral-publicar.timer
systemctl --user list-timers 'futviral-*'
touch edicoes/2026-10-27-diario/SEGURAR   # no publica esa edición a las 12:00
7

Seguir en Telegram y en YouTube

En la agenda, el bot v3 recibe la vista previa a las 09:00 y el enlace de Inema Club24 (lives24) después del mediodía. Una ronda a mano (paso 4) publica en el momento. Si no hay tema o algo falla, el bot recibe el aviso.

Reglas de cada video

Lo que cumple todo video

El guion y el portón de verificación siguen estas reglas.

📌 Fuente en pantalla

Solo entra un hecho que está en la transcripción, con canal, fecha y título en pantalla y el fragmento literal en base.md.

📰 El rumor es rumor

"Rumor só vale quando o clube confirma." (el rumor solo vale cuando el club lo confirma) en todo video; una transferencia es "rumor" o "negociando" hasta que el club la confirme.

⚖️ Sin hinchar por nadie

Todo se atribuye a quien lo dijo. La polémica es lo que ELLOS dijeron; ningún club tiene preferencia.

🚫 Sin apuestas

Nada de bets, cuotas ni pronósticos. El portón reprueba la frase.

📺 Sin imágenes de partidos

Jugadas, goles, imágenes de partidos y escudos de clubes no entran (derechos de transmisión). La pantalla usa números, tablas, sellos y la miniatura del video del canal.

🗣️ Tono de Nei y CTA

Habla en el tono de Nei (hablándole directo al espectador, "você"), con los números escritos con letras. Al final, una pregunta para comentar y el CTA de inema.club.