# VAE для Kandinsky 6

Kandinsky 6 использует каузальный 3D K-VAE для супер-разрешения видео и VAE мел-спектрограммы MMAudio, в паре с отдельным [MMAudioVocoder](/docs/diffusers/main/ru/api/models/kandinsky6_vae#diffusers.MMAudioVocoder) BigVGAN, для синхронизированной генерации аудио.

## Kandinsky6SRVAE[[diffusers.Kandinsky6SRVAE]]

Причинный 3D K-VAE, используемый в [Kandinsky6SRPipeline](/docs/diffusers/main/ru/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline). Он обрабатывает видео произвольной длины в сегментах с ограниченной памятью, при этом воспроизводя точный результат, получаемый при однократном проходе без сегментации.

```python
import torch
from diffusers import Kandinsky6SRVAE

vae = Kandinsky6SRVAE.from_pretrained(
    "kandinskylab/Kandinsky-6.0-VSR-5s-Diffusers", subfolder="vae", torch_dtype=torch.bfloat16
)
```

#### diffusers.Kandinsky6SRVAE[[diffusers.Kandinsky6SRVAE]]

```python
diffusers.Kandinsky6SRVAE(in_channels: int = 3, out_channels: int = 3, latent_channels: int = 64, encoder_block_out_channels: tuple[int, ...] = (16, 128, 256, 512, 1024), decoder_block_out_channels: tuple[int, ...] = (16, 256, 512, 1024, 2048), layers_per_block: int = 2, temporal_compression_ratio: int = 4, temporal_compression_start_level: int = 1, scaling_factor: float = 0.910344004631042)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kandinsky6_sr.py#L516)

**Параметры:**

in_channels (`int`, по умолчанию `3`) : Количество каналов пикселей.

out_channels (`int`, по умолчанию `3`) : Количество реконструированных пиксельных каналов.

latent_channels (`int`, по умолчанию `64`) : Количество латентных каналов.

encoder_block_out_channels (`tuple[int, ...]`, по умолчанию `(16, 128, 256, 512, 1024)`) : Выходная ширина остаточных блоков на каждом уровне кодировщика; на каждом уровне, кроме последнего, пространственный размер уменьшается вдвое, а ширина удваивается при переходе к следующему уровню.

decoder_block_out_channels (`tuple[int, ...]`, по умолчанию `(16, 256, 512, 1024, 2048)`) : Выходная ширина остаточных блоков на каждом уровне декодера.

layers_per_block (`int`, по умолчанию `2`) : количество остаточных блоков на каждом уровне кодировщика; декодер использует на один блок больше на каждом уровне.

temporal_compression_ratio (`int`, по умолчанию `4`) : коэффициент временного сжатия; `log2` от него последовательных уровней также сжимает время.

temporal_compression_start_level (`int`, по умолчанию `1`) : Первый уровень, сжимающий время.

scaling_factor (`float`, по умолчанию `0.910344`) : Масштаб, применяемый к латентам перед их передачей в диффузионный трансформер.

Причинный 3D K-VAE, используемый [Kandinsky6SRPipeline](/docs/diffusers/main/ru/api/pipelines/kandinsky6#diffusers.Kandinsky6SRPipeline) для кодирования и декодирования видео.

Видео обрабатываются во временных сегментах по 16 пиксельных кадров (плюс начальный кадр). Причинные свёртки переносят состояние своей отсечки между сегментами, поэтому сегментация ограничивает только пиковое потребление памяти и не изменяет результат.

#### encode[[diffusers.Kandinsky6SRVAE.encode]]

```python
encode(x: torch.Tensor, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kandinsky6_sr.py#L585)

**Параметры:**

x (`torch.Tensor` формы `(batch_size, channels, num_frames, height, width)`) : Пиксельное видео в диапазоне `[-1, 1]`. `num_frames` должно быть равно `1 + k * temporal_compression_ratio`.

return_dict (`bool`, по умолчанию `True`) : следует ли возвращать [AutoencoderKLOutput](/docs/diffusers/main/ru/api/models/autoencoderkl_qwenimage#diffusers.models.modeling_outputs.AutoencoderKLOutput) вместо обычного кортежа.

Кодирует видео в его латентное распределение.

#### decode[[diffusers.Kandinsky6SRVAE.decode]]

```python
decode(z: torch.Tensor, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kandinsky6_sr.py#L611)

**Параметры:**

z (`torch.Tensor` формы `(batch_size, latent_channels, num_latent_frames, height, width)`) : Латенты, уже разделённые на `scaling_factor`.

return_dict (`bool`, по умолчанию `True`) : следует ли возвращать `~models.autoencoder_kl.DecoderOutput` вместо обычного кортежа.

Декодировать латенты в видео.

#### forward[[diffusers.Kandinsky6SRVAE.forward]]

```python
forward(sample: torch.Tensor, sample_posterior: bool = False, return_dict: bool = True, generator: torch.Generator | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kandinsky6_sr.py#L642)

**Параметры:**

sample (`torch.Tensor` формы `(batch_size, channels, num_frames, height, width)`) : Пиксельное видео в диапазоне `[-1, 1]`. `num_frames` должно быть равно `1 + k * temporal_compression_ratio`.

sample_posterior (`bool`, *необязательный*, по умолчанию `False`) : Флаг, определяющий, следует ли выполнять выборку из латентного апостериорного распределения вместо использования его моды.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли `~models.autoencoder_kl.DecoderOutput` вместо обычного кортежа.

generator (`torch.Generator`, *необязательный*) : [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) для обеспечения детерминированности выборки.

**Возвращает:** `~models.autoencoder_kl.DecoderOutput` или `tuple`

Если `return_dict` равно True, возвращается `~models.autoencoder_kl.DecoderOutput`, в противном случае возвращается обычный `tuple`. Его `sample` — это восстановленное видео.

## MMAudioVAE[[diffusers.MMAudioVAE]]

Мел-спектрограммный VAE, используемый [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ru/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline) при `sample_audio=True`. Выход его метода `decode` — это мел-спектрограмма; пропустите её через [MMAudioVocoder](/docs/diffusers/main/ru/api/models/kandinsky6_vae#diffusers.MMAudioVocoder), чтобы получить звуковой сигнал.

Референсная реализация доступна по адресу [hkchengrex/MMAudio](https://github.com/hkchengrex/MMAudio) (лицензия MIT).

```python
import torch
from diffusers import MMAudioVAE

audio_vae = MMAudioVAE.from_pretrained(
    "kandinskylab/Kandinsky-6.0-Pro-distill-5s-Diffusers", subfolder="audio_vae", torch_dtype=torch.bfloat16
)
```

#### diffusers.MMAudioVAE[[diffusers.MMAudioVAE]]

```python
diffusers.MMAudioVAE(mel_bins: int = 128, latent_channels: int = 40, hidden_channels: int = 512, channel_multipliers: tuple[int, ...] = (1, 2, 4), layers_per_block: int = 2, sample_rate: int = 44100, n_fft: int = 2048, hop_length: int = 512, scaling_factor: float = 0.417)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_mmaudio.py#L350)

**Параметры:**

mel_bins (`int`, по умолчанию `128`) : Количество mel-бин.

latent_channels (`int`, по умолчанию `40`) : Количество латентных каналов.

hidden_channels (`int`, по умолчанию `512`) : Базовая ширина автоэнкодера.

channel_multipliers (`tuple[int, ...]`, по умолчанию `(1, 2, 4)`) : Множители ширины уровней автоэнкодера.

layers_per_block (`int`, по умолчанию `2`) : количество остаточных блоков на каждом уровне кодировщика; декодер использует на один блок больше на каждом уровне.

sample_rate (`int`, по умолчанию `44100`) : Частота дискретизации волновой формы.

n_fft (`int`, по умолчанию `2048`) : размер FFT для мел-фронтенда.

hop_length (`int`, по умолчанию `512`) : Длина шага мел-фронтенда. Должна совпадать с общим коэффициентом апсемплинга [MMAudioVocoder](/docs/diffusers/main/ru/api/models/kandinsky6_vae#diffusers.MMAudioVocoder), с которым связана эта VAE.

scaling_factor (`float`, по умолчанию `0.417`) : Масштаб, применяемый к латентам перед их передачей в диффузионный трансформер.

Аудио-VAE для [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ru/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline): автоэнкодер, сохраняющий амплитуду, работающий с лог-мел-спектрограммами (MMAudio, https://arxiv.org/abs/2412.15322).

`encode` преобразует звуковой сигнал в латентное распределение; `decode` возвращает латенты в мел-спектрограмму, которую [MMAudioVocoder](/docs/diffusers/main/ru/api/models/kandinsky6_vae#diffusers.MMAudioVocoder) затем преобразует в звуковой сигнал. Одна латентная рамка покрывает `hop_length * 2` сэмпла.

#### encode[[diffusers.MMAudioVAE.encode]]

```python
encode(audio: torch.Tensor, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_mmaudio.py#L403)

**Параметры:**

audio (`torch.Tensor` формы `(batch_size, num_samples)`) : Моно-волна в диапазоне `[-1, 1]` с частотой дискретизации `sample_rate`.

return_dict (`bool`, по умолчанию `True`) : следует ли возвращать [AutoencoderKLOutput](/docs/diffusers/main/ru/api/models/autoencoderkl_qwenimage#diffusers.models.modeling_outputs.AutoencoderKLOutput) вместо обычного кортежа.

Кодирует звуковую волну в её латентное распределение.

#### decode[[diffusers.MMAudioVAE.decode]]

```python
decode(z: torch.Tensor, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_mmaudio.py#L420)

**Параметры:**

z (`torch.Tensor` формы `(batch_size, latent_channels, num_latent_frames)`) : Латенты, уже разделённые на `scaling_factor`.

return_dict (`bool`, по умолчанию `True`) : следует ли возвращать `~models.autoencoder_kl.DecoderOutput` вместо обычного кортежа.

**Возвращает:**

Мел-спектрограмма формы `(batch_size, mel_bins, num_mel_frames)`, готовая для [MMAudioVocoder](/docs/diffusers/main/ru/api/models/kandinsky6_vae#diffusers.MMAudioVocoder).

Декодирование латентов в мел-спектрограмму.

#### forward[[diffusers.MMAudioVAE.forward]]

```python
forward(sample: torch.Tensor, sample_posterior: bool = False, return_dict: bool = True, generator: torch.Generator | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_mmaudio.py#L439)

**Параметры:**

sample (`torch.Tensor` формы `(batch_size, num_samples)`) : Монофоническая волна в диапазоне `[-1, 1]` с частотой дискретизации `sample_rate` для кодирования и реконструкции в виде мел-спектрограммы.

sample_posterior (`bool`, *необязательный*, по умолчанию `False`) : Флаг, определяющий, следует ли выполнять выборку из латентного апостериорного распределения вместо использования его моды.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли `~models.autoencoder_kl.DecoderOutput` вместо обычного кортежа.

generator (`torch.Generator`, *необязательный*) : [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) для обеспечения детерминированности выборки.

**Возвращает:** `~models.autoencoder_kl.DecoderOutput` или `tuple`

Если `return_dict` равно True, возвращается объект `~models.autoencoder_kl.DecoderOutput`, в противном случае возвращается обычный `tuple`. Его `sample` представляет собой восстановленную мел-спектрограмму формы `(batch_size, mel_bins, num_mel_frames)`.

## MMAudioVocoder[[diffusers.MMAudioVocoder]]

Адаптировано из вокодерных пакетов MMAudio, основанных на BigVGAN-v2, который, в свою очередь, взят из [NVIDIA/BigVGAN](https://github.com/NVIDIA/BigVGAN) (лицензия MIT), с использованием антиалиасинговых активаций Snake из [alias-free-torch](https://github.com/junjun3518/alias-free-torch) (Apache License 2.0).

#### diffusers.MMAudioVocoder[[diffusers.MMAudioVocoder]]

```python
diffusers.MMAudioVocoder(num_mels: int = 128, upsample_initial_channel: int = 1536, upsample_rates: tuple[int, ...] = (8, 4, 2, 2, 2, 2), upsample_kernel_sizes: tuple[int, ...] = (16, 8, 4, 4, 4, 4), resblock_kernel_sizes: tuple[int, ...] = (3, 7, 11), resblock_dilation_sizes: tuple[tuple[int, ...], ...] = ((1, 3, 5), (1, 3, 5), (1, 3, 5)))
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/mmaudio_vocoder.py#L154)

**Параметры:**

num_mels (`int`, по умолчанию `128`) : Количество mel-бин входной спектрограммы. Должно совпадать с `mel_bins` соответствующей модели [MMAudioVAE](/docs/diffusers/main/ru/api/models/kandinsky6_vae#diffusers.MMAudioVAE).

upsample_initial_channel (`int`, по умолчанию `1536`) : Ширина первого слоя.

upsample_rates (`tuple[int, ...]`, по умолчанию `(8, 4, 2, 2, 2, 2)`) : Коэффициенты апсемплинга для стадий вокодера. Их произведение является общим коэффициентом апсемплинга и должно совпадать с `hop_length` соответствующей модели [MMAudioVAE](/docs/diffusers/main/ru/api/models/kandinsky6_vae#diffusers.MMAudioVAE).

upsample_kernel_sizes (`tuple[int, ...]`, по умолчанию `(16, 8, 4, 4, 4, 4)`) : Размеры ядер транспонированной свёртки для стадий вокодера.

resblock_kernel_sizes (`tuple[int, ...]`, по умолчанию `(3, 7, 11)`) : Размеры ядер для остаточных блоков.

resblock_dilation_sizes (`tuple[tuple[int, ...], ...]`, по умолчанию `((1, 3, 5), (1, 3, 5), (1, 3, 5))`) : Разреженность (dilation) остаточных блоков.

Вокодер BigVGAN-v2 (https://github.com/NVIDIA/BigVGAN, лицензия MIT) с антиалиасинговыми активациями Snake из https://github.com/junjun3518/alias-free-torch (Apache 2.0), преобразующий мел-спектрограммы, декодированные [MMAudioVAE](/docs/diffusers/main/ru/api/models/kandinsky6_vae#diffusers.MMAudioVAE), в звуковые волны для [Kandinsky6TI2VAPipeline](/docs/diffusers/main/ru/api/pipelines/kandinsky6#diffusers.Kandinsky6TI2VAPipeline).

#### forward[[diffusers.MMAudioVocoder.forward]]

```python
forward(mel: torch.Tensor, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/mmaudio_vocoder.py#L213)

**Параметры:**

mel (`torch.Tensor` формы `(batch_size, num_mels, num_mel_frames)`) : Мел-спектрограмма, декодированная [MMAudioVAE](/docs/diffusers/main/ru/api/models/kandinsky6_vae#diffusers.MMAudioVAE).

return_dict (`bool`, по умолчанию `True`) : следует ли возвращать `~models.autoencoder_kl.DecoderOutput` вместо обычного кортежа.

**Возвращает:**

Волна формы `(batch_size, 1, num_samples)` в диапазоне `[-1, 1]`.

