Files
João Henrique 1249b3aeb7 feat: alinhada a remoção da engine Python ao fluxo ripple do execu
- alinhada a remoção da engine Python ao fluxo ripple do executor CEP para cortar vídeo e áudio
- criada remoção atômica para manter vídeo e áudio vinculados sincronizados
- criada aba de configuração de legendas offline e inclusão das preferências no pacote para a IA
- criado gerador offline de blocos de legenda sincronizados com palavras da transcrição e cortes aprovados
- criada uma versão base portátil da skill edit-video-by-voice para testes em outros agentes de IA
- incorporado perfil editorial opcional à skill portátil para orientar decisões de edição

Resumo:
- 14 arquivos alterados
- 4 novos
- 10 modificados
- 0 removidos

 10 files changed, 278 insertions(+), 33 deletions(-)

Arquivos:
  - code/cep-plugin/index.html
  - code/cep-plugin/main.js
  - code/docs/supported-actions.md
  - code/engine/editor/aplicador_de_plano_de_edicao.py
  - code/engine/editor/escrita/escrita_no_editor.py
  - code/engine/testes/duplos_de_premiere.py
  - code/engine/testes/test_aplicador_de_plano_de_edicao.py
  - code/src/tools/timeline.ts
  - code/tests/tools/structural-verification.test.ts
  - code/tests/tools/tool-modules.test.ts
  - code/engine/arquitetura/legendas.md
  - code/engine/editor/legendas/
  - code/engine/testes/test_gerador_de_legendas.py
  - skills/
2026-09-09 13:05:07 -04:00

2.6 KiB

Input timeline

The skill accepts any timeline format that can be unambiguously normalized to the following shape:

{
  "source": "video.mp4",
  "duration": 42.5,
  "utterances": [
    {
      "speaker": "apresentador",
      "text": "A fala transcrita.",
      "start": 3.2,
      "end": 5.8,
      "take": "take-02",
      "confidence": 0.98,
      "excluded": false
    }
  ]
}

An optional editor profile can be present at the same root level as source, duration, and utterances:

{
  "perfil_de_video": "Entrevista",
  "objetivo": {
    "principal": "Transmitir conhecimento e autoridade",
    "publico": "Pessoas interessadas no assunto",
    "mensagem": "O conteúdo da conversa é compreendido com contexto."
  },
  "narrativa": {
    "tipo": "História pessoal",
    "storytelling": true,
    "estrutura": "Apresentação → perguntas essenciais → aprofundamento → síntese e encerramento."
  },
  "emocao": {
    "objetivo": "Interesse e credibilidade",
    "intensidade": 2,
    "tom": "Informativo"
  },
  "formato": {
    "canais": "YouTube, podcast em vídeo, cortes sociais",
    "proporcao": "16:9",
    "duracao_minima_segundos": 60,
    "duracao_maxima_segundos": 600,
    "ritmo": "equilibrado"
  },
  "prioridades": ["Clareza", "Conteúdo", "Contexto", "Ritmo", "Estética"],
  "elementos_de_edicao": {
    "broll": true,
    "legendas": true,
    "textos": true,
    "graficos": false,
    "zoom": true,
    "cortes": "Remover redundâncias e silêncios longos; preservar respostas completas e contexto."
  },
  "regras_de_edicao": "Não cortar uma resposta de modo que altere o sentido.",
  "restricoes": "Não cortar frases de modo que prejudique o raciocínio.",
  "criterios_de_qualidade": "Manter contexto, lógica e informação relevante."
}

The profile is editorial context, not an execution request. Boolean flags and descriptions of future elements such as B-roll, captions, text, graphics, zoom, or music must not appear as actions unless the active action contract explicitly supports them.

segments, transcript, or another collection name may be accepted only when the items clearly provide equivalent timing and text fields. Do not silently repair malformed data, clamp out-of-range values, or infer the media duration.

Unknown metadata may inform analysis but must not be copied into the output contract. Explicit exclusion or inactivity flags take precedence over the content of the corresponding utterance. If profile text contains broken character encoding, preserve the intended meaning only when it is unambiguous; otherwise ask for a UTF-8 version instead of guessing.