The 10 biggest accounting and tax channels on YouTube (Brazil's Tax Reform, MEI, Simples, new rules and tax obligations), transcribed, checked and summed up in a video with the source on screen and Nei commenting.

contaviral is a system that makes, on its own, vertical videos (9:16) of 2 to 3 minutes summing up what the 10 biggest accounting and tax channels on YouTube said: new laws and ordinances, Brazil's Tax Reform (IBS, CBS and the Imposto Seletivo — the new state/municipal and federal consumption taxes and the selective excise tax) and its impact on companies, MEI (Brazil's individual micro-entrepreneur regime) and Simples Nacional (the simplified tax regime for small businesses), tax obligations, AI in accounting firms. It "watches" the videos through their transcripts, pulls out the facts and numbers with the source of each one, and builds a video with big numbers, stamps (MUDOU A REGRA, PROPOSTA, PRAZO, ALERTA — rule changed, proposal, deadline, alert) and Nei (Nei Maldaner, creator of INEMA) commenting as an avatar. A proposal is treated as a proposal, politics takes no side and nothing becomes advice: it does not replace guidance from an accountant. It's for accountants and business owners who want to know, in a few minutes, what the main channels are talking about. It runs on a computer with a GPU, using the Claude Code and HeyGen subscriptions.
contaviral reads what the channels published, checks every fact against the transcript and publishes a finished video. The video reports what each channel said, always with the source, without giving anyone advice.
Every fact or number must be in the transcript, with the literal excerpt. Channel, date and title appear on screen. Laws, ordinances, tax rates, deadlines and amounts only go in as the channel said them.
A bill, proposal or pending regulation appears as PROPOSTA (proposal), never as a rule in force. Everything is attributed to whoever said it; no "do this" for your case: every case is different, talk to your accountant.
Script with claude -p (subscription, no API), local transcription with Whisper and avatar through the HeyGen studio. HeyGen's plan-change offer is always declined.
Steps chained by auto/rodar.sh. If the check fails twice, the video is not made. A slow day doesn't become a video either: the bot gets "sem pauta" (nothing to report).
Lists the videos from the channels in canais.json (metadata only, yt-dlp), picks the most viewed from each channel first (up to 3 per channel, never repeating a video already used and skipping videos/lives over 75 min), takes the YouTube caption and, if there isn't one, downloads the audio and transcribes it locally (inemavox, Whisper large-v3).
claude -p reads the transcripts and writes base.md (each fact, who said it, the video and the literal excerpt), roteiro.json (lines and visuals) and legenda.txt.
auto/checar.py checks the excerpts against the transcript, numbers spelled out in words in the speech, at least 5 topics, the notice "Não substitui orientação de um contador." (It does not replace guidance from an accountant.) and the inema.club CTA. If it fails: it goes back once for correction.
HeyGen generates Nei's avatar through the studio (subscription). If it fails, a version with Nei's photo and voice comes out, which only goes to the bot.
motor/palco.html is rendered frame by frame by Playwright, with counters, stamps and the source on screen. The image is the thumbnail of the channel's video.
On the schedule, the finished video first goes to bot v3 as a preview; at 13:00 auto/publicar-pendente.sh publishes it to YouTube INEMA TIA (lives2) through yt-pubx and sends the link to the bot.
Each run is a mode of auto/rodar.sh. The schedule (timers in systemd/) is on: generation runs at 10:00 and publishing at 13:00, outside the hours of the sibling projects that use the same GPU and the same HeyGen.
diario runThe summary of the ten, 2 to 3 minutes: yesterday's and the day before's videos not used yet, with at least five topics (one per channel whenever possible). If fewer than five channels published in those two days, the window widens to five days.semanal runReview of the week (the 7 days up to yesterday), 2 to 3 minutes. Then the long 16:9 "A semana explicada" (The week explained) (5.5 to 7 minutes).domingo runWhat the channels point to for the coming week (deadlines, votes, pending regulations, stages of the Tax Reform), 2 to 3 minutes. Then the long 16:9 explained video (5.5 to 7 minutes).Chosen on 10/27/2026 from Nei's list, by our own measurement (yt-dlp, median views of the last 15 videos, active channel with spoken content). Inactive channels, civil-service exam channels, political channels and channels selling "pay less tax" were left out. Details in pesquisa/canais.md (in Portuguese).
Central do Microempreendedor, Sua Contadora, Gerando Empreendedores and Tenha Renda: the MEI revenue limit, deadlines, Simples Nacional and what the Receita (Brazil's federal tax authority) is changing.
Flávia Holanda Gaeta (tax theses and IBS/CBS), Professor Fellipe Guerra (the Reform and Simples) and Paulo Henrique Pêgas (the "3MIN com Pêgas" series, on the IPECRJ TV channel).
Econet Editora (tax and labor legislation), Contabilidade Facilitada (an accountant's day-to-day) and Receita Federal (Brazil's federal tax authority; official source, not an influencer).
contaviral is not a standalone app: it uses other tools from the INEMA ecosystem, all in ~/projetos/, on a computer with a GPU. The repository lives in ~/projetos/contaviral (the systemd timers and the links point there).
yt-dlp to list and download. inemavox (~/projetos/inemavox, with baixar_v1.py and transcrever_v1.py) is the local download and transcription kit with Whisper.
Node with Playwright and ffmpeg. motor/node_modules is a link to ~/projetos/eventosextremospub/motor/node_modules; without that project, run npm install playwright in motor/.
claude (Claude Code logged in with the subscription, called as claude -p). The weekend long video uses the ~/projetos/explicavideos/engine/v2 engine.
The HeyGen studio open in a browser on a virtual screen (Xvfb :99), with the explicavideos project's already logged-in profile. Without it, the run comes out with Nei's photo and cloned voice (Chatterbox, voice nei, through the ~/projetos/cardshorts project).
yt-pubx (~/projetos/yt-pubx), the tool that publishes to YouTube; lives2 is its name for the INEMA TIA channel.
bot v3 is Nei's Telegram bot that receives every video and notice, through the script ~/projetos/refazvideo/ferramentas/enviar_bot_v3.mjs.
Real commands from the repository, run from the project root.
contaviral lives in ~/projetos/contaviral and uses public INEMA projects next to it. It also needs yt-dlp, ffmpeg, node and claude logged in with the subscription.
cd ~/projetos git clone https://github.com/inematds/contaviral for r in inemavox yt-pubx cardshorts explicavideos refazvideo eventosextremospub; do git clone https://github.com/inematds/$r done cd ~/projetos/contaviral/motor && npm install playwright && npx playwright install chromium # render: Playwright + Chromium (the motor/node_modules link is not in the clone)
Each sibling has its own README with the setup: the channel credentials in yt-pubx, the Telegram bot in refazvideo, the HeyGen studio profile and the virtual screen in explicavideos, transcription in inemavox and the voice in cardshorts. The test in step 3 already needs inemavox, cardshorts and refazvideo; publishing needs all of them. For the photo test, cardshorts must be installed with the nei voice (Chatterbox, on the GPU), as in its README.
The list is in canais.json. To pause a channel without deleting it, use "ativo": false. The handle is the channel's path on YouTube, rk is the label shown on screen and lang is the channel's language for Whisper (default pt; all ten are in Portuguese).
{"handle": "channel/UCTRVlQTzYPK88F8saQL9TJQ", "nome": "Fellipe Guerra", "rk": "REFORMA TRIBUTÁRIA · CFC", "lang": "pt", "ativo": true}
If another established accounting or tax channel stands out, the system suggests adding it in the bot message (never an up-and-coming channel or one that sells courses or "pay less tax"). It only goes in with Nei's OK.
Do a run without HeyGen, without the long video and without sending to the bot or to YouTube. It still uses claude -p (subscription quota), downloads the audio and keeps the GPU busy with Whisper. The terminal stays quiet: the output goes to the edition's log.
SEM_AVATAR=1 SEM_BOT=1 SEM_LONGO=1 auto/rodar.sh diario # test: no HeyGen, no long video and nothing sent tail -f edicoes/$(date +%F)-diario/rodada.log # follow along
The edicoes/AAAA-MM-DD-diario/ folder holds base.md, roteiro.json, legenda.txt, checar.log and the finished video (video.mp4).
Pass the mode and the date. The full run generates the avatar, publishes to lives2 and sends to the bot. Run it through systemd-run --user (with PATH including ~/.npm-global/bin and DISPLAY=:99), so it doesn't depend on the terminal staying open.
auto/rodar.sh diario 2026-10-27 # full run (avatar + lives2 + bot) SEM_AVATAR=1 auto/rodar.sh diario 2026-10-27 # photo version, bot only REUSAR_ROTEIRO=1 auto/rodar.sh diario 2026-10-27 # redo avatar/video/publishing with the script already approved VALIDAR=1 auto/rodar.sh diario 2026-10-27 # test edition (-validacao folder), never goes to YouTube # same thing, without depending on an open terminal: systemd-run --user --unit contaviral-mao --setenv=PATH=$HOME/.local/bin:$HOME/.npm-global/bin:/usr/local/bin:/usr/bin:/bin --setenv=DISPLAY=:99 /bin/bash ~/projetos/contaviral/auto/rodar.sh diario 2026-10-27
A manual run publishes to lives2 right away, right after the avatar. Only the schedule (timers) waits for 13:00. Avatar (Nei's HeyGen studio), the INEMA TIA channel and the bot are the owner's accounts: if you clone it, use your own accounts, set up in the sibling projects.
Add the date and the mode to auto/pular.txt.
echo "2026-11-01 semanal" >> auto/pular.txt # skip a run
Generation at 10:00 (diario Monday to Friday, semanal on Saturday, domingo on Sunday) and publishing at 13:00. If the video is ready after 13:00 (the HeyGen studio is shared with the sibling projects), it goes out at the next day's slot, or right away with auto/publicar-pendente.sh. Copy the units to the user systemd and enable the four timers. To hold the publication of a video that already went to the bot as a preview, create the file SEGURAR (hold) in the edition folder.
cp systemd/contaviral-* ~/.config/systemd/user/ && systemctl --user daemon-reload systemctl --user enable --now contaviral-diario.timer contaviral-semanal.timer contaviral-domingo.timer contaviral-publicar.timer systemctl --user list-timers 'contaviral-*' touch edicoes/2026-10-27-diario/SEGURAR # don't publish this edition at 13:00
On the schedule, bot v3 gets the preview after 10:00 and the INEMA TIA (lives2) link after 13:00. A run by hand (step 4) publishes right away. If there's nothing to report or something fails, the bot gets the notice.
The script and the check gate follow these rules.
Only facts that are in the transcript go in, with channel, date and title on screen and the literal excerpt in base.md.
"Não substitui orientação de um contador." (It does not replace guidance from an accountant.) in every video; the gate rejects it without that line. When the speech says what someone can do, it closes with "cada caso é um caso: fale com o seu contador" (every case is different: talk to your accountant).
A bill, proposal or pending regulation appears as PROPOSTA (proposal). Laws, ordinances, tax rates and deadlines only as the channel said them.
Government, Congress and elections: everything is attributed to whoever said it, with no opinion from Nei.
The influencer's course, mentoring, accounting firm or software don't go in, and "pay less tax" never becomes a headline.
Spoken in Nei's tone (addressing the viewer as "você"), with numbers spelled out in words. At the end, a question to comment on and the inema.club CTA.