Pipeline de transcriçãoProjeto principal

meet-transcription

Um app web + worker que observa uma pasta do Google Drive, baixa gravações, transcreve com Deepgram ou engine local CPU e salva o resultado no PostgreSQL.

PythonFastAPIDeepgramWhisperRedisPostgreSQLDocker

Leitura técnica

Leitura rápida do case

Problema

Gravações de reunião ficam no Drive, mas transformar cada MP4 em texto útil exige baixar arquivo, chamar provedor, cuidar de fila, persistir resultado e entregar um TXT sem travar a interface.

Solução

A UI valida e enfileira o job; o worker baixa o arquivo, escolhe Deepgram ou transcrição local, salva transcript no PostgreSQL e expõe download. Redis segura fila e lock global.

Stack

Python · FastAPI · Deepgram · Whisper

Status

Projeto principal

Arquitetura

Drive entra, worker processa, Postgres vira fonte de verdade

O web nunca transcreve dentro da request: ele só cria um job pendente. O worker consome a fila com lock global e grava o resultado no banco.

Fluxo técnico

  • Entrada
  • Processamento
  • Fila
  • Persistência
  • Saída
Fluxograma
Renderizando fluxograma…

Fluxo em etapas

01Entrada
Google DrivePasta com gravações de reunião
02API
FastAPI webUI/OAuth valida e cria job pendente
03Fila/lock
RedisEnfileira job_id e controla lock global
04Processamento
WorkerBaixa arquivo e orquestra a transcrição
05Transcrição
Deepgram ou Whisper localProvedor cloud ou engine local CPU
06Persistência
PostgreSQLJobs e transcripts como fonte de verdade
07Saída
TXTDownload pela UI
Código do diagrama (Mermaid)
Cole em qualquer renderizador Mermaid
flowchart LR
  drive["Google Drive"]
  web["FastAPI web"]
  redis["Redis"]
  worker["Worker"]
  engine["Deepgram ou Whisper local"]
  postgres["PostgreSQL"]
  txt["TXT"]
  drive --> web
  web --> redis
  redis --> worker
  worker --> engine
  engine --> postgres
  postgres --> txt
1. Google Drive (Entrada) → FastAPI web. 2. FastAPI web (API) → Redis. 3. Redis (Fila/lock) → Worker. 4. Worker (Processamento) → Deepgram ou Whisper local. 5. Deepgram ou Whisper local (Transcrição) → PostgreSQL. 6. PostgreSQL (Persistência) → TXT. 7. TXT (Saída).

Stack e responsabilidades

  • FastAPI

    UI server-rendered, OAuth e criação de jobs.

  • Redis

    Fila de transcrição e lock global de execução.

  • PostgreSQL

    Usuários, settings, jobs e transcripts; fonte de verdade.

  • Deepgram / Whisper local

    Provedores intercambiáveis de transcrição.

  • Docker Compose

    Empacota web, worker, migrate, Redis e Postgres.

Decisões técnicas

  • Postgres como verdade

    Redis pode cair ou ser limpo; jobs pendentes são reconciliados a partir do banco.

  • Request leve

    A interface só valida e enfileira. Transcrição pesada fica no worker.

  • Local vs cloud explícito

    Deepgram entrega velocidade/diarização; local CPU reduz custo por uso e mantém processamento na infra própria.

Operação

  • documentadoHealthchecks e startup order

    Postgres -> Redis -> migrate -> web/worker.

  • documentadoDokploy

    Guia público de deploy com domínio apenas no serviço web.

  • documentadoGHCR

    Workflow publica imagem em pushes para main.

Status e próximos passos

  • Compilar whisper.cpp multiarch na imagem.
  • Adicionar busca em transcripts e resumos com IA.
  • Melhorar notificações e automação de gravações.

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.

Falar sobre um projeto