Nodes/FLOAT Optimized/Apply FLOAT Synthesis (VA)
ComfyUI Node

Apply FLOAT Synthesis (VA)

Where the talking head finally becomes video

By set-soft·Created about a year ago·Updated about a year ago· 33
Apply FLOAT Synthesis (VA)
  • appearance_pipe
  • float_synthesis
  • r_d_latents
  • images
  • float_synthesis_out

The Very Advanced graph ends here, with pixels. Apply FLOAT Synthesis (VA) takes the appearance bundled by Apply Float Encoder and the motion sequence sampled by Float Sample Motion Sequence RD VA, runs them through the loaded Synthesis/Decoder model, and renders the final animated frames. It's the last node in the pipeline, and its outputs are the whole reason the rest of the graph exists.

The mechanism is the decoder half of FLOAT's motion autoencoder, and it's genuinely elegant once you see it. For each frame t, the motion is s_r + r_d[t] - the person's appearance plus that frame's motion offset. The decoder's ToFlow layers then predict how to warp the appearance's multi-resolution feature maps into the new pose, and it renders the frame. That's the "puppet master" step: it doesn't invent the face from scratch, it warps the person you already have into each new expression. Which is exactly why FLOAT can hold identity so well - the appearance features never leave.

Inputs and outputs

  • appearance_pipe (Ws→r) - the appearance latent (s_r) plus feature maps (feats) from Apply Float Encoder. This is the identity; get it from the wrong image and you get the wrong person.
  • float_synthesis - the loaded Synthesis/Decoder from Load Float Synthesis (decoder.safetensors). The same model instance likely already served Float Get Identity Reference VA earlier in the graph via its passthrough - you can reuse that wire.
  • r_d_latents (Wr→D) - the driven motion sequence from the sampler. The number of frames here is the number of frames you get out.

Outputs: images (the full frame sequence as one IMAGE batch, ready for a Preview/Save/video node) and the float_synthesis passthrough.

Notes that save a rerun

If the output face looks right but the motion is stiff or frozen, the problem is almost always upstream in the sampler (low nfe, muted guidance scales) - the decoder faithfully renders whatever motion it's handed. If it looks like a different person, trace the appearance pipe: it must come from the encoder's output for the image you think you're animating. And because decode runs over every frame, it's a memory hotspot in the VA graph - the pack's own docs note the VA workflow should use less VRAM than the regular one, but long audio still adds up.

Install is the pack standard: ComfyUI Manager search "ComfyUI-FLOAT_Optimized", or cd ComfyUI/custom_nodes && git clone https://github.com/set-soft/ComfyUI-FLOAT_Optimized && pip install -r requirements.txt, restart, and let the decoder weights extract from the unified FLOAT.safetensors (or download decoder.safetensors) on first use. Standing caveats for the whole VA line: the node interfaces "might change," and FLOAT is CC BY-NC-SA 4.0 - non-commercial, so this stays out of paid work.

CategoryFLOAT/Very Advanced

Inputs (3)

NameTypeDefaultDescription
appearance_pipeFLOAT_APPEARANCE_PIPEThe bundled appearance information (s_r latent and feature maps) from the ApplyFloatEncoder node. (Ws→r)
float_synthesisFLOAT_SYNTHESIS_MODELThe loaded FLOAT Synthesis (Decoder) model module.
r_d_latentsTORCH_TENSORThe driven motion latent sequence generated by the FMT sampler. (Wr→D)

Outputs (2)

NameTypeDescription
imagesIMAGE
float_synthesis_outFLOAT_SYNTHESIS_MODEL