Nodes/ComfyUI-Studio-Fury/🏃 SF Action Animator
ComfyUI Node

🏃 SF Action Animator

Turn a composed still into a latent batch for AnimateDiff-style video — without filling VRAM with N frames

By FuryNocturn·Created 9 months ago·Updated 4 months ago· 0
🏃 SF Action Animator
  • vae
  • composed_image
  • fusion_mask
  • video_latents
frame_count24
motion_freedom1.0

The Action Animator is the pack's bridge from still image to video, and it's honest about being a bridge: it doesn't render a single video frame itself. It takes your composed scene, encodes one frame into latent space, wraps it up with a motion mask and a frame count, and hands the whole thing to a video sampler that knows how to expand it. Think of it as the "prepare for animation" node, not the animation node.

The mechanics are the smart part. Rather than encoding all 24 frames (which would eat VRAM before the sampler even starts), it encodes once, then packs a noise_mask - the fusion mask from Scene Composer, resized to latent resolution and multiplied by motion_freedom - repeated across the frame count, plus a frame_count metadata field. Compatible samplers (AnimateDiff-style ones) read that metadata and do the expansion themselves, keeping the memory footprint at roughly one frame's worth of latent until sampling actually begins. That's a genuinely considered design for video-on-a-budget.

The inputs that matter:

  • vae - needed to encode the composed image into latent space. Wire it from your checkpoint loader.
  • composed_image - the IMAGE from Scene Composer's composed_image output. This is your static master.
  • fusion_mask - the MASK from Scene Composer. It defines where motion is allowed. If you connect a solid full-white mask, everything moves; a character-only silhouette means only the character area gets animated.
  • frame_count - 8 to 120, stepping by 8, default 24. More frames = longer clip, and more for the video sampler to chew.
  • motion_freedom - 0.1 to 1.0. This is the "how much of that mask actually gets to move" dial. Lower values freeze the masked region harder; 1.0 lets the mask define the full motion region.

The output: one video_latents (LATENT) - the base latent plus its noise_mask and frame_count. That feeds a video sampler (e.g., an AnimateDiff-Evolved setup), not a plain KSampler.

Install

Part of StudioFury: ComfyUI Manager → ComfyUI-Studio-Fury → Install → restart, or:

cd ComfyUI/custom_nodes/
git clone https://github.com/FuryNocturn/ComfyUI-Studio-Fury

Dependencies are torch/Pillow/numpy/aiohttp - nothing extra. Note that the pack itself doesn't ship an AnimateDiff or video-sampler; that's a separate install (ComfyUI-AnimateDiff-Evolved if you're on that stack).

Gotchas

Set expectations honestly. The KB's verdict as of mid-2026 is that AnimateDiff - the ecosystem this latent format grew up in - is largely superseded by Wan-family models, and the Action Animator's output format is very AnimateDiff-shaped. If your video sampler doesn't read noise_mask/frame_count metadata, this node's output will be an unexpandable single latent and you'll wonder what went wrong. And motion_freedom is a strength multiplier on the mask, not a magic "how much the character moves" slider - movement still depends entirely on the motion module you feed it downstream. Treat it as the well-built connector it is: it makes the composed image video-ready without doubling your VRAM bill, and it leaves the actual filmmaking to the sampler you already know how to use.

Category🧩 Studio Fury/🎬 Director

Inputs (5)

NameTypeDefaultDescription
vaeVAE
composed_imageIMAGE
fusion_maskMASK
frame_countINT248–120
motion_freedomFLOAT1.00.1–1

Outputs (1)

NameTypeDescription
video_latentsLATENT