diff --git a/image.py b/image.py index d4ffb98..1a12a04 100644 --- a/image.py +++ b/image.py @@ -179,17 +179,24 @@ class SessionImageSender: is_final_chunk = getattr(loop, 'global_is_final_chunk', False) # 🚀 FIX: Compensar los frames destruidos por el VAE en el ciclo final - if is_final_chunk: - _log(f" -> 🏁 LOTE FINAL ABSOLUTO DETECTADO. Compensando mermas del VAE (Timeline forzado al 100%).") - loop.global_accumulated_frames = source_total - else: - loop.global_accumulated_frames += advanced_original_frames + is_chunk_mode = getattr(loop, 'global_step_by_chunk', False) - # 🚀 NUEVO: Detectar si es el ciclo final o un ciclo único - is_final_cycle = loop.global_accumulated_frames >= source_total + if is_chunk_mode: + # En modo TTS (Texto), el progreso se mide estrictamente en frases/chunks, no en frames de video. + is_final_cycle = is_final_chunk + _log(f" -> 🧩 Modo Texto activo: Progreso gestionado por frases ({loop.global_accumulated_frames} / {source_total}).") + else: + # Lógica original por frames de video + if is_final_chunk: + _log(f" -> 🏁 LOTE FINAL ABSOLUTO DETECTADO. Compensando mermas del VAE (Timeline forzado al 100%).") + loop.global_accumulated_frames = source_total + else: + loop.global_accumulated_frames += advanced_original_frames + + is_final_cycle = loop.global_accumulated_frames >= source_total + _log(f" -> 📈 Timeline avanzado a {loop.global_accumulated_frames} / {source_total} frames") _log(f" -> ✂️ Tensor truncado a {frames_accepted} frames válidos.") - _log(f" -> 📈 Timeline avanzado a {loop.global_accumulated_frames} / {source_total}") last_frame = valid_images[-1:].clone().cpu() global_session_image = last_frame diff --git a/loop.py b/loop.py index 4648d61..e61790f 100644 --- a/loop.py +++ b/loop.py @@ -13,6 +13,7 @@ global_source_frame_count = 1 global_select_every_nth = 1 global_server_port = 8188 # 💡 NUEVO: Única fuente de la verdad para el puerto global_ltx_mode = False +global_step_by_chunk = False @register_node class SequentialLoopStart: @@ -98,6 +99,8 @@ class AutoLoopCalculatorLTX: import math from . import loop + loop.global_step_by_chunk = False + potential_effective_frames = source_frame_count // select_every_nth if potential_effective_frames < 9: diff --git a/video.py b/video.py index f4723e2..6a55534 100644 --- a/video.py +++ b/video.py @@ -488,6 +488,8 @@ class AutoLoopCalculator: import math from . import loop + loop.global_step_by_chunk = False + potential_effective_frames = source_frame_count // select_every_nth safe_effective_frames = potential_effective_frames # Sin restricciones @@ -596,6 +598,8 @@ class AutoLoopCalculatorTTS: from . import loop + loop.global_step_by_chunk = True + # 1. Separar el texto según el modo elegido if split_mode == "Frases (Puntos)": # PASO A: Separación cruda respetando todos los signos @@ -806,6 +810,8 @@ class AutoLoopCalculatorWan: import math from . import loop + loop.global_step_by_chunk = False + # --- MEISOFT PATCH: Sincronización Matemática (Hold Last Frame) --- # 1. Redondear hacia ARRIBA a la regla 4n+1 (Acolchado WanVideo) potential_effective_frames = source_frame_count // select_every_nth