euiia commited on
Commit
795e89c
·
verified ·
1 Parent(s): ce26c61

Create upscaler_specialist.py

Browse files
Files changed (1) hide show
  1. upscaler_specialist.py +62 -0
upscaler_specialist.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # upscaler_specialist.py
2
+ # Copyright (C) 2025 Carlos Rodrigues dos Santos
3
+ # Especialista ADUC para upscaling espacial de tensores latentes.
4
+
5
+ import torch
6
+ import logging
7
+ from diffusers import LTXLatentUpsamplePipeline
8
+
9
+ from ltx_manager_helpers import ltx_manager_singleton
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+ class UpscalerSpecialist:
14
+ """
15
+ Especialista responsável por aumentar a resolução espacial de tensores latentes
16
+ usando o LTX Video Spatial Upscaler.
17
+ """
18
+ def __init__(self, base_vae):
19
+ self.device = 'cuda' if torch.cuda.is_available() else 'cpu'
20
+ self.pipe_upsample = None
21
+ if base_vae is not None:
22
+ logger.info("Inicializando Especialista de Upscale Latente...")
23
+ try:
24
+ self.pipe_upsample = LTXLatentUpsamplePipeline.from_pretrained(
25
+ "linoyts/LTX-Video-spatial-upscaler-0.9.8",
26
+ vae=base_vae,
27
+ torch_dtype=torch.bfloat16,
28
+ ).to(self.device)
29
+ logger.info("Especialista de Upscale Latente pronto.")
30
+ except Exception as e:
31
+ logger.error(f"Falha ao carregar o modelo de upscale: {e}", exc_info=True)
32
+ else:
33
+ logger.warning("VAE base não fornecido. Especialista de Upscale desativado.")
34
+
35
+ @torch.no_grad()
36
+ def upscale(self, latents: torch.Tensor) -> torch.Tensor:
37
+ """
38
+ Aplica o upscaling 2x nos tensores latentes fornecidos.
39
+ """
40
+ if self.pipe_upsample is None:
41
+ logger.warning("Upscaler não está disponível. Retornando latentes originais.")
42
+ return latents
43
+
44
+ logger.info(f"Upscaler: Recebeu latentes com shape {latents.shape}. Aplicando upscale 2x...")
45
+
46
+ # O upscaler opera em um batch de latentes.
47
+ upscaled_latents = self.pipe_upsample(
48
+ latents=latents,
49
+ output_type="latent"
50
+ ).frames
51
+
52
+ logger.info(f"Upscaler: Latentes redimensionados para {upscaled_latents.shape}.")
53
+ return upscaled_latents
54
+
55
+ # Instanciação Singleton
56
+ # Depende do VAE do ltx_manager, então o obtemos de lá.
57
+ try:
58
+ base_vae_for_upscaler = ltx_manager_singleton.workers[0].pipeline.vae
59
+ upscaler_specialist_singleton = UpscalerSpecialist(base_vae=base_vae_for_upscaler)
60
+ except Exception as e:
61
+ logger.error(f"Não foi possível inicializar o UpscalerSpecialist Singleton: {e}")
62
+ upscaler_specialist_singleton = None