diff --git a/.jhonny/analises.db b/.jhonny/analises.db
index 62f15b5..393a21d 100644
Binary files a/.jhonny/analises.db and b/.jhonny/analises.db differ
diff --git a/admin/PremiereMCP.command b/admin/PremiereMCP.command
index be89b09..625e10d 100755
--- a/admin/PremiereMCP.command
+++ b/admin/PremiereMCP.command
@@ -18,7 +18,7 @@
# agente de IA buscar o codigo certo. Best-effort: se o
# abre o tunel temporariamente quando necessario e fecha o
# processo que este ciclo iniciou ao terminar.
-# 4. LEMBRETE reinicie o Premiere Pro por completo para o painel
+# 4. LEMBRETE recarregue somente a extensao CEP para o painel
# reinstalado ser carregado - este passo so imprime isso
#
# Nao mexe em git (este projeto nao e um repositorio git) e nao sobe
@@ -199,19 +199,18 @@ elif run_step rag; then
fi
# ------------------------------------------------------------
-# 4) Lembrete de recarregar o painel dentro do Premiere
+# 4) Lembrete de recarregar somente a extensao dentro do Premiere
# ------------------------------------------------------------
if run_step reload; then
- step "4/4 REINICIAR O PREMIERE"
- echo "O painel ja foi reinstalado (passo 1), mas o Premiere so carrega a"
- echo "copia nova depois de um restart completo:"
- echo " 1. Feche o Premiere Pro por completo (Cmd+Q)"
- echo " 2. Abra de novo e va em Window > Extensions > MCP for Adobe Premiere Pro"
- echo " 3. Confira se aparecem as abas 'Bridge' e 'Cortar silencio'"
+ step "4/4 RECARREGAR A EXTENSAO CEP"
+ echo "O painel ja foi reinstalado (passo 1). Para carregar a copia nova:"
+ echo " 1. Feche somente o painel MCP for Adobe Premiere Pro"
+ echo " 2. Abra novamente em Window > Extensions > MCP for Adobe Premiere Pro"
+ echo " 3. Confira a aba Editar video e os passos Concluir edicao / Aplicar na timeline"
fi
echo
if [ "$FAILED" != "0" ]; then
die "ciclo terminou com pendencias - corrija os avisos acima antes de testar no Premiere."
fi
-ok "Ciclo concluido. Pronto para recarregar o painel no Premiere."
+ok "Ciclo concluido. Pronto para recarregar somente a extensao no Premiere."
diff --git a/code/cep-plugin/index.html b/code/cep-plugin/index.html
index 0d48afb..7df80be 100755
--- a/code/cep-plugin/index.html
+++ b/code/cep-plugin/index.html
@@ -95,7 +95,7 @@
Análise do Scanner
Não carregada
-
Carregue a análise mais recente do Scanner antes de gerar o plano de edição.
+
Carregue a análise mais recente do Scanner antes de concluir a edição.
TranscriçãoAguardando
Detecção de falantesAguardando
@@ -122,124 +122,14 @@
-
+
2
-
-
Transcrever a fala
-
Gera o texto com marcação de tempo usando o Whisper local.
-
- Bloqueado
-
-
-
-
- Este vídeo já foi transcrito antes
-
Reaproveite e pule direto para o plano de cortes — leva segundos em vez de minutos.
-
-
-
-
-
-
-
-
-
- Falantes detectados
-
-
-
Dê um nome a cada falante e desative quem não deve aparecer no vídeo. A decisão será enviada no JSON para a IA.
-
-
-
-
-
-
- Só grava a preferência no JSON — não corta nada aqui. A IA decide os cortes usando esse valor.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4
Concluir edição
Salva no banco a análise carregada, o tipo de vídeo e as configurações editoriais escolhidas. O JSON para a IA poderá ser gerado depois, quando necessário.
- Bloqueado
+ Bloqueado
@@ -255,14 +145,14 @@
-
+
- 5
+ 3
Aplicar na timeline
Selecione o plano de edição que a IA devolveu (cortes, zooms, textos, marcadores) e execute na sequência.
- Bloqueado
+ Bloqueado
diff --git a/code/cep-plugin/main.js b/code/cep-plugin/main.js
index fe6139e..61d71a5 100755
--- a/code/cep-plugin/main.js
+++ b/code/cep-plugin/main.js
@@ -2151,11 +2151,13 @@ function silenceSelecionarTipoVideo() {
if (!tipo) {
document.getElementById("silenceTipoVideoInfo").textContent = "Selecione um tipo cadastrado para continuar.";
setStep(1, "ready", "Selecione um tipo");
+ setStep(2, "locked", "Selecione o tipo");
document.getElementById("btnBuildPlan").disabled = true;
return;
}
document.getElementById("silenceTipoVideoInfo").textContent = tipo.nome + " · instruções serão incluídas no JSON para a IA.";
setStep(1, "done", "Selecionado");
+ setStep(2, "ready", "Pronto para concluir");
document.getElementById("btnBuildPlan").disabled = false;
silenceLog("Tipo de vídeo selecionado: " + tipo.nome + ".", "ok");
}
@@ -2371,10 +2373,9 @@ function silenceLoadScannerAnalysis() {
info.textContent = silenceState.sequenceName + " · " + quantidade + " trecho(s) · " +
(audioDoBanco.metricas_de_voz_disponiveis ? "métricas disponíveis" : "métricas não realizadas") + " · " +
(audioDoBanco.diarizacao_disponivel ? falantes.length + " falante(s)" : "diarização não realizada");
- setStep(3, "ready", "Pronto");
+ setStep(2, "locked", "Selecione o tipo");
setStep(1, "ready", "Selecione um tipo");
- setStep(4, "locked", "Selecione o tipo");
- setStep(5, "locked", "Bloqueado");
+ setStep(3, "locked", "Aguardando conclusão");
renderizarTiposDeVideoParaEdicao();
document.getElementById("btnBuildPlan").disabled = true;
// btnDiarize/btnVoiceFeatures/silenceDiarizeInfo/silenceVoiceFeaturesInfo ficavam no
@@ -2712,10 +2713,8 @@ function silenceDetectClip() {
// muda — evita aplicar um plano gerado para outro material.
function lockStepsFrom(first) {
var buttons = {
- 2: ["btnTranscribe"],
- 3: ["btnDiarize", "btnVoiceFeatures"],
- 4: ["btnBuildPlan"],
- 5: ["btnApplyEditorialActions"],
+ 2: ["btnBuildPlan"],
+ 3: ["btnApplyEditorialActions"],
};
for (var n = first; n <= 5; n++) {
setStep(n, "locked", "Bloqueado");
@@ -2769,8 +2768,7 @@ function silenceUseCachedTranscript() {
// Passos que dependem de existir uma transcrição, seja nova ou reaproveitada.
function unlockAfterTranscript() {
setStep(2, "done", "Transcrito");
- setStep(3, "ready", "Opcional");
- setStep(4, "ready", "Sua vez");
+ setStep(2, "ready", "Pronto para concluir");
document.getElementById("btnBuildPlan").disabled = false;
// btnDiarize/btnVoiceFeatures ficavam no step3 (legado, comentado em 2026-09-09).
var elBtnDiarize = document.getElementById("btnDiarize");
@@ -3264,14 +3262,6 @@ function silenceConcluirEdicao() {
configuracao: {
nome_do_tipo: silenceState.tipoVideo.nome,
instrucoes_do_tipo: tipoVideoResumoParaJson(silenceState.tipoVideo),
- configuracoes_de_fala: speakerConfigurationForJson(),
- configuracoes_de_edicao: {
- remocao_de_silencio: {
- habilitada: document.getElementById("silenceRemovalEnabled").checked,
- duracao_minima_segundos: Number(document.getElementById("silenceRemovalMinDuration").value) || 0.8,
- },
- legendas: carregarConfiguracaoDeLegendas(),
- },
transcricao: {
caminho: silenceState.transcriptPath,
origem: "Scanner",
@@ -3287,7 +3277,7 @@ function silenceConcluirEdicao() {
}
setBusy("btnBuildPlan", true);
- setStep(4, "running", "Salvando…");
+ setStep(2, "running", "Salvando…");
taskStart("Concluindo a edição", "Salvando a configuração no banco");
silenceLog("Salvando o tipo de vídeo e as configurações editoriais no banco…");
runStreamed(
@@ -3297,14 +3287,14 @@ function silenceConcluirEdicao() {
function (codigo, ultimoErro) {
setBusy("btnBuildPlan", false);
if (codigo !== 0) {
- setStep(4, "error", "Falhou");
+ setStep(2, "error", "Falhou");
taskEnd(false, "Não foi possível concluir a edição.", ultimoErro);
silenceLog("Falha ao salvar a configuração editorial.", "err");
showToast("err", ultimoErro || "Não foi possível salvar a edição no banco.");
return;
}
- setStep(4, "done", "Edição concluída");
- setStep(5, "locked", "Aguardando plano da IA");
+ setStep(2, "done", "Edição concluída");
+ setStep(3, "locked", "Aguardando plano da IA");
taskEnd(true, "Edição concluída e salva no banco.");
silenceLog("Edição concluída e salva no banco de análises.", "ok");
showToast("ok", "Edição concluída e salva no banco.");
@@ -3323,20 +3313,15 @@ function silenceGenerateJson() {
return;
}
setBusy("btnBuildPlan", true);
- setStep(4, "running", "Gerando…");
+ setStep(2, "running", "Gerando…");
silenceLog("Gerando arquivo JSON para a IA…");
try {
var transcript = JSON.parse(fs.readFileSync(silenceState.transcriptPath, "utf-8"));
- var silenceEnabled = document.getElementById("silenceRemovalEnabled").checked;
- var minSilence = parseFloat(document.getElementById("silenceRemovalMinDuration").value);
- if (!isFinite(minSilence) || minSilence < 0) minSilence = 0.8;
-
transcript.sequence = {
name: silenceState.sequenceName,
media_path: silenceState.mediaPath,
};
transcript.settings = Object.assign({}, transcript.settings, {
- silence_removal: { enabled: silenceEnabled, min_silence_seconds: minSilence },
legendas: carregarConfiguracaoDeLegendas(),
});
transcript.speaker_configuration = speakerConfigurationForJson();
@@ -3361,13 +3346,13 @@ function silenceGenerateJson() {
document.getElementById("silencePlanInfo").textContent =
"Envie este arquivo a um agente de IA externo. Ele deve devolver o plano de edição em JSON para o passo 5.";
- setStep(4, "done", "JSON pronto");
- setStep(5, "ready", "Sua vez");
+ setStep(2, "done", "JSON pronto");
+ setStep(3, "ready", "Sua vez");
document.getElementById("btnApplyEditorialActions").disabled = false;
showToast("ok", "JSON gerado: " + path.basename(out));
silenceLog("JSON gerado em " + out + " (" + segCount + " trechos).", "ok");
} catch (e) {
- setStep(4, "error", "Falhou");
+ setStep(2, "error", "Falhou");
showToast("err", "Falha ao gerar o JSON: " + e.message);
silenceLog("Falha ao gerar o JSON: " + e.message, "err");
}
@@ -3442,7 +3427,7 @@ function applyEditorialActions() {
if (typeof window.confirm === "function" && !window.confirm(summary)) return;
setBusy("btnApplyEditorialActions", true);
- setStep(5, "running", "Aplicando…");
+ setStep(3, "running", "Aplicando…");
taskStart("Aplicando o plano de edição", "Criando backup da sequência");
silenceLog("Criando backup da sequência…");
cs.evalScript(
@@ -3457,7 +3442,7 @@ function applyEditorialActions() {
var caminhoDoPlano = path.join(silenceState.outputDir || os.tmpdir(), "plano-editorial-" + Date.now() + ".json");
try { fs.writeFileSync(caminhoDoPlano, JSON.stringify(plan, null, 2), "utf-8"); } catch (erroEscrita) {
setBusy("btnApplyEditorialActions", false);
- setStep(5, "error", "Falhou");
+ setStep(3, "error", "Falhou");
taskEnd(false, "Não foi possível salvar o plano.", erroEscrita.message);
return;
}
@@ -3474,12 +3459,12 @@ function applyEditorialActions() {
processoAplicacao = null;
setBusy("btnApplyEditorialActions", false);
if (code !== 0) {
- setStep(5, "error", "Falhou");
+ setStep(3, "error", "Falhou");
taskEnd(false, "Falha ao aplicar o plano (código " + code + ").", lastErr);
silenceLog("Falha ao aplicar o plano (código " + code + ").", "err");
return;
}
- setStep(5, "done", "Aplicado");
+ setStep(3, "done", "Aplicado");
taskEnd(true, numActions + " ação(ões) aplicadas na timeline!");
silenceLog("Plano de edição aplicado com sucesso!", "ok");
}
@@ -4134,8 +4119,8 @@ function downloadModel(model, btn, approxMB) {
setStep(1, "locked", "Scanner");
setStep(2, "locked", "Scanner");
setStep(3, "locked", "Aguardando análise");
- setStep(4, "locked", "Aguardando análise");
- setStep(5, "locked", "Aguardando plano");
+ setStep(2, "locked", "Aguardando análise");
+ setStep(3, "locked", "Aguardando análise");
log("MCP for Adobe Premiere Pro CEP connector loaded");
setStatus("waiting", "Aguardando — a ponte está iniciando");