Nodes/ComfyUI_AIMZ/AIMZ Cel Animation Rate (2-Koma / Frame Hold)
ComfyUI Node

AIMZ Cel Animation Rate (2-Koma / Frame Hold)

Turning 24fps AI Video Into Real Cel Animation

By AIMZ-GFX·Created 13 days ago·Updated a day ago· 3
AIMZ Cel Animation Rate (2-Koma / Frame Hold)
  • images
  • audio
  • images
  • audio
  • effective_fps
  • step_size
  • frame_count
cadence12 fps (On Twos / 2-Koma @ 24fps)
modeKeep Duration (Audio Sync / Hold Frames)
custom_step2
target_fps12.0
offset0
source_fps

Real anime doesn't actually run at 24fps the way you'd think. Nearly everything hand-drawn is animated "on twos": one new drawing every two frames, each frame held. That's what gives cel animation its signature snap and slightly uneven rhythm. If you've been generating video at 24fps and wondering why it comes out smooth and generic instead of looking like anime, this is the node that fixes it.

AIMZ Cel Animation Rate (the pack calls it "2-Koma / Frame Hold") takes your frame sequence, holds frames on a chosen cadence, and hands you a video that steps like real animation instead of gliding. It's part of ComfyUI_AIMZ, a small utility pack by AIMZ / CEC Tools aimed squarely at V2V and R2V pipelines - the same pack that gives you the Video Duration Selector and Freeze Frame Pad, both of which it pairs with nicely.

What it actually does

Under the hood it's a single tensor-indexing step. You feed in your frames, it picks a "step" (how many frames each drawing gets held for), and rebuilds the batch on GPU. The mechanism is honest - no model, no weights, nothing to download. Just two modes, and this is the whole game:

  • Keep Duration (Audio Sync / Hold Frames) - the default. Keeps the exact same number of frames, where every group of step frames collapses to one held frame. Total duration is unchanged, so attached audio stays 100% in sync.
  • Drop Frames (Decimate Batch / Reduce Frames) - keeps one frame per step, so your batch shrinks to roughly B/step. Same visual cadence, but far fewer frames to carry downstream.

The inputs that matter

  • cadence - the dropdown that does the real work: "12 fps (On Twos / 2-Koma @ 24fps)" holds every 2nd frame, "8 fps (On Threes / 3-Koma)" every 3rd, "6 fps (On Fours / 4-Koma)" every 4th, plus Custom Step and Target FPS Match for anything unusual.
  • offset - which frame inside each chunk gets kept (0 = first frame of the chunk). In practice you leave this at 0.
  • source_fps - this one burns people. The presets assume your input is 24fps; if your source is something else and you pick "Target FPS Match", feed the real value here (e.g. from a Get_FPS node) or the math quietly lies to you.
  • audio - optional passthrough, None-safe, so you can route sound through the same node without a separate branch.

Outputs

You get five outputs: images (the held-frame batch), audio (passthrough), and the three that matter for encoding - effective_fps (your real animation rate, e.g. 12.0), step_size, and frame_count.

Here's the wiring insight: with Keep Duration, encode at your source fps and the clip plays back as genuine on-twos animation with audio glued tight. With Drop Frames, encode at the lower effective_fps to keep the same duration at half the file size. The trap is mixing the two up - drop frames but keep the original encode fps and your video comes out half as long with audio floating free.

Install

It's a light pack - the only dependencies are torch, numpy, and pillow, and there are no model files to hunt down. Install it the usual way:

cd ComfyUI/custom_nodes
git clone https://github.com/AIMZ-GFX/ComfyUI_AIMZ.git

Or via ComfyUI Manager: search comfyui_aimz → Install → restart. You'll find the node under the AIMZ/Video category, and it's even None-safe - feed it an empty branch and it passes through cleanly instead of throwing a TypeError.

One honest caveat: frame hold fixes pacing, not content. It can't hide a video model that drifts or jitters between frames - use it after your V2V pass, before VideoCombine, and expect the classic anime feel, not a miracle.

CategoryAIMZ/Video

Inputs (8)

NameTypeDefaultDescription
imagesIMAGEInput video frame sequence (Tensor [B, H, W, C])
cadenceCOMBO12 fps (On Twos / 2-Koma @ 24fps)Animation cadence / frame hold interval
modeCOMBOKeep Duration (Audio Sync / Hold Frames)Keep Duration duplicates frames to maintain exact video duration and 100% audio sync. Drop Frames reduces batch size.
custom_stepINT21–120Step interval when 'Custom Step' cadence is selected
target_fpsFLOAT12.01–120Desired visual framerate when 'Target FPS Match' is selected
offsetINT00–60Sample offset inside each step window (0 = first frame of chunk)
audiooptAUDIOOptional audio passthrough for convenient single-node wiring (None-safe)
source_fpsoptFLOATSource FPS if using Target FPS Match (Default: 24.0)

Outputs (5)

NameTypeDescription
imagesIMAGE
audioAUDIO
effective_fpsFLOAT
step_sizeINT
frame_countINT