HermesKit
As capacidades de mídia do Hermes Agent empacotadas como plugin MCP para o Google Antigravity (e para qualquer cliente MCP): editar vídeo, limpar e transcrever áudio, gerar imagem, fazer OCR, operar o Chrome logado do usuário, ler/criar documentos e gerar narração.
Tudo roda na máquina: ffmpeg, faster-whisper, ClearerVoice MossFormer2, ComfyUI/FLUX, Tesseract, SAPI e Chrome via CDP. Zero custo de API, zero upload de arquivo do usuário.
O que vem pronto
| Tool | O que faz |
|---|---|
kit_status |
diagnóstico do ambiente (ffmpeg, NVENC, Tesseract, ComfyUI, venvs, Chrome/CDP) |
media_probe |
duração, codecs, resolução, fps, bitrate, HDR, streams |
video_edit |
trim, scale, vertical 1080x1920 sem tarja, square, concat, extract_audio, replace_audio, mute, compress, speed, gif, burn_subs, rotate |
video_frames |
quadros em tempos exatos ou por fps + folha de contato em grade |
audio_denoise |
limpeza de ruído: mossformer2 (melhor), rnnoise, afftdn |
audio_transcribe |
transcrição local com JSON/SRT/TXT (faster-whisper, CPU) |
audio_loudnorm |
normalização EBU R128 em duas passadas (−14 / −16 LUFS) |
image_generate |
geração de imagem local (ComfyUI + FLUX na GPU) |
image_ocr |
Tesseract em imagem ou PDF (com recorte e psm) |
image_process |
resize / pad / crop / square / thumbnail / convert |
tts |
narração offline pelas vozes SAPI do Windows (pt-BR Maria), WAV/MP3 |
browser |
Chrome real do usuário via CDP: abas, navegar, JS, clique, digitação, print, texto |
office |
ler/criar docx, xlsx e pptx; juntar PDF |
Como está montado
C:\HermesKit\
├── mcp_server.py # stdio JSON-RPC (MCP) — o único ponto de entrada
├── kittools.py # registro: schemas + handlers
├── kitcore.py # descoberta de ambiente, subprocesso, ffprobe, status
├── tools_media.py # vídeo, áudio e imagem
├── tools_voice.py # tts (SAPI)
├── tools_browser.py # Chrome via CDP + Playwright
├── tools_office.py # docx / xlsx / pptx / pdf
├── scripts/
│ ├── transcrever.py # faster-whisper lendo WAV pela stdlib
│ ├── denoise_mossformer.py# ClearerVoice MossFormer2 (venv de voz)
│ └── tts.ps1 # SAPI -> WAV
├── antigravity/ # bundle do plugin (plugin.json, skill, regras, README)
├── setup-antigravity.ps1 # instala no Antigravity e testa o handshake
├── selftest.py # 25 checagens de ponta a ponta via MCP
└── out/ # saídas (fora do git)
O plugin do Antigravity é um bundle: plugin.json (identidade), mcp_config.json
(aponta para este mcp_server.py), skills/hermes-kit/SKILL.md (como usar) e
rules/AGENTS.md (convenções do usuário). Não há cópia do código: o plugin aponta para
o motor único neste diretório — corrigir aqui corrige nos dois lados.
Requisitos
| Item | Para quê | Como |
|---|---|---|
| Windows 10/11 + Python 3.12+ | servidor MCP | winget install Python.Python.3.14 |
| ffmpeg/ffprobe no PATH | todo o vídeo/áudio | winget install Gyan.FFmpeg |
| Pillow, requests | já vêm no Python do Hermes | pip install pillow requests |
| python-docx, openpyxl, pypdf, PyMuPDF, python-pptx | office |
pip install python-docx openpyxl pypdf pymupdf python-pptx |
Tesseract 5 (por+eng) |
image_ocr |
winget install UB-Mannheim.TesseractOCR |
ComfyUI em 127.0.0.1:8188 |
image_generate |
instalação local do ComfyUI + checkpoint FLUX |
venv-whisper com faster-whisper |
audio_transcribe |
ver abaixo |
C:\Users\<u>\voz-env com clearvoice |
audio_denoise engine=mossformer2 |
ver abaixo |
Chrome com --remote-debugging-port=9461 |
browser |
o action=launch sobe assim |
| Playwright (Python) | browser |
pip install playwright (não precisa baixar browser) |
# venv do whisper (Python 3.12: faster-whisper ainda não tem wheel para 3.14)
uv venv --python 3.12 "C:\HermesKit\venv-whisper"
uv pip install --python "C:\HermesKit\venv-whisper\Scripts\python.exe" faster-whisper numpy
# venv de voz (MossFormer2) — NUNCA no Python principal: clearvoice rebaixa o numpy
python -m venv C:\Users\<u>\voz-env
C:\Users\<u>\voz-env\Scripts\python.exe -m pip install clearvoice soundfile
Nada disso é obrigatório para subir o servidor: sem whisper o audio_transcribe responde
erro claro, sem ComfyUI o image_generate responde erro claro. kit_status diz o que existe.
Instalação no Antigravity
git clone https://github.com/renatopenner/hermes-kit C:\HermesKit
cd C:\HermesKit
powershell -NoProfile -ExecutionPolicy Bypass -File .\setup-antigravity.ps1
O script copia o bundle para %USERPROFILE%\.gemini\config\plugins\hermes-kit, gera o
mcp_config.json com os caminhos desta máquina, baixa os modelos rnnoise e testa o
handshake. Depois: feche e reabra o Antigravity (diretório de plugin novo só é
descoberto no startup) e habilite hermes-kit na página de Plugins.
Verificação
python selftest.py # 25 checagens rápidas, arquivos reais
python selftest.py --image # inclui image_generate (ComfyUI, ~45 s)
python selftest.py --full # inclui MossFormer2
Cada linha imprime OK/FAIL, o tempo e o nome do arquivo produzido. Nada é simulado: se
aparece OK, o arquivo existe em out\.
Exemplo: take bruto -> reels pronto
media_probe(input="take.mp4")
audio_transcribe(input="take.mp4", out_format="srt")
audio_denoise(input="take.mp4", engine="mossformer2") # -> take_sem-ruido.mp4
video_edit(input="take_sem-ruido.mp4", action="trim", start=3.2, duration=38)
video_edit(input=<trim>.mp4, action="to_vertical") # 1080x1920, crop, sem tarja
video_edit(input=<vert>.mp4, action="burn_subs", srt=<srt>)
audio_loudnorm(input=<final>.mp4, lufs=-14)
media_probe(input=<final_norm>.mp4) # prova a entrega
Pitfalls que já custaram tempo
- Caminho nativo no ffmpeg (
C:/...), nunca MSYS (/c/...). subtitlesexige o:do drive escapado (C\:/...) — o kit já faz.- concat precisa dos pads intercalados
[v0][a0][v1][a1]. - NVENC cai para libx264 sozinho quando o driver não suporta (
fallbackna resposta). - MossFormer2 devolve
(canais, amostras)— sem transpor, dobra a duração. - faster-whisper 1.2.1 + PyAV 19 quebram em
metadata_errors: o kit passa ndarray e nunca deixa o whisper abrir o arquivo. - CDP:
browser.close()fecha o Chrome do usuário; o kit só encerra a sessão do Playwright. Navegar semtababre aba nova, para não sequestrar a aba em uso. - Chrome do usuário: nunca
taskkill chrome.exepara "destravar" a porta.
Licença
MIT — veja LICENSE.