BestWishYsh/ConsisID-preview

BestWishYsh
Texto a video

ConsisID-preview es un modelo de texto a video enfocado en generar videos que preservan la identidad de una persona a partir de una imagen facial de referencia y un prompt descriptivo. Está basado en CogVideoX-5B y aplica descomposición de frecuencias para mantener rasgos faciales consistentes durante la generación. Fue presentado como trabajo destacado en CVPR 2025 bajo el título "Identity-Preserving Text-to-Video Generation by Frequency Decomposition".

Como usar

Instalación básica con Diffusers:

pip install -U diffusers transformers accelerate

Ejemplo simple:

import torch
from diffusers import DiffusionPipeline

# switch to "mps" for apple devices
pipe = DiffusionPipeline.from_pretrained(
    "BestWishYsh/ConsisID-preview",
    dtype=torch.bfloat16,
    device_map="cuda"
)

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

Uso recomendado con ConsisIDPipeline:

pip install --upgrade consisid_eva_clip pyfacer insightface facexlib transformers accelerate imageio-ffmpeg
pip install git+https://github.com/huggingface/diffusers.git
import torch
from diffusers import ConsisIDPipeline
from diffusers.pipelines.consisid.consisid_utils import prepare_face_models, process_face_embeddings_infer
from diffusers.utils import export_to_video
from huggingface_hub import snapshot_download

snapshot_download(repo_id="BestWishYsh/ConsisID-preview", local_dir="BestWishYsh/ConsisID-preview")

face_helper_1, face_helper_2, face_clip_model, face_main_model, eva_transform_mean, eva_transform_std = (
    prepare_face_models("BestWishYsh/ConsisID-preview", device="cuda", dtype=torch.bfloat16)
)

pipe = ConsisIDPipeline.from_pretrained("BestWishYsh/ConsisID-preview", torch_dtype=torch.bfloat16)
pipe.to("cuda")

prompt = "The video captures a boy walking along a city street, filmed in black and white on a classic 35mm camera."
image = "https://github.com/PKU-YuanGroup/ConsisID/blob/main/asserts/example_images/2.png?raw=true"

id_cond, id_vit_hidden, image, face_kps = process_face_embeddings_infer(
    face_helper_1,
    face_clip_model,
    face_helper_2,
    eva_transform_mean,
    eva_transform_std,
    face_main_model,
    "cuda",
    torch.bfloat16,
    image,
    is_align_face=True,
)

video = pipe(
    image=image,
    prompt=prompt,
    num_inference_steps=50,
    guidance_scale=6.0,
    use_dynamic_cfg=False,
    id_vit_hidden=id_vit_hidden,
    id_cond=id_cond,
    kps_cond=face_kps,
    generator=torch.Generator("cuda").manual_seed(42),
)

export_to_video(video.frames[0], "output.mp4", fps=8)

Optimización de memoria GPU:

pipe.enable_model_cpu_offload()
pipe.enable_sequential_cpu_offload()
pipe.vae.enable_slicing()
pipe.vae.enable_tiling()

Estas optimizaciones reducen el consumo de memoria, pero pueden aumentar el tiempo de inferencia y afectar la calidad.

Funcionalidades

Generación de texto a video con preservación de identidad facial.
Integración con Diffusers mediante `ConsisIDPipeline`.
Acepta una imagen de referencia para extraer embeddings faciales y puntos clave.
Optimizado para prompts largos, cinematográficos y bien descritos.
Soporta salida de video, por ejemplo MP4 a 8 FPS.
Incluye utilidades para reducir memoria GPU mediante offload a CPU, slicing y tiling del VAE.
Modelo distribuido con pesos Safetensors y licencia Apache 2.0.
Base model: `zai-org/CogVideoX-5b`.

Casos de uso

Crear videos donde una persona mantenga la misma identidad facial a lo largo de la secuencia.
Generar escenas cinematográficas a partir de una imagen de referencia y un prompt detallado.
Prototipar contenido de texto a video con control de identidad para investigación en visión generativa.
Evaluar técnicas de preservación de identidad en modelos derivados de CogVideoX.
Crear clips cortos de hasta unos segundos con estilo, ambiente y acciones definidos por prompt.