Diffusers documentation

Kandinsky S2V 1.0

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Kandinsky S2V 1.0

Kandinsky S2V 1.0 gera um vídeo de avatar a partir de um quadro de referência e uma trilha de fala. A pessoa no quadro é animada para corresponder à fala — a figura inteira, não apenas a cabeça. A fala é uma condição, não uma saída: o modelo não gera áudio, e a trilha sonora do resultado é a trilha que você fornece.

As duas condições passam pelo Qwen2.5-Omni-7B: seus estados ocultos codificam o prompt e sua torre de áudio codifica a fala, que entra no transformer por meio de adaptadores de atenção cruzada alinhados quadro a quadro, de modo que cada quadro latente atenda apenas à fala que ele cobre. Um clipe é gerado em blocos de 5 s (125 quadros a 25 fps), cada um carregando a memória FramePack dos anteriores, para que faixas mais longas permaneçam consistentes entre as fronteiras dos blocos.

Kandinsky S2V 1.0 é integrado apenas como um pipeline modular; não há uma classe padrão DiffusionPipeline para ele.

Checkpoints

CheckpointTransformerBlocosAgendadorEtapasOrientações
Lite2BKandinskyS2VAutoBlocksFlowMatchEulerDiscreteScheduler503.0
Pro21BKandinskyS2VAutoBlocksFlowMatchEulerDiscreteScheduler503.0
Lite destilado2BKandinskyS2VDistilledAutoBlocksPiflowScheduler16off
Pro destilado21BKandinskyS2VDistilledAutoBlocksPiflowScheduler16off

Os checkpoints destilados configuram o PiflowScheduler com shift=10.0 e n_grid=5, e não com os valores padrão.

ModularPipeline.from_pretrained seleciona os blocos do checkpoint. Os passos padrão são os valores acima. A orientação sem classificador é o componente guider, não um argumento de chamada: os checkpoints base o incluem em 3.0. Os destilados não têm guider nem negative_prompt, porque a orientação já faz parte do aluno.

Uso

import librosa
import torch
from diffusers import ModularPipeline
from diffusers.utils import encode_video, load_image

pipe = ModularPipeline.from_pretrained("kandinskylab/Kandinsky-S2V-1.0-Lite-distill-Diffusers")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")

image = load_image("reference.png")
audio, _ = librosa.load("speech.wav", sr=16000)  # a mono waveform at 16 kHz, for the model
speech, sample_rate = librosa.load("speech.wav", sr=None)  # the original track, added to the output video

video = pipe(image=image, audio=audio, output="videos")[0]
encode_video(
    video,
    fps=25,
    output_path="avatar.mp4",
    audio=torch.from_numpy(speech)[None],
    audio_sample_rate=sample_rate,
)

Os checkpoints Pro não cabem em uma GPU de 80 GB ao lado do codificador de fala e texto de 7B quando todos os componentes estão no dispositivo. Faça o offload deles por meio de um ComponentsManager:

import librosa
import torch
from diffusers import ComponentsManager, ModularPipeline
from diffusers.utils import encode_video, load_image

manager = ComponentsManager()
pipe = ModularPipeline.from_pretrained("kandinskylab/Kandinsky-S2V-1.0-Pro-Diffusers", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)
manager.enable_auto_cpu_offload(device="cuda", memory_reserve_margin="40GiB")

image = load_image("reference.png")
audio, _ = librosa.load("speech.wav", sr=16000)
speech, sample_rate = librosa.load("speech.wav", sr=None)

video = pipe(image=image, audio=audio, output="videos")[0]
encode_video(
    video,
    fps=25,
    output_path="avatar.mp4",
    audio=torch.from_numpy(speech)[None],
    audio_sample_rate=sample_rate,
)

A margem é a memória mantida livre além dos pesos quando um modelo é movido para a GPU. Ela precisa acomodar o decodificação VAE de um bloco, cerca de 33 GiB em 512x768: com o padrão de 3 GB o transformer permanece na GPU durante a decodificação, que então esgota a memória. Com 40 GiB, o pico é de cerca de 50 GiB em uma GPU de 80 GB. Ative o offload após load_components, para que ele se aplique a todos os componentes.

Observações

  • image é uma imagem PIL e audio é uma forma de onda mono em ponto flutuante em [-1, 1] a 16 kHz, como um tensor ou um array com a forma (samples,); o pipeline não lê arquivos.
  • Os blocos de nível superior (text_encoder, vae_encoder, denoise, decode) também são executados de forma independente; ao executá-los separadamente, passe o mesmo num_latent_frames e fps para cada um.
  • O número de chunks segue o comprimento da faixa de áudio, a menos que num_chunks seja passado. O vídeo é aparado para a faixa em qualquer caso, portanto, chunks além do seu final são calculados e descartados, com um aviso.
  • Com o guidance, a passagem incondicional substitui o prompt negativo e silencia a fala, de modo que o guidance é conjunto sobre texto e fala.

KandinskyS2VModularPipeline

classe diffusers.KandinskyS2VModularPipeline

< >

( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )

Uma ModularPipeline para geração de vídeo a partir de fala do Kandinsky S2V 1.0.

KandinskyS2VAutoBlocks

classe diffusers.KandinskyS2VAutoBlocks

< >

( )

Pipeline modular para geração de fala para vídeo com Kandinsky S2V 1.0: um vídeo de avatar a partir de um quadro de referência e uma trilha de fala, gerado em blocos.

Componentes: text_encoder (Qwen2_5OmniThinkerForConditionalGeneration) tokenizer (Qwen2_5OmniProcessor) text_encoder_2 (CLIPTextModel) tokenizer_2 (CLIPTokenizer) vae (AutoencoderKLHunyuanVideo) video_processor (VideoProcessor) transformer (KandinskyS2VTransformer3DModel) scheduler (FlowMatchEulerDiscreteScheduler) guider (ClassifierFreeGuidance)

Entradas: prompt (str, opcional, padrão é The video presents a stable medium close-up of a subject facing the camera directly. The subject exhibits natural, lifelike body dynamics: the head and shoulders move fluidly with the rhythm of speech. The lighting is even, maintaining a balanced natural exposure to clearly define facial features without washout. Throughout the sequence, the subject engages in continuous speech marked by precise, high-fidelity articulation. The lips move in a rhythmic, natural pattern: alternating between brief firm closures and relaxed openings. During these openings, the tips of the upper teeth are momentarily and realistically visible, exhibiting natural enamel texture. The upper lip lifts subtly over the teeth during enunciation, while the jaw performs minimal vertical oscillations synchronized with the speech cadence. Facial micro-expressions are active yet restrained; eyebrows rise and lower slightly with minute asymmetry. The eyes maintain a steady, engaged gaze forward, punctuated by smooth, deliberate blinks. ): O prompt para orientar a geração. negative_prompt (str, opcional): O prompt para a passagem incondicional da orientação. O padrão é DEFAULT_NEGATIVE_PROMPT quando a orientação precisa de um. audio (Tensor | ndarray): A trilha de fala que dirige a geração: uma forma de onda mono float em [-1, 1] a 16000 Hz, com formato (samples,). num_latent_frames (int, opcional, padrão é 32): Quadros latentes por bloco; 32 resulta em 125 quadros (5 s a 25 fps). fps (int, opcional, padrão é 25): A taxa de quadros na qual o comprimento do bloco é calculado. num_chunks (int, opcional): Número de blocos a serem gerados. O padrão é o número necessário para cobrir a trilha de fala; o vídeo é recortado para a trilha de qualquer forma. image (Image): O quadro de referência a ser animado. height (int, opcional): A altura em pixels do vídeo gerado. O padrão é o bucket de 512 mais próximo do quadro de referência. width (int, opcional): A largura em pixels do vídeo gerado, escolhida junto com height. generator (Generator, opcional): Gerador do Torch para geração determinística. num_inference_steps (int, opcional, padrão é 50): O número de etapas de remoção de ruído. scale_factor (tuple, opcional, padrão é (1.0, 2.0, 2.0)): Escala RoPE por eixo para o bucket de resolução. output_type (str, opcional, padrão é pil): Formato de saída: ‘pil’, ‘np’, ‘pt’.

Saídas: vídeos (list): Os vídeos gerados.

KandinskyS2VDistilledModularPipeline

classe diffusers.KandinskyS2VDistilledModularPipeline

< >

( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )

Uma ModularPipeline para os checkpoints destilados do pi-Flow do Kandinsky S2V 1.0.

O Guidance é destilado no aluno, portanto seus blocos não possuem um guider nem um prompt negativo, e uma única passagem de frente é executada por segmento.

KandinskyS2VDistilledAutoBlocks

classe diffusers.KandinskyS2VDistilledAutoBlocks

< >

( )

Pipeline modular para geração de fala em vídeo com os checkpoints destilados do pi-Flow Kandinsky S2V 1.0: 16 segmentos por bloco e sem orientação, o que é destilado no aluno.

Componentes: text_encoder (Qwen2_5OmniThinkerForConditionalGeneration) tokenizer (Qwen2_5OmniProcessor) text_encoder_2 (CLIPTextModel) tokenizer_2 (CLIPTokenizer) vae (AutoencoderKLHunyuanVideo) video_processor (VideoProcessor) transformer (KandinskyS2VTransformer3DModel) scheduler (PiflowScheduler)

Entradas: prompt (str, opcional, padrão é The video presents a stable medium close-up of a subject facing the camera directly. The subject exhibits natural, lifelike body dynamics: the head and shoulders move fluidly with the rhythm of speech. The lighting is even, maintaining a balanced natural exposure to clearly define facial features without washout. Throughout the sequence, the subject engages in continuous speech marked by precise, high-fidelity articulation. The lips move in a rhythmic, natural pattern: alternating between brief firm closures and relaxed openings. During these openings, the tips of the upper teeth are momentarily and realistically visible, exhibiting natural enamel texture. The upper lip lifts subtly over the teeth during enunciation, while the jaw performs minimal vertical oscillations synchronized with the speech cadence. Facial micro-expressions are active yet restrained; eyebrows rise and lower slightly with minute asymmetry. The eyes maintain a steady, engaged gaze forward, punctuated by smooth, deliberate blinks. ): O prompt para orientar a geração. audio (Tensor | ndarray): A trilha de fala que dirige a geração: uma forma de onda mono float em [-1, 1] a 16000 Hz, com formato (samples,). num_latent_frames (int, opcional, padrão é 32): Quadros latentes por bloco; 32 resulta em 125 quadros (5 s a 25 fps). fps (int, opcional, padrão é 25): A taxa de quadros na qual o comprimento do bloco é calculado. num_chunks (int, opcional): Número de blocos a serem gerados. O padrão é o número necessário para cobrir a trilha de fala; o vídeo é recortado para a trilha de qualquer forma. image (Image): O quadro de referência a ser animado. height (int, opcional): A altura em pixels do vídeo gerado. O padrão é o bucket de 512 mais próximo do quadro de referência. width (int, opcional): A largura em pixels do vídeo gerado, escolhida junto com height. generator (Generator, opcional): Gerador do Torch para geração determinística. num_inference_steps (int, opcional, padrão é 16): O número de etapas de remoção de ruído. scale_factor (tuple, opcional, padrão é (1.0, 2.0, 2.0)): Fator de escala RoPE por eixo para o bucket de resolução. output_type (str, opcional, padrão é pil): Formato de saída: ‘pil’, ‘np’, ‘pt’.

Saídas: vídeos (list): Os vídeos gerados.

Update on GitHub