Buckets:

mishig's picture
|
download
raw
8.9 kB
#
# Bajo licencia Apache License, versión 2.0 (la "Licencia");
# no puede usar este archivo excepto en cumplimiento de la Licencia.
# Puede obtener una copia de la Licencia en
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# A menos que la ley aplicable lo exija o se haya acordado por escrito, el software
# distribuido bajo la Licencia se distribuye en una base "TAL CUAL",
# SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sea expresa o implícita.
# Consulte la Licencia para el lenguaje específico que rige los permisos y
# limitaciones de la Licencia. -->
# Echo
[Echo](https://github.com/jd-opensource/JoyAI-Echo) es un modelo de generación de video de larga duración. Admite un primer frame limpio opcional, ranuras de memoria de imagen/áudio ordenadas y un muestreador estocástico de pocos pasos de Destilación de Coincidencia de Distribuciones (DMD). El pipeline genera video y audio sincronizados.
Echo se implementa como un [ModularPipeline](/docs/diffusers/main/es/api/modular_diffusers/pipeline#diffusers.ModularPipeline), por lo que sus bloques de codificación de texto, condicionamiento de memoria, desruido estocástico DMD y decodificación pueden ejecutarse como un flujo de trabajo completo o componerse de forma independiente.
## Inferencia
Cargue directamente el checkpoint oficial [jdopensource/JoyAI-Echo](https://huggingface.co/jdopensource/JoyAI-Echo). Utiliza el codificador de texto y el tokenizador de [google/gemma-3-12b-it](https://huggingface.co/google/gemma-3-12b-it). El repositorio de Gemma está restringido, por lo que debe aceptar su licencia y autenticarse con Hugging Face antes de cargar el pipeline.
El modelo publicado utiliza 241 fotogramas en su ejemplo de video largo. Las coordenadas de RoPE del video se mantienen en la tasa de entrenamiento de 24 fps, independientemente de la tasa del contenedor de salida.
```py
import torch
import torchaudio
from PIL import Image
from diffusers import ComponentsManager, ModularPipeline
from diffusers.utils import encode_video
manager = ComponentsManager()
pipe = ModularPipeline.from_pretrained("jdopensource/JoyAI-Echo", components_manager=manager)
pipe.load_components(dtype={"default": torch.bfloat16, "audio_vae": torch.float32})
manager.enable_auto_cpu_offload(device="cuda")
pipe.vae.enable_tiling()
first_frame = Image.open("first_frame.png").convert("RGB")
memory_images = [Image.open(path).convert("RGB") for path in ["memory_0.png", "memory_1.png"]]
memory_audio_with_rates = [torchaudio.load(path) for path in ["memory_0.wav", "memory_1.wav"]]
memory_audio = [waveform for waveform, _ in memory_audio_with_rates]
memory_audio_rates = [sample_rate for _, sample_rate in memory_audio_with_rates]
output = pipe(
prompt="A cinematic dialogue scene in a quiet cafe.",
image=first_frame,
memory_images=memory_images,
memory_audio_waveforms=memory_audio,
memory_audio_sample_rates=memory_audio_rates,
width=1280,
height=736,
num_frames=241,
frame_rate=25.0,
model_frame_rate=24.0,
generator=torch.Generator(device="cuda").manual_seed(42),
output_type="np",
output=["videos", "audio"],
)
encode_video(
output["videos"][0],
fps=25,
audio=output["audio"][0].float().cpu(),
audio_sample_rate=pipe.vocoder.config.output_sampling_rate,
output_path="echo.mp4",
)
```
El programa de sigma DMD predeterminado es el programa de ocho pasos publicado. Predice `x0` en cada paso y vuelve a añadir ruido con ruido gaussiano nuevo en el siguiente sigma, por lo que un `torch.Generator` con semilla controla tanto el ruido inicial como todo el ruido intermedio.
La codificación de audio en memoria cruda requiere `torchaudio`. Para mantener la paridad de referencia, mantenga `audio_vae` en FP32, como se muestra arriba. Los flujos de trabajo modulares pueden almacenar en caché los tensores normalizados y desempaquetados del codificador VAE. Los latentes de video tienen forma `(batch, channels, frames, height, width)` y los latentes de audio tienen forma `(batch, channels, time, mel_bins)`. El bloque principal `denoise` empaqueta esos tensores, expande la condición para `num_videos_per_prompt` y desempaqueta las salidas desruidadas de vuelta a la misma forma VAE. Pase también los `latents` y `audio_latents` iniciales en esa forma desempaquetada. Los decodificadores toman tensores VAE normalizados y los desnormalizan inmediatamente antes de decodificar. `output=["latents", "audio_latents"]` devuelve tensores VAE normalizados. Con `output_type="latent"` y `output=["videos", "audio"]`, obtiene los tensores VAE desnormalizados sin decodificar.
## EchoModularPipeline[[diffusers.EchoModularPipeline]]
#### diffusers.EchoModularPipeline[[diffusers.EchoModularPipeline]]
```python
diffusers.EchoModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/echo/modular_pipeline.py#L27)
Un ModularPipeline para el punto de control DMD de video largo de Echo.
## EchoBlocks[[diffusers.EchoBlocks]]
#### diffusers.EchoBlocks[[diffusers.EchoBlocks]]
```python
diffusers.EchoBlocks()
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/echo/modular_blocks_echo.py#L220)
Generación de video a partir de referencia con Echo, condicionamiento limpio del primer fotograma, ranuras de memoria de imagen/áudio ordenadas y denoising estocástico DMD.
Componentes: text_encoder (`PreTrainedModel`) tokenizer (`PreTrainedTokenizerBase`) conectores (`LTX2TextConnectors`) vae (`AutoencoderKLLTX2Video`) audio_vae (`AutoencoderKLLTX2Audio`) transformer (`LTX2VideoTransformer3DModel`) video_processor (`VideoProcessor`) vocoder (`LTX2Vocoder`)
Entradas: prompt (`str`): El prompt o prompts para guiar la generación de imágenes. max_sequence_length (`int`, *opcional*, valor predeterminado 1024): Longitud máxima de secuencia para la codificación del prompt. image (`Image | Tensor`, *opcional*): Opcional primer fotograma utilizado como condición de referencia limpia. memory_images (`list`, *opcional*): Imágenes de referencia ordenadas, una por cada ranura de memoria de Echo. memory_audio_waveforms (`list`, *opcional*): Formas de onda de memoria ordenadas como tensores `(channels, samples)`. Las entradas más largas de 9,62 segundos se recortan a su ventana de mayor respuesta. Use `None` para una ranura silenciosa. memory_audio_sample_rates (`int | list`, *opcional*): Tasa de muestreo compartida por todas las formas de onda de memoria, o una tasa por ranura. height (`int`, *opcional*, valor predeterminado 512): La altura en píxeles de la imagen generada. width (`int`, *opcional*, valor predeterminado 704): El ancho en píxeles de la imagen generada. model_frame_rate (`float`, *opcional*, valor predeterminado 24.0): Tasa de fotogramas en tiempo de entrenamiento utilizada para las coordenadas RoPE de video de Echo. memory_position_offset (`float`, *opcional*, valor predeterminado 500.0): Centro temporal asignado a la primera ranura de memoria. memory_position_slot_stride (`float`, *opcional*, valor predeterminado 50.0): Distancia temporal entre los centros de ranuras de memoria consecutivas. num_videos_per_prompt (`int`, *opcional*, valor predeterminado 1): Número de videos por prompt. num_frames (`int`, *opcional*, valor predeterminado 241): Número de fotogramas de píxeles generados; debe ser `1 + k * vae_temporal_compression_ratio`. frame_rate (`float`, *opcional*, valor predeterminado 25.0): Tasa de fotogramas del video generado. latents (`Tensor`, *opcional*): Ruido de video inicial opcional en forma de VAE (B, C, F, H, W). audio_latents (`Tensor`, *opcional*): Ruido de audio inicial opcional en forma de VAE (B, C, L, M). generator (`Generator`, *opcional*): Generador de Torch para generación determinista. sigmas (`list | tuple`): Programa de sigma de DMD, incluido el cero terminal. attention_kwargs (`dict`, *opcional*): Kwargs adicionales para los procesadores de atención. output_type (`str`, *opcional*, valor predeterminado pil): Formato de salida: 'pil', 'np', 'pt'. decode_timestep (`None`, *opcional*, valor predeterminado 0.0): Paso de tiempo utilizado para decodificar los latentes finales. decode_noise_scale (`None`, *opcional*): Factor de interpolación de ruido aplicado en el paso de tiempo de decodificación.
Salidas: videos (`list`): Los videos generados. audio (`Tensor`): La forma de onda de audio generada.

Xet Storage Details

Size:
8.9 kB
·
Xet hash:
0db2000d54b23a3e16ccb08780fae402a4a4d521eb967788dada7d2841fb9fc1

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.