fix(cut-paper): no dejar la boca abierta antes de la primera palabra - #408
Merged
IAnMove merged 1 commit intoSep 12, 2026
Conversation
A zero-length closed viseme shared a timestamp with the first spoken word. rebuild kept the later open frame, so evaluateSceneLayer held that viseme from t=0 (Nilo open for 6s, Berta for 17s). Rest closed now starts at t=0. Detect-from-audio no longer applies a dummy plan when every Whisper unit is empty. Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumen ejecutivo
Qué cambia
El lipsync alineado ahora deja la boca cerrada desde t=0 hasta la primera palabra, en vez de congelar el primer visema abierto durante todo el silencio previo.
Para qué sirve
En el plano 2 de Tijeral, Nilo se quedaba con la boca abierta 6 s y Berta 17 s antes de hablar. El export Hocus de #407 heredaba ese fallo.
Impacto para el usuario
Play/Export de los planos talk/sticker (ES y EN) ya no muestra bocas abiertas en el silencio. Detectar habla no borra diálogo existente si Whisper no devuelve palabras útiles.
Riesgo
Estado
Summary
planAlignedCutoutDialogueemitted a zero-length closed viseme at the first word's start.rebuildCutoutDialogueLayersdedupes by time and keeps the later frame, so the first spoken viseme became the earliest keyframe.evaluateSceneLayerholds that pose for all t ≤ first keyframe — mouths hung open from the start of the shot.Rest closed now occupies t=0 → first word (distinct timestamps). Compiled Tijeral scenes were regenerated. Detect-from-audio throws instead of applying a dummy t=0 plan when every Whisper unit is empty/whitespace.
Stacked on #407 (
fix/tijeral-hocus-lipsync-20260912).Overview
02-talk/03-sticker.Detailed changes
Backend
N/A.
UI and Wizard
planAlignedCutoutDialogue: rest closed from t=0 when the first word starts later.animateCutoutDialogueFromAudio: require trimmed, timed units before replacing mouth keyframes.Data, provenance and compatibility
Regenerated bundled Tijeral scene JSON (ES/EN talk, sticker, full pilot). Plaza shots unchanged (no dialogue).
Files and ownership
ui/src/lib/cutoutDialogue.ts— planner fix.ui/src/components/Sidebar/SceneAnimatorPanel.tsx— empty-units guard.ui/tests/cutoutDialogue.test.mjs,ui/tests/cutPaper.test.ts— rest-closed assertions.*.maestro-scene.json— regenerated from the compiler.Validation
Date (UTC): 2026-09-12
Base SHA: 3a7dfa6
Head SHA: 5e43a48
Validation scope: focused
python scripts/verify_clean_repo.pypython -m compileall -q app/services app/launch.py scriptsFocused Python tests: N/A (UI lipsync only)
cd ui && npm run i18n:checkUI tests:
cd ui && npx tsx --tsconfig tsconfig.app.json --import ./tests/setupI18n.ts --test tests/cutoutDialogue.test.mjs tests/cutPaper.test.ts— 22/22 passcd ui && npm run lint -- --max-warnings=0cd ui && npm run buildgit diff --check— cleanE2E/smoke checks: N/A — compiler +
evaluateSceneLayercover the playback holdCode quality
main: pending CICI and review
CI of this HEAD: pending
Independent agent review of this HEAD: pending
Human merge click (operational, not code review): pending
Reviewed at current HEAD
Earlier review; HEAD has changed since (stale)
Pending
Unavailable
Coste de la tarea
Notes and limitations
Merge after or with #407. Does not change viseme vocabulary (still 4 shapes).
Follow-up work
None.
Checklist