Nem todo pipeline precisa de stack grande. Para VPS simples, o desafio é carregar modelo uma vez, limitar arquivo, expor healthcheck e manter deploy previsível.
transcricao
Uma API FastAPI para upload de áudio/vídeo, transcrição com faster-whisper e deploy em Docker Compose com rótulos Traefik.
Leitura técnica
Leitura rápida do case
A API inicializa o modelo no startup, recebe arquivo via `/transcribe`, usa `int8` em CPU por padrão e expõe `/health` com modelo, device e compute type.
FastAPI · faster-whisper · CTranslate2 · Docker
Open-source
Arquitetura
Menos serviços, caminho direto para transcrição
Projeto deliberadamente enxuto: request entra, engine local processa e a API responde. O foco é CPU-only e deploy simples.
Fluxo técnico
- Entrada
- Processamento
- Persistência
- Saída
Fluxo em etapas
Código do diagrama (Mermaid)
flowchart LR
file["Audio/video"]
api["FastAPI"]
model["Modelo carregado"]
engine["faster-whisper/CTranslate2"]
json["JSON/transcricao"]
deploy["Docker/Traefik/Portainer"]
file --> api
api --> model
model --> engine
engine --> json
json --> deployStack e responsabilidades
- FastAPI
Recebe upload, valida parâmetros e responde a transcrição.
- faster-whisper
Engine de transcrição local.
- CTranslate2
Execução otimizada em CPU.
- Docker Compose
Deploy local/Portainer com variáveis de ambiente.
- Traefik
Rótulos de roteamento em ambiente Swarm/Portainer.
Decisões técnicas
- CPU-first
Configuração padrão usa device CPU e compute type int8 para VPS simples.
- Modelo carregado uma vez
Evita custo de inicialização em cada request.
Operação
- documentadoHealthcheck
`/health` retorna status, modelo, device e compute type.
- documentadoVariáveis de ambiente
PORT, WHISPER_MODEL, idioma, limite de arquivo, CPU threads.
- não públicoPersistência
README não documenta banco; a resposta é direta via API.
Status e próximos passos
- Adicionar fila se o uso exigir concorrência controlada.
- Documentar limites por tamanho/duração de arquivo em produção.
Contato
Quer algo parecido para seu processo?
Se existe uma entrada repetida, uma etapa manual e uma saída esperada, provavelmente dá para desenhar um sistema.