Nodes/ComfyUI_ChronoEdit_SM/ChronoEdit_SM_Vae
ComfyUI Node

ChronoEdit_SM_Vae

Decode the edit, and when to switch on the tiny VAE

By smthemex·Created 10 months ago·Updated 10 months ago· 4
ChronoEdit_SM_Vae
  • latent
  • vae
  • image
vae_decoder
tiledfalse
enable_temporal_reasoningfalse

Every ChronoEdit workflow ends the same way: a batch of latent frames comes out of the sampler and needs to become pixels you can actually look at. That's this node's entire job, and it's a little more interesting than the usual decode because of how it handles the temporal-reasoning frames and which decoders it lets you drop in.

The inputs

  • latent - the LATENT from ChronoEdit_SM_KSampler. Wire it straight across.
  • vae - the VAE socket. Use the same Wan 2.1 VAE you encoded with; mixing a different VAE in here is a recipe for color-shifted garbage.
  • vae_decoder - a combo of files in ComfyUI/models/vae, defaulting to none. This is the interesting one. If the filename contains light or tae, the node swaps in a lightweight Wan VAE decoder (lightvae, tae, or tiny variants) instead of the full VAE. Those tiny decoders are a legitimately great trick for low-VRAM cards: they cost a fraction of the memory and decode faster, at some quality cost. On a 12GB card running 720p edits, lightvae might be the difference between finishing and OOM.
  • tiled - off by default. Turn it on when the decode tiles the latent so it never has to hold the whole thing at once. Same spirit as the light decoder: it's the low-VRAM escape hatch.
  • enable_temporal_reasoning - off by default. Flip it on when you ran the sampler in 29-frame temporal reasoning mode. The node then decodes the reasoning sequence and the first/last edit frames separately and stitches them back together, which is how ChronoEdit's "reason, then commit" output is supposed to be assembled.

How the decode actually works

For the diffusers AutoencoderKLWan path, any latent with more than two frames gets decoded twice - the full sequence minus the last frame, plus the first and last frames - and the results are stitched so the edited frame lands at the end of the clip. That's not a bug or a weird optimization; it's the temporal-reasoning decode NVIDIA designed. If you keep enable_temporal_reasoning off while feeding it 29 frames, you may get a less faithful result than the stitch was meant to produce.

The output is an IMAGE - a batch of frames, T H W C, which is the shape everything downstream expects.

Where it goes from here

Grab a Save Image/Save Video node, or a video-helper node from another pack, and pipe the frames to disk. And here's the payoff people actually run this for: the last frame of the batch is the edited image. ChronoEdit doesn't return your edit on frame one; it returns it at the end of the sequence. Pull that last frame and you have the "replace the teacup with a bathing mouse" result without any of the in-between motion.

Install is the pack's shared routine - ComfyUI Manager, search ComfyUI_ChronoEdit_SM, or clone into custom_nodes and pip install -r requirements.txt. The node itself adds nothing to download; the light/tiny decoders are the same files you'd find in the Wan ecosystem's VAE collection, dropped in models/vae.

CategoryChronoEdit_SM

Inputs (5)

NameTypeDefaultDescription
latentLATENT
vaeVAE
vae_decoderCOMBO1 options: none
tiledBOOLEANfalse
enable_temporal_reasoningBOOLEANfalse

Outputs (1)

NameTypeDescription
imageIMAGE