ToonCrafter
Two anime frames in, sixteen back — ToonCrafter does the in-betweening
- image
- image2
- IMAGE
The whole trick fits in one sentence: give this node the first and last frames of a cartoon shot, and a diffusion model invents the motion between them. It's the ComfyUI port of ToonCrafter, the generative cartoon interpolation model released in May 2024, and it's basically the tweening tool the animation subreddits spent a week losing their minds over.
This isn't text-to-video. You're not generating a clip from nothing; you're filling in a shot that already has its keyframes drawn. If you've read the AnimateDiff history, the shape is familiar - a temporal diffusion model with the same 16-frame wall - but ToonCrafter is built for 2D/cartoon material and anchors on two real frames instead of animating one still. That's its niche: keyframe in-betweening, storyboard cleanup, "these two drawings need to become a moving shot."
The honest take, before you get invested: it's a 2024 model and the field moved on. Wan 2.2 and the first/last-frame interpolation crowd took the general video case, and the ComfyUI community's preferred route was always Kijai's DynamiCrafterWrapper, which also runs ToonCrafter - the top comment on the node's own release thread says exactly that. But this node is the dead-simple version: two images in, frames out, no wrapper assembly. If your job is "animate this specific pair of drawings," this is the fastest way to it. And unlike anything with "API" in the name, it's fully local, no key, and the README claims it works completely offline.
How it works
ToonCrafter is a latent video diffusion model - same LVDM lineage as DynamiCrafter. It encodes both keyframes with a dual-reference VAE, feeds your text prompt in as cross-attention, locks the first and last latent frames as anchors, and DDIM-samples the sixteen frames between them (v-prediction, 50 steps by default). Output is fixed at 512×320, and your inputs get resized and center-cropped to fit, so don't fight it - crop to roughly 512-wide content before it hits the node.
The inputs that actually matter
- image / image2 - the start and end keyframes. The whole job lives here.
- frame_count (default 10) - the frame stride: how many frames apart your two keyframes are in the source animation. It tells the model how aggressive the interpolation should be.
- steps (default 50) - you can usually drop this toward 20–30 for a first pass. Quality holds, and it's much faster.
- vram_opt_strategy - set to
lowif you OOM; it forces half precision.
Everything else - prompt, seed, eta, cfg_scale, fps - is the usual sampler furniture. The output is one IMAGE (a 16-frame batch). There's no built-in video save on the node, so wire the frames into VideoHelperSuite's VideoCombine to get an mp4.
Installing it for real
ComfyUI Manager: search "ComfyUI-ToonCrafter" and hit install. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/AIGODLIKE/ComfyUI-ToonCrafter
cd ComfyUI-ToonCrafter
# Windows portable:
..\..\..\python_embeded\python.exe -m pip install -r requirements.txt
Then the model. Weights go in ComfyUI-ToonCrafter/ToonCrafter/checkpoints/tooncrafter_512_interp_v1/ - either the full model.ckpt from the Doubiiu/ToonCrafter HF repo, or Kijai's fp16 tooncrafter_512_interp-fp16.safetensors. The ckpt_name dropdown auto-populates from that folder, and the README recommends fp16. Grab the fp16 one unless you have VRAM to burn.
Where people get burned
- xformers. The attention code is written for it, and a naive
pip install xformerscan drag in a fresh torch build - often without CUDA. Kijai's own advice in the release thread:pip install xformers --no-deps. - VRAM. ToonCrafter's dual-reference encoder is memory-hungry. The README's showcase numbers are an RTX 4090 at ~26 seconds. On smaller cards, go
vram_opt_strategy=low, cut steps, keep inputs near 512. - Torch errors after install. The author warns it's "not in native mode" and says installing via the command line is recommended - if Manager's in-UI install throws torch errors, reinstall the requirements from a terminal.
- "Offline" needs one file. For the no-network promise to hold, put an
open_clip_pytorch_model.binin the pack'smodels/folder; the code checks for it, otherwise the OpenCLIP text encoder tries to download on first run.
A niche tool from a 2024 hype cycle that still does one thing well, entirely on your machine. Two drawings in, a moving shot out. If that's your job, this is still the simplest way to get it.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| image2 | IMAGE | — | |
| ckpt_name | COMBO | 0 options: | |
| vram_opt_strategy | COMBO | 2 options: none, low | |
| prompt | STRING | — | |
| seed | INT | 1230–18446744073709550000 | — |
| eta | FLOAT | 1.00–15 | — |
| cfg_scale | FLOAT | 7.51–15 | — |
| steps | INT | 501–60 | — |
| frame_count | INT | 105–30 | — |
| fps | INT | 81–60 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |