feat: criado protótipo local de montagem incremental com gancho e
- criado protótipo local de montagem incremental com gancho e trechos preservados - adicionado checkbox no painel para executar planos pelo modo de montagem incremental Resumo: - 8 arquivos alterados - 4 novos - 4 modificados - 0 removidos 4 files changed, 230 insertions(+) Arquivos: - .jhonny/analises.db - code/cep-plugin/index.html - code/cep-plugin/main.js - code/src/tools/timeline.ts - code/engine/aplicar_montagem_incremental_prototipo.py - code/engine/editor/pedido_montagem_incremental_exemplo.json - code/engine/editor/plano_montagem_incremental_6.json - code/engine/editor/prototipo_montagem_incremental.py
This commit is contained in:
@@ -216,6 +216,8 @@
|
||||
<strong>Sem desfazer</strong>
|
||||
<p>Esta versão do Premiere não expõe undo para o painel. Um backup da sequência é criado automaticamente antes de aplicar.</p>
|
||||
</div>
|
||||
<label class="checkbox-field"><input id="editorialIncrementalMode" type="checkbox"><span>Usar montagem incremental (teste)</span></label>
|
||||
<p class="field-help">Marcado: cria uma sequência nova, limpa somente a cópia e monta nela os trechos preservados. A sequência original não é cortada.</p>
|
||||
<button id="btnApplyEditorialActions" class="button button-danger" onclick="applyEditorialActions()" type="button" disabled>Aplicar plano na timeline</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -419,6 +419,7 @@ function inserirLegendasNaTimeline() {
|
||||
|
||||
// ---- Teste isolado de ações pela engine Python ----------------------------
|
||||
var TESTAR_ACOES_ENGINE_SCRIPT = "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine/aplicar_plano_de_edicao.py";
|
||||
var MONTAGEM_INCREMENTAL_ENGINE_SCRIPT = "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine/aplicar_montagem_incremental_prototipo.py";
|
||||
|
||||
function testarAcoesCarregarExemplo() {
|
||||
var exemplo = {
|
||||
@@ -3805,6 +3806,11 @@ function applyEditorialActions() {
|
||||
}
|
||||
var numActions = plan.actions.length;
|
||||
|
||||
if (document.getElementById("editorialIncrementalMode") && document.getElementById("editorialIncrementalMode").checked) {
|
||||
aplicarMontagemIncremental(plan, numActions);
|
||||
return;
|
||||
}
|
||||
|
||||
var summary =
|
||||
numActions + " ação(ões) no plano (cortes, ganchos, zooms, textos e/ou marcadores).\n\n" +
|
||||
"Um backup da sequência atual será criado antes de aplicar. Confirmar?";
|
||||
@@ -3867,6 +3873,50 @@ function applyEditorialActions() {
|
||||
);
|
||||
}
|
||||
|
||||
function aplicarMontagemIncremental(plan, numActions) {
|
||||
var summary =
|
||||
numActions + " ação(ões) serão convertidas em trechos preservados.\n\n" +
|
||||
"Será criada uma nova sequência clonada; a sequência original não será cortada. Confirmar?";
|
||||
if (typeof window.confirm === "function" && !window.confirm(summary)) return;
|
||||
setBusy("btnApplyEditorialActions", true);
|
||||
setStep(3, "running", "Montando cópia…");
|
||||
taskStart("Montagem incremental (teste)", "Clonando a sequência e preparando os trechos");
|
||||
var caminhoDoPlano = path.join(silenceState.outputDir || os.tmpdir(), "plano-incremental-" + Date.now() + ".json");
|
||||
try { fs.writeFileSync(caminhoDoPlano, JSON.stringify(plan, null, 2), "utf-8"); } catch (erroEscrita) {
|
||||
setBusy("btnApplyEditorialActions", false);
|
||||
setStep(3, "error", "Falhou");
|
||||
taskEnd(false, "Não foi possível salvar o plano incremental.", erroEscrita.message);
|
||||
return;
|
||||
}
|
||||
var processoIncremental = null;
|
||||
taskStart("Montagem incremental (teste)", "Executando na sequência clonada", null, function () {
|
||||
if (processoIncremental) processoIncremental.kill("SIGTERM");
|
||||
});
|
||||
processoIncremental = runStreamed(
|
||||
SCANNER_PYTHON_BIN,
|
||||
[MONTAGEM_INCREMENTAL_ENGINE_SCRIPT, caminhoDoPlano],
|
||||
function (line) { silenceLog(line); },
|
||||
function (code, lastErr, lastOutput) {
|
||||
processoIncremental = null;
|
||||
setBusy("btnApplyEditorialActions", false);
|
||||
if (code !== 0) {
|
||||
setStep(3, "error", "Falhou");
|
||||
var detalhe = lastErr || "A montagem incremental não retornou detalhes.";
|
||||
try { detalhe = JSON.parse(lastOutput || "{}").erro || detalhe; } catch (_) {}
|
||||
taskEnd(false, "A montagem incremental falhou.", detalhe);
|
||||
silenceLog("Montagem incremental não aplicada: " + detalhe, "err");
|
||||
return;
|
||||
}
|
||||
setStep(3, "done", "Cópia montada");
|
||||
var resultado = null;
|
||||
try { resultado = JSON.parse(lastOutput || "{}").resultado || null; } catch (_) {}
|
||||
var nome = resultado && resultado.destinationSequenceName ? resultado.destinationSequenceName : "nova sequência";
|
||||
taskEnd(true, "Montagem incremental concluída em " + nome + ".");
|
||||
silenceLog("Montagem incremental concluída em " + nome + ".", "ok");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// Abre o seletor de arquivos nativo do CEP em vez de exigir que a pessoa cole
|
||||
// um caminho absoluto à mão.
|
||||
function pickEditorialPlanFile() {
|
||||
|
||||
Reference in New Issue
Block a user