Diffusers documentation
Kandinsky S2V 1.0
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
| Checkpoint | Transformer | Blocos | Agendador | Etapas | Orientações |
|---|---|---|---|---|---|
| Lite | 2B | KandinskyS2VAutoBlocks | FlowMatchEulerDiscreteScheduler | 50 | 3.0 |
| Pro | 21B | KandinskyS2VAutoBlocks | FlowMatchEulerDiscreteScheduler | 50 | 3.0 |
| Lite destilado | 2B | KandinskyS2VDistilledAutoBlocks | PiflowScheduler | 16 | off |
| Pro destilado | 21B | KandinskyS2VDistilledAutoBlocks | PiflowScheduler | 16 | off |
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 eaudioé 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 mesmonum_latent_framesefpspara cada um. - O número de chunks segue o comprimento da faixa de áudio, a menos que
num_chunksseja 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
< source >( 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
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
< source >( 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
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.