FLOAT Decode Latents to Images (Ad)
The payoff at the end of the pipeline
- appearance_pipe
- r_d_latents
- float_pipe
- images
- fps
- float_pipe
Every Advanced FLOAT workflow ends here. FLOAT Decode Latents to Images (Ad) takes the appearance (bundled in the appearance_pipe from FLOAT Encode Image to Latents) and the motion sequence (r_d_latents from FLOAT Sample Motion Sequence rd) and renders the actual frames of your talking head. Everything before this was latents and conditioning; this is where pixels appear.
The mechanism is the decoder half of FLOAT's motion autoencoder. For each frame t in the driven motion sequence, it computes s_r + r_d[t] - the reference appearance plus that frame's motion offset - and runs it through the Synthesis/Decoder, which warps the appearance's multi-resolution feature maps (feats) into the new pose and renders the final image. Frame by frame, out come the images. It's the explicit, Advanced-flavored version of what FLOAT Process (Opt) does silently at the end of its one-button run.
The wiring
Inputs:
- appearance_pipe (Ws→r) - from FLOAT Encode Image to Latents. Contains the
s_rappearance latent and the feature maps. If you only have the raw reference image here, you've skipped a step. - r_d_latents - the motion sequence from FLOAT Sample Motion Sequence rd. The number of frames it has determines the number of frames you get out.
- float_pipe - carries the decoder weights.
Outputs:
- images - the rendered frame sequence as one
IMAGEbatch. Straight into a Preview, Save, or VHS-style video-assembly node. - fps - passed through so a video encoder knows the timing (this is why it exists as an output rather than you guessing).
- float_pipe - passthrough.
Notes that save you a headache
The decode is the least glamorous and most memory-hungry step of the Advanced graph, and it's also where RGBA handling matters: if your reference had transparency, the strategy you picked in Float Advanced Options (blend_with_color / discard_alpha / replace_with_color) is applied here, so a weird checkerboard or black fringe in the output traces back to that choice, not to the decoder.
If the output is the right face but frozen, the problem is upstream - the motion sequence was bad or the frame count didn't match the audio; if it's a different-looking face, the appearance pipe didn't come from the same image you think it did. Decode faithfully renders what it's given, which is honestly the best property a final node can have.
Install is the pack's one routine: 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 unified model (~2.4 GiB) download on first run. And the pack-wide reminder: FLOAT is CC BY-NC-SA 4.0, so this stays out of commercial products.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| appearance_pipe | FLOAT_APPEARANCE_PIPE | The bundled appearance information (s_r latent and feature maps) from the FloatEncodeImageToLatents node. (Ws→r) | |
| r_d_latents | TORCH_TENSOR | — | |
| float_pipe | FLOAT_PIPE | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| fps | FLOAT | — |
| float_pipe | FLOAT_PIPE | — |