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/
This commit is contained in:
João Henrique
2026-09-09 13:05:07 -04:00
parent f3e356340b
commit 1249b3aeb7
18 changed files with 730 additions and 33 deletions
@@ -0,0 +1,29 @@
# Action schema 1.0
```json
{
"schema_version": "1.0",
"source": "video.mp4",
"actions": [
{
"kind": "cut",
"start": 0.0,
"end": 2.5,
"reason": "Abertura sem conteúdo editorial."
}
]
}
```
The root contains only `schema_version`, `source`, and `actions`. The schema
version is exactly `"1.0"`; `source` is a non-empty string; and `actions` is
an array of supported operations.
For version 1.0, the only supported operation is `cut`. It removes the
half-open interval `[start, end)` from the original media. `start` and `end`
are finite seconds, `start < end`, and both values must be within the known
source duration. Cut intervals must be sorted and must not overlap. Adjacent
intervals should be merged.
`reason` is required and must explain the editorial basis without inventing
facts or claiming that an editor has already applied the action.
@@ -0,0 +1,80 @@
# Input timeline
The skill accepts any timeline format that can be unambiguously normalized to
the following shape:
```json
{
"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`:
```json
{
"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.