benjamin-paine/vidxtend

benjamin-paine
Texto a video

VidXTend es una canalización Diffusers aislada para la etapa 2 de StreamingT2V. Está diseñada para extender animaciones de 16 fotogramas a 256 x 256 píxeles añadiendo 8 fotogramas por iteración, equivalente a un segundo a 8 fps.

Como usar

Instalación del paquete VidXTend:

pip install git+https://github.com/painebenjamin/vidxtend.git

Uso con Diffusers:

pip install -U diffusers transformers accelerate

import torch
from diffusers import DiffusionPipeline

# switch to "mps" for apple devices
pipe = DiffusionPipeline.from_pretrained("benjamin-paine/vidxtend", dtype=torch.bfloat16, device_map="cuda")

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(prompt).images[0]

Uso por línea de comandos:

vidxtend [OPTIONS] VIDEO PROMPT

La herramienta vidxtend ejecuta VidXTend sobre un archivo de video y concatena los fotogramas generados al final. Entre las opciones principales están --frame-rate, --seconds, --negative-prompt, --guidance-scale, --num-inference-steps, --seed, --model, --gpu-id, --output, --fit y --anchor.

Creación de la canalización en Python desde el repositorio:

from vidxtend import VidXTendPipeline

pipeline = VidXTendPipeline.from_pretrained(
    "benjamin-paine/vidxtend",
    torch_dtype=torch.float16,
    variant="fp16",
)

O desde un único archivo:

from vidxtend import VidXTendPipeline

pipeline = VidXTendPipeline.from_single_file(
    "benjamin-paine/vidxtend",
    torch_dtype=torch.float16,
    variant="fp16",
)

Métodos recomendados para mejorar rendimiento y uso de memoria:

pipeline.enable_model_cpu_offload()
pipeline.enable_vae_slicing()
pipeline.set_use_memory_efficient_attention_xformers()

Ejemplo de inferencia para añadir nuevos fotogramas usando los últimos 8 fotogramas del video como guía:

# Assume images is a list of PIL Images
new_frames = pipeline(
    prompt=prompt,
    negative_prompt=None,  # Optionally use negative prompt
    image=images[-8:],  # Use final 8 frames of video
    input_frames_conditioning=images[:1],  # Use first frame of video
    eta=1.0,
    guidance_scale=7.5,
    output_type="pil"
).frames[8:]  # Remove the first 8 frames from the output as they were used as guide for final 8

Funcionalidades

Extensión de video generativo a partir de texto para añadir continuidad temporal a clips existentes.
Basado en la etapa 2 de StreamingT2V, enfocada en generación de video larga, consistente y extensible.
Soporta pesos en formato Safetensors y uso mediante Diffusers o el paquete VidXTend.
Incluye utilidad de línea de comandos para extender un archivo de video y concatenar los nuevos fotogramas al final.
Permite ajustar prompt negativo, guidance scale, pasos de inferencia, semilla, FPS, duración añadida y salida MP4.
Ofrece optimizaciones de memoria como CPU offload, VAE slicing y atención eficiente con xFormers.

Casos de uso

Extender clips animados cortos generados por IA manteniendo coherencia visual entre fotogramas.
Añadir aproximadamente un segundo de video a 8 fps por pasada a una animación de 16 fotogramas.
Experimentar con generación de video larga basada en texto usando la arquitectura StreamingT2V.
Crear flujos locales de extensión de video desde Python o desde una interfaz de línea de comandos.