Brazil's 5 biggest finance influencers, transcribed, checked and summarized in a video with big numbers, the source on screen and Nei commenting.

finviral is a system that, on its own, makes short (9:16) videos about what Brazil's biggest finance influencers said in their videos. It "watches" the YouTube videos through transcripts, separates the numbers, the facts and the controversies, and builds a video with big animated numbers, the source of each data point on screen and Nei commenting (avatar). It is for anyone who wants to follow the market in one minute, with no investment advice. It runs on a computer with a GPU, using a Claude Code and HeyGen subscription. On Saturdays and Sundays it also makes the long 16:9 video "The week explained" (5 to 7 minutes), with one chapter per influencer. Everything is published automatically on the INEMA TIA YouTube channel and sent to Telegram.
Every night finviral reads what the channels published, checks each number against the transcript and delivers a finished video for Nei to approve. Not investment advice: the video reports what each person said, always with the source.
Every number must be in the transcript, with the literal excerpt. Channel, date and title appear on screen in every scene. The video states that it is not investment advice.
Counters, chart, controversy stamp, word-by-word captions and Nei's avatar in the corner, rendered frame by frame.
Script with claude -p (subscription, no API), local transcription with Whisper and avatar through the HeyGen studio. HeyGen's plan-upgrade offer is always declined.
Six steps chained by auto/rodar.sh. If the check fails twice, the video is not made.
Lists the videos from the channels in canais.json (metadata only, yt-dlp), downloads the audio and transcribes locally (inemavox, Whisper large-v3).
claude -p reads the transcripts and writes base.md (each number, who said it, the video and the literal excerpt), roteiro.json (lines and visuals) and legenda.txt (text for approval).
auto/checar.py checks that each excerpt is in the transcript, that the numbers in the speech are spelled out, that the images exist, and that there is a CTA and the "not investment advice" notice. Failed: it goes back once for correction.
HeyGen generates Nei's avatar through the studio (subscription, no generation API). motor/retempo.py aligns the artwork to the speech. If HeyGen fails, the version with Nei's photo and voice (Chatterbox) comes out.
motor/palco.html is rendered frame by frame by Playwright, with the source in every scene. The avatar sits in the corner, with a soundtrack.
auto/publicar.sh publishes on YouTube INEMA TIA (lives2) through yt-pubx and always sends it to bot v3, with the link. If the avatar failed, the photo version only goes to the bot.
User systemd timers. A slow day does not become a video: the bot receives "no topic".
diario round Β· 40β60 sWhat they published yesterday and the day before: one main story and at most one or two more numbers.semanal round Β· 90 s to 2 minWeekly recap: the biggest number, the controversy and one number from each relevant influencer. Then the long 16:9 "The week explained".domingo round Β· ~90 sWhat they expect for the coming week: bets, dates and risks they pointed out, always attributed. Then the long 16:9 explained.The short gives the scoreboard; the long 16:9 explains it. 5 to 7 minutes, one chapter per influencer: what they said (literal quote), what it means, the context and the numbers with sources. The short says at the end that the full explanation is on INEMA TIA.
Comparison, timeline, struck-and-corrected statement, lists and counters from explicavideo v2, plus finance pieces: profile card, giant number, literal quote, chart and stamp.
auto/checar.py --longo: every fact with a literal quote, spoken numbers written out and every animation tied to a spoken word.
The HeyGen studio accepts up to 4,500 characters per video: the script goes in blocks and is joined into a single avatar.
# run the long video for an edition already approved by checar --longo auto/longo.sh edicoes/2026-10-10-semanal-longo "semanal Β· LONGO Β· 10/10/2026"
A computer with a GPU, Claude Code logged in to the subscription and the explicavideos HeyGen profile.
yt-dlp to list and download, inemavox (~/projetos/inemavox) to transcribe and cardshorts for the Chatterbox nei voice.
Node with Playwright (motor/node_modules is a link to the one in eventosextremospub) and ffmpeg.
claude (Claude Code logged in to the subscription), Xvfb :99 with the explicavideos HeyGen profile and bot v3 (refazvideo/ferramentas/enviar_bot_v3.mjs).
Real commands from the repository, run from the project root.
The list lives in canais.json. Today it is the top 5 of the Anbima FInfluence ranking (10th edition): Bruno Perini, Economista Sincero, Ricardo Amorim, O Primo Rico and Os Economistas. To pause someone without deleting, use "ativo": false.
{"handle": "@BrunoPerini", "nome": "Bruno Perini", "rk": "NΒΊ 1 Β· ANBIMA", "ativo": true}
If another established, trustworthy name shows up in the spotlight, the system suggests adding it in the bot message. An emerging name never gets in, and adding only happens with Nei's okay.
Copy the user systemd units and enable the three timers.
cp systemd/finviral-* ~/.config/systemd/user/ && systemctl --user daemon-reload systemctl --user enable --now finviral-diario.timer finviral-semanal.timer finviral-domingo.timer systemctl --user list-timers 'finviral-*'
Run a round without HeyGen and without sending to the bot.
SEM_AVATAR=1 SEM_BOT=1 auto/rodar.sh semanal # test: no HeyGen and no sending
Pass the mode and the date; to skip, add the line to auto/pular.txt.
auto/rodar.sh diario 2026-10-09 # round for a specific day echo "2026-10-17 diario" >> auto/pular.txt # skip a round
For an edition such as edicoes/2026-10-09-semana: first the version with Nei's voice and photo, then the version with the avatar.
E=edicoes/<date>-<slug> python3 motor/narrar.py $E 1.12 && python3 motor/gerar_cena.py $E && motor/montar.sh $E $E/video.mp4 # Nei's voice + photo motor/avatar_heygen.sh $E FINVIRAL-<title> && python3 motor/gerar_cena.py $E --avatar && motor/compor_avatar.sh $E $E/video.mp4 # avatar
The video arrives in bot v3 with the text for approval. Nei approves and publishes; nothing goes live on its own.
The check gate and the script follow these rules.
Date dd/mm/yyyy and the strongest number right in the first frame.
Only numbers that are in the transcript make it in, with channel, date and title on screen. Not investment advice.
Elections and politics: the video reports what each person said, always attributed.
Spoken in Nei's tone (informal "you", Portuguese "tu"), with numbers and years spelled out.
Comment hook and a CTA for AI agent management at inema.club.
Only through the subscription studio. The plan-upgrade offer is always declined.
Two frames from the video of the edicoes/2026-10-09-semana edition, with Nei's avatar in the corner.

