EuuIia commited on
Commit
b7fa7d2
·
verified ·
1 Parent(s): 3ba0439

Update api/ltx_server.py

Browse files
Files changed (1) hide show
  1. api/ltx_server.py +47 -41
api/ltx_server.py CHANGED
@@ -13,7 +13,8 @@ from huggingface_hub import logging
13
  logging.set_verbosity_error()
14
  logging.set_verbosity_warning()
15
  logging.set_verbosity_info()
16
- logging.set_verbosity_debug()
 
17
 
18
 
19
  LTXV_DEBUG=1
@@ -399,53 +400,58 @@ class VideoService:
399
  def _dividir_latentes_em_partes(self, latents_brutos, quantidade: int):
400
  """
401
  Divide um tensor de latentes em `quantidade` partes e retorna uma lista de clones.
402
-
403
- Args:
404
- latents_brutos: tensor [B, C, T, H, W]
405
- quantidade: número de partes que queremos dividir
406
-
407
  Returns:
408
  List[Tensor]: lista de `quantidade` partes, cada uma cloneada
409
  """
410
- total = latents_brutos.shape[2] # dimensão temporal
411
- partes = []
412
-
413
- if quantidade <= 1 or quantidade > total:
414
- return [latents_brutos.clone()]
 
 
415
 
416
  # calcular tamanho aproximado de cada parte
417
- step = total // quantidade
418
- overlap = 0 # sobreposição mínima de 1 frame entre partes
419
-
 
 
 
420
  for i in range(quantidade):
421
  start = i * step
422
  end = start + step
423
  if i == quantidade - 1:
424
- end = total # última parte vai até o final
425
  else:
426
- end += overlap # sobreposição
427
- parte = latents_brutos[:, :, start-1:end+1, :, :].clone()
428
- partes.append(parte)
429
-
430
- return partes
 
 
431
 
432
 
433
- def _dividir_latentes(self, latents_brutos):
434
- total = latents_brutos.shape[2] # dimensão temporal (número de latentes)
435
-
436
- if total % 2 == 1: # ÍMPAR
437
- # Ex: 11 primeira 0..5, segunda 5..10
438
- cut = total // 2
439
- primeira = latents_brutos[:, :, :cut+1, :, :].clone()
440
- segunda = latents_brutos[:, :, cut:, :, :].clone()
441
-
442
- else: # PAR
443
- # Ex: 12 primeira 0..5, segunda 5..11
444
- cut = total // 2
445
- primeira = latents_brutos[:, :, :cut, :, :].clone()
446
- segunda = latents_brutos[:, :, cut-1:, :, :].clone()
447
-
448
- return primeira, segunda
 
449
 
450
  def _concat_mp4s_no_reencode(self, mp4_list: List[str], out_path: str):
451
  """
@@ -654,11 +660,11 @@ class VideoService:
654
  pass
655
 
656
  # 2) Divide em duas partes
657
- lat_a, lat_b = self._dividir_latentes(latents_cpu)
658
- lat_a1, lat_a2 = self._dividir_latentes(lat_a)
659
- lat_b1, lat_b2 = self._dividir_latentes(lat_b)
660
-
661
- latents_parts = [lat_a1, lat_a2, lat_b1, lat_b2]
662
 
663
  temp_dir = tempfile.mkdtemp(prefix="ltxv_"); self._register_tmp_dir(temp_dir)
664
  results_dir = "/app/output"; os.makedirs(results_dir, exist_ok=True)
 
13
  logging.set_verbosity_error()
14
  logging.set_verbosity_warning()
15
  logging.set_verbosity_info()
16
+ logging.set_verbosity_debu
17
+ g()
18
 
19
 
20
  LTXV_DEBUG=1
 
400
  def _dividir_latentes_em_partes(self, latents_brutos, quantidade: int):
401
  """
402
  Divide um tensor de latentes em `quantidade` partes e retorna uma lista de clones.
403
+ Args: latents_brutos: tensor [B, C, T, H, W]
404
+ quantidade: número de partes que queremos dividir
 
 
 
405
  Returns:
406
  List[Tensor]: lista de `quantidade` partes, cada uma cloneada
407
  """
408
+ sum_latent = latents_brutos.shape[2] # dimensão temporal (latentes)
409
+ chunks = []
410
+
411
+ # minimo 5 latentes para dividir
412
+ #min = 5
413
+ #if sum_latent < min or sum_latent//quantidade < min :
414
+ # return [latents_brutos.clone()]
415
 
416
  # calcular tamanho aproximado de cada parte
417
+ step = sum_latent // quantidade
418
+ overlap = 1
419
+
420
+ print(f"================PODA CAUSAL=================")
421
+ print(f"[DEBUG] TOTAL LATENTES A DIVIDIR /{quantidade} = {sum_latent}")
422
+
423
  for i in range(quantidade):
424
  start = i * step
425
  end = start + step
426
  if i == quantidade - 1:
427
+ end = total
428
  else:
429
+ end += overlap
430
+ chunk = latents_brutos[:, :, start:end, :, :].clone()
431
+ chunks.append(chunk)
432
+ chunk_sum = chunk.shape[2]
433
+ print(f"[DEBUG] chunk{i+1}[:, :, start:end, :, :] = {chunk_sum}")
434
+
435
+ return chunks
436
 
437
 
438
+ def dividir_latentes(latents_brutos):
439
+ sum_latent = latents_brutos.shape[2] # dimensão temporal (latentes)
440
+ cut1 = sum_latent // 2
441
+ cut2 = sum_latent-cut1-1
442
+ chunk1 = latents_brutos[:, :, :cut1, :, :].clone()
443
+ chunk2 = latents_brutos[:, :, cut2:, :, :].clone()
444
+ chunk1_sum = primeir.shape[2] # dimensão temporal (latentes1)
445
+ chunk2_sum = segunda.shape[2] # dimensão temporal (latentes2)
446
+
447
+ print(f"==============PODA CAUSAL==================")
448
+ print(f"[DEBUG] TOTAL LATENTES A DIVIDIR = {sum_latent}")
449
+ print(f"[DEBUG] chunk1[:, :, :{cut1}, :, :] = {chunk1_sum}")
450
+ print(f"[DEBUG] chunk2[:, :, :{cut2}, :, :] = {chunk2_sum}")
451
+ print(f"===========================================")
452
+
453
+ return primeira, segunda
454
+
455
 
456
  def _concat_mp4s_no_reencode(self, mp4_list: List[str], out_path: str):
457
  """
 
660
  pass
661
 
662
  # 2) Divide em duas partes
663
+ #lat_a, lat_b = self._dividir_latentes(latents_cpu)
664
+ #lat_a1, lat_a2 = self._dividir_latentes(lat_a)
665
+ #lat_b1, lat_b2 = self._dividir_latentes(lat_b)
666
+ #latents_parts = [lat_a1, lat_a2, lat_b1, lat_b2]
667
+ latents_parts = self._dividir_latentes_em_partes(latents_cpu,4)
668
 
669
  temp_dir = tempfile.mkdtemp(prefix="ltxv_"); self._register_tmp_dir(temp_dir)
670
  results_dir = "/app/output"; os.makedirs(results_dir, exist_ok=True)