Nodes/AnimoFlow/FBX → Preview3D (AnimoFlow)
ComfyUI Node

FBX → Preview3D (AnimoFlow)

Getting your animation to play in the ComfyUI viewport

By AnimoFlow·Created 2 months ago·Updated about a month ago· 1
FBX → Preview3D (AnimoFlow)
    • model_file
    fbx_filename
    output_dir/tmp/animoflow-output

    Every curated workflow in this pack ends the same way: a "Preview 3D & Animation" viewport where you can play and scrub your generated motion right on the canvas. AnimoFlow_FBXToPreview3D is the node that feeds that viewport. Its job looks trivial - "take this file and let the viewport load it" - but it's doing real work under the hood to make playback fast and cache-proof.

    The built-in Preview3D node fetches files through ComfyUI's /api/view?type=output&filename=X endpoint, which means the file has to live in ComfyUI's output directory. This node copies the file there - and, here's the subtle part, renames it with a content-hash suffix so the URL changes on every new generation. That busts both ComfyUI's node cache (via IS_CHANGED) and the browser's HTTP cache, so a re-run actually shows the new animation instead of the stale one. It's the kind of plumbing detail that looks invisible until it's missing, and then it's a "why is my preview showing the old take" mystery.

    The one wiring rule that matters

    The README and the node source are both explicit: wire it from the GLB, not the rig FBX. The intended chain is:

    AnimoFlow_GLBExport (glb_filename) → AnimoFlow_FBXToPreview3D (model_file) → Preview 3D & Animation
    

    The GLB is the correct artifact to preview - snap-to-ground, brand tint, and trajectory restore are baked into it, and the raw rig FBX has none of that - and it's also the fast one: three.js parses GLB natively, while FBXLoader has to convert the whole scene graph in JavaScript and can stall the tab for many seconds on a Mixamo FBX. The input keeps its historical name fbx_filename for workflow compatibility, which is a little confusing when you're feeding it a GLB path, but that's deliberate - older workflows didn't break when the node's job evolved.

    The fields

    • fbx_filename - the path from AnimoFlow_GLBExport (yes, the GLB path, despite the name). It's a STRING with forceInput, so you can wire it from another node's output.
    • output_dir - where the source file lives, default /tmp/animoflow-output. The node reads from there and copies into ComfyUI's output folder with the hash suffix.

    Output is a single model_file STRING that plugs into the Preview3D viewport node.

    Using it

    It's a native node - no model, no containers, no Blender - so it's one of the few in the pack you can use to debug a workflow while the Docker backend is down, as long as a GLB already exists. Install is the standard nodes step (ComfyUI Manager, search "AnimoFlow", or git clone https://github.com/AnimoFlow/comfyui-animoflow.git into custom_nodes/); it uses ComfyUI's own folder_paths helper, so it's purely built-in dependent.

    The only real gotcha is the naming trap: if you wire the rig FBX here because the input says fbx_filename, you'll get a preview that plays, but it's the unpolished motion - floating off the ground, no trajectory restore - and it may stutter in the browser on load. Feed it the GLB and both problems disappear. When you're deciding between preview paths, the stack is: AnimoFlow_PreviewMotion for raw-NPZ sanity checks, AnimoFlow_PreviewFBX for a quick rigged render, and this node for the real, polished, playable viewport.

    CategoryAnimoFlow/Motion

    Inputs (2)

    NameTypeDefaultDescription
    fbx_filenameSTRING
    output_dirSTRING/tmp/animoflow-output

    Outputs (1)

    NameTypeDescription
    model_fileSTRING