feat: removido o tamanho do modelo do seletor da tela Editar vídeo

- removido o tamanho do modelo do seletor da tela Editar vídeo
- acelerada a transcrição do Scanner com inferência Whisper em lote e cache de hashes
- garantido um resultado separado para cada clipe de áudio selecionado no Scanner
- adicionado cancelamento do processamento do Scanner pela barra de progresso
- exibido estado visual próprio para Scanner cancelado na barra de progresso
- criado modo explícito de análise do Scanner para separar som, imagem ou ambos
- adicionadas métricas opcionais de fala ao Scanner com análise acústica na engine
- corrigido o progresso da transcrição do Scanner durante o processamento do Whisper
- refatorado o runner Swift do Apple Vision para executar requests em lote com retry CPU-only, corrigindo falhas de CVPixelBuffer/ANE/OCR
- documentado o fluxo de edição de vídeo por voz integrado ao Scanner, banco e engine
- formalizado o protocolo de edição por chat com perfil editorial e consultas progressivas
- gerado plano JSON de corte para depoimento vertical da Erika no Instagram
- esquematizado o fluxo de colar e executar planos da IA pela engine após o Scanner
- ajustado o plano para manter somente as três etapas existentes da tela de edição
- adicionado processamento incremental de locutores e métricas no Scanner com confirmação de reprocessamento
- implementado o plano JSON colado na tela e a persistência idempotente das análises do Scanner

Resumo:
- 8 arquivos alterados
- 1 novos
- 7 modificados
- 0 removidos

 7 files changed, 437 insertions(+), 55 deletions(-)

Arquivos:
  - code/cep-plugin/index.html
  - code/cep-plugin/main.js
  - code/cep-plugin/styles.css
  - code/engine/executar_scanner.py
  - code/engine/persistencia/repositorio_de_analises_sqlite.py
  - code/engine/testes/test_persistencia_sqlite.py
  - docs/PLANO-EDICAO-DE-VIDEO-POR-VOZ.md
  - code/relatorios/plano-edicao-depoimento-erika-instagram.json
This commit is contained in:
João Henrique
2026-09-09 19:10:20 -04:00
parent c4c942044f
commit f6dd03f7b4
8 changed files with 526 additions and 55 deletions
+143 -12
View File
@@ -133,6 +133,95 @@ Premiere Pro
O Scanner produz fatos. A IA decide. A engine valida e aplica. A interface coordena e apresenta.
## 3.1. Fluxo pós-Scanner na tela Editar vídeo
Depois que o Scanner concluir, a tela **Editar vídeo** será a etapa de decisão
e aplicação:
```text
Scanner concluído
↓
Editar vídeo seleciona a análise do Scanner
↓
Usuário copia o JSON devolvido pela IA
↓
Cola o JSON no campo do plano
↓
Painel valida o formato e mostra as ações
↓
Usuário clica em Executar plano
↓
Painel salva um arquivo temporário UTF-8
↓
aplicar_plano_de_edicao.py
↓
LeitorDePlanoDeEdicao
↓
validação contextual e backup
↓
AplicadorDePlanoDeEdicao
↓
resultado ação por ação na tela
```
O clipboard serve somente para transportar o texto JSON até o painel. Ele não
deve ser executado como código nem enviado diretamente ao Premiere.
### Comportamento do campo de plano
Ao colar o JSON, a tela deve:
- fazer `JSON.parse` localmente;
- verificar se existe `source` e `actions`;
- mostrar quantidade e tipos de ações;
- mostrar erros de estrutura antes de liberar o botão;
- aceitar metadados extras como `schema`, `analysis` e `target`;
- não modificar o plano colado silenciosamente;
- salvar uma cópia com data e hora para auditoria.
### Comportamento do botão Executar plano
O botão deve chamar a entrada da engine, e não interpretar as ações no
JavaScript. A entrada é:
```text
code/engine/aplicar_plano_de_edicao.py <caminho-do-plano.json>
```
Essa entrada usa as mesmas classes do fluxo de aplicação da engine:
- `LeitorDePlanoDeEdicao` lê e valida o contrato;
- `BackupDaSequencia` cria uma cópia antes da mutação;
- `ConversorDeTimeline` lê a sequência ativa;
- `MapeadorDeTempoDeOrigemParaTimeline` encontra os clipes corretos;
- `AplicadorDePlanoDeEdicao` ordena e aplica as ações;
- `EscritaNoEditor` executa as alterações pelo bridge do Premiere;
- `ResultadoDaAplicacao` devolve sucesso ou falha por ação.
O painel deve exibir o resultado recebido, incluindo ações aplicadas, ações
que falharam, detalhes da falha e caminho do plano salvo.
### Diferença entre testar e executar
O fluxo **Testar ações** é um protótipo de validação manual do formato. O
fluxo definitivo **Executar plano** deve usar a entrada Python da engine para
compartilhar o mesmo domínio, mapeador, backup e aplicador. Não devem existir
duas implementações diferentes para cortar a mesma timeline.
### Segurança e confirmação
Antes de iniciar:
- confirmar que a sequência correta está ativa;
- conferir o arquivo de origem do plano;
- conferir a quantidade de ações;
- criar backup;
- pedir confirmação quando houver cortes.
Durante a execução, o painel deve permitir cancelar o processo e informar se o
cancelamento ocorreu antes ou depois de alguma ação. O resultado parcial deve
ser preservado para diagnóstico.
## 4. Situação atual do código
### Já existe
@@ -151,10 +240,10 @@ O Scanner produz fatos. A IA decide. A engine valida e aplica. A interface coord
### Lacunas conhecidas
- `listar_falas_no_intervalo()` não retorna métricas acústicas por padrão.
- Editar vídeo ainda trabalha principalmente com `transcricao.json` e não seleciona diretamente uma análise do Scanner.
- Editar vídeo aceita o JSON de ações colado no painel ou carregado por arquivo e grava uma cópia local antes da aplicação.
- O contexto editorial ainda não é um módulo explícito da engine.
- O plano atual identifica a origem principalmente por nome e tempo; com várias faixas e clipes, precisa também de `video_id` e `clipe_id`.
- Reprocessamentos precisam de uma política explícita para não duplicar segmentos no banco.
- A validação contextual com `video_id`, versão da análise e `clipe_id` ainda precisa ser conectada ao aplicador.
## 5. Consultas SQL compactas
@@ -397,16 +486,58 @@ Novo comportamento a adicionar:
## 10. Fluxo da tela Editar vídeo
1. Selecionar origem: `Transcrever este vídeo` ou `Usar análise do Scanner`.
2. Listar análises disponíveis e mostrar modelo, idioma, diarização, métricas e data.
3. Escolher objetivo: depoimento, entrevista, redes sociais ou personalizado.
4. Definir regras: remover silêncio, remover repetição, preservar pausas emocionais, locutores e intensidade.
5. Carregar contexto compacto pela engine.
6. Mostrar falas, tempos, locutores, métricas e status da análise.
7. Exportar contexto para IA ou chamar um Provider de IA futuramente.
8. Importar o plano devolvido.
9. Mostrar cada ação com intervalo, texto, motivo, confiança e validação.
10. Criar backup, validar e aplicar pela engine.
O Scanner acontece antes da tela de edição. Dentro da tela **Editar vídeo**,
o fluxo terá somente três etapas, mantendo a experiência já conhecida:
### Etapa 3 — Revisar falantes e áudio (opcional)
Esta etapa recebe a análise do Scanner e permite:
- revisar ou nomear falantes quando a diarização estiver disponível;
- conferir a transcrição e os intervalos;
- conferir métricas de voz quando tiverem sido calculadas;
- definir ou revisar o perfil editorial;
- definir o tipo e o objetivo do vídeo;
- escolher regras como remoção de silêncios, repetições e hesitações.
Quando a edição usar somente transcrição, a revisão de falantes continua
opcional. O botão de avanço não deve exigir diarização.
### Etapa 4 — Gerar arquivo JSON
Esta etapa reúne:
- a análise selecionada do Scanner;
- as falas e palavras necessárias;
- as métricas solicitadas;
- o perfil editorial;
- o tipo e objetivo do vídeo;
- as regras de edição.
A engine gera o contexto editorial para a IA. Depois que a IA devolver o plano,
o usuário poderá colar o JSON no campo da etapa ou selecionar um arquivo. O
painel valida a estrutura e mostra a quantidade de `actions` antes de liberar
a etapa seguinte.
O arquivo gerado/devolvido deve continuar sendo UTF-8 e conter `source` e
`actions`, podendo também conter `analysis`, `schema`, `target` e metadados
editoriais.
### Etapa 5 — Aplicar na timeline
Esta etapa:
- mostra o resumo das ações;
- confirma a sequência ativa;
- cria backup;
- valida a origem e os intervalos;
- chama `aplicar_plano_de_edicao.py`;
- usa as classes oficiais da engine;
- exibe o resultado ação por ação;
- preserva o relatório em caso de falha ou cancelamento.
Não criar novas etapas para seleção de fonte, contexto ou aplicação. Essas
responsabilidades devem aparecer dentro das três etapas existentes.
## 11. Classes e módulos planejados