DEV Community

AI-KSK
AI-KSK

Posted on

EverAnimate: Making WanAnimate Survive Past Twenty Seconds

WanAnimate drifts: past roughly twenty seconds the face floats, clothes change and the background flickers. EverAnimate's answer is not to stitch clips but to carry identity and motion state in latent space from segment to segment, in three stages: continuation memory, cross-segment drift repair, and high definition. The graph is built around that loop, with 81 frames for the first segment and 76 new frames per continuation.

Evidence note: two workflow JSONs ship with this episode; the Wan2.2 Animate checkpoint, the pose/ONNX loaders, the nine LoRAs and the sampler values below are read from them. Behaviour claims are the author's, as reported in the video.

When to use it

  • You are animating a character over 20+ seconds and identity is falling apart.
  • You want one graph covering both global reference (image drives the character) and reference editing (mask drives the edit).
  • You can spare the VRAM for a 14B fp8 model plus nine LoRAs.

What is different in this workflow

  • Latent memory, not video stitching: the previous segment's identity and motion state are written into the latent before the next segment generates.
  • Three stages as LoRAs: stage 1 adds long-video continuation memory to WanAnimate, stage 2 repairs cross-segment drift, stage 3 is the HD pass (stage1_480p, stage2_480p, stage3_720p_beta).
  • One boolean switches the task: True = reference editing, False = global reference.
  • Automatic loop count: a math expression derives the count from the frame budget, so you do not type it.
  • Pose backend is switchable: index 0 is ViTPose (fastest, the official baseline), 2 is SDPose (more precise, complex scenes), with body-ratio alignment in between.

Step by step

  1. Set the boolean for the task: False for global reference, True for reference editing.
  2. Set 1280x720 and fps 25; the author says 30 fps is also reasonable for WanAnimate.
  3. Set the frame read limit and how many opening frames to skip, if any.
  4. Let the expression compute the loop count; the first pass produces 81 frames and each loop adds 76, because 5 frames overlap.
  5. Global reference: load the character image and run.
  6. Reference editing: also build a mask. If auto-cropping is inaccurate, pull a frame from the video, paint the subject, and let SAM2 cut it.
  7. Prompt with WD14 tags for a quick reverse-caption.
  8. Pick the pose preprocessor by index: 0 ViTPose, 2 SDPose with body-ratio alignment.
  9. If VRAM runs out, raise the chunked memory-saving value.

Parameter basis

  • Models: UNETLoader -> Wan2_2_Animate_14B_fp8_scaled_e4m3fn_KJ_v2_20260511.safetensors; CLIPLoader -> umt5_xxl_fp8_e4m3fn_scaled.safetensors (type wan); VAELoader -> wan_2.1_vae.safetensors; CheckpointLoaderSimple -> sdpose_wholebody_fp16.safetensors for the pose path.
  • LoRAs (nine): SESELAORUYAO.safetensors 0.3, Wan2.2-Lightning_I2V-A14B-4steps-lora_LOW_fp16.safetensors 1.0, WanAnimate_relight_lora_fp16 1.0, FastWan_T2V_14B_480p_lora_rank_128_bf16 1.0, Wan21_PusaV1_LoRA_14B_rank512_bf16 1.0, Wan2.2-Fun-A14B-InP-low-noise-HPS2.1 1.0, stage1_480p 1.0, stage2_480p 1.0, stage3_720p_beta 1.0.
  • Sampler: two KSampler at 4 steps, CFG 1, lcm, normal, fixed seed 42.
  • Model sampling: ModelSamplingSD3 shift 5; ModelPatchTorchSettings, PathchSageAttentionKJ and chunked memory saving alongside.
  • Node counts: generation 66, editing 79.

Limits

  • The author allows that small faces can look blurry because they occupy few pixels - that is framing, not the model failing.
  • The official position is that EverAnimate does not fully support reference editing; the author made it work but calls it his adaptation, not the recommended path.
  • Three stages mean three LoRA sets on a 14B model; VRAM management is part of the workflow.
  • 81 + 76 per loop is a fixed budget; longer videos are many loops and much queue time.
  • Mask quality drives reference editing: SAM2 on a hand-painted frame beats automatic cropping.

Episode resources

Top comments (0)