ComfyUI Node

Mixamo Pose Export

One FBX clip in, 240 reusable pose guides out

By Spit8·Created 3 months ago·Updated 13 days ago· 9
Mixamo Pose Export
    • pose_list
    • count
    • preview
    ◄fbx▾►
    ◄orientations8►
    ◄frames_per_view4►
    ◄out_dirposes►
    ◄write_pngfalse►
    ◄size1024►

    What it's for

    Every other node in this pack eats .pose files. CP_MixamoPoseExport makes them. Point it at a Mixamo .fbx, pick camera angles and frames per angle, queue - and you get OpenPose COCO-18 pose files on disk, named per view and frame. One Slow Run clip at 8 views × 30 frames is 240 poses, and those poses are character-agnostic. Export once and the library serves every character you make.

    Why 3D instead of running DWPose on something? A detector tells you what's in the picture, and on stylized art it wobbles. A rig gives you exact joints plus camera angles no detector can invent - an isometric south-east view, a straight top-down. A ComfyUI viewport node that batch-renders OpenPose from FBX/GLB animations landed in February 2026 and did well. That one is interactive; this one is a headless exporter - a library on disk the rest of the pipeline reads.

    How it works

    pufbx reads the FBX, Mixamo bone names are resolved into the 18-joint OpenPose layout, and the animation is sampled at evenly spaced frames including first and last. Each frame is projected through every requested camera:

    • 4_iso - SE, SO, NE, NO (the classic isometric / RTS sheet angles)
    • 4_cardinal - LEFT, RIGHT, TOP, BOT
    • 6 - the four isometric plus TOP and BOT
    • 8 - everything

    One detail that's the difference between a usable sheet and a jittery one: camera distance is fitted once across every frame and view, so the character stays the same size for the whole clip. Scale pumping between frames is the classic artifact of fitting each frame separately.

    Files land as {clip}_{VIEW}_{nn}.pose, plus a .png companion if you asked for debug PNGs.

    The inputs

    fbx is a dropdown built by scanning ComfyUI/input/, ComfyUI/input/mixamo/ and the pack's bundled mixamo/ folder (it ships example clips). Drop your FBX in one of the first two and it shows up.

    orientations defaults to 8 - eight files per sampled frame. frames_per_view takes 1–64 and defaults to 4; the README's 10 / 30 / 60 guidance still applies, but start at 10 and look before committing to 60.

    out_dir defaults to poses, the pack's library folder the rest of the pipeline reads - leave it unless you want files elsewhere (other values resolve under ComfyUI's output/). write_png saves debug stick figures beside each .pose. size is the square canvas: 1024 default, 256–2048 in steps of 64.

    What comes out

    pose_list is the filenames, newline-joined - wire it into CP_PoseTransferPrep when you want exactly this clip instead of a filtered slice of the library. count is how many .pose files were written: if your clip has fewer frames than you asked for, duplicate frame indices collapse, so you can get fewer than views × frames_per_view. preview is a contact sheet IMAGE: drop a Preview node on it and you see the whole export without opening a folder. With write_png on it tiles the PNGs; with it off it draws skeletons from the .pose files.

    It caches sensibly too: FBX path, mtime, size and widget values get hashed, so re-queueing doesn't rewrite 240 files unless something changed.

    Install

    Manager search _ComfyUI_CharacterPose, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Spit8/_ComfyUI_CharacterPose.git
    python -m pip install -r _ComfyUI_CharacterPose/requirements.txt
    python -m pip install -r _ComfyUI_CharacterPose/mixamo_tools/requirements.txt
    

    That second line is the one people skip, and it's why the node won't run: pufbx lives in mixamo_tools/requirements.txt, not the main one. The main requirements only pull numpy, opencv-python-headless, Pillow and scikit-learn.

    There's also a CLI doing the same job, better for bulk work:

    cd ComfyUI/custom_nodes/_ComfyUI_CharacterPose
    python -m mixamo_tools.export_views --positions 30 --view 8 --out-dir poses
    

    Where people get burned

    ModuleNotFoundError: pufbx. Either you only installed the main requirements, or installed into a different Python than the one running ComfyUI. Portable installs need python_embeded\python.exe -m pip ....

    A new FBX doesn't appear in the dropdown. The list is built when node definitions load, so restart ComfyUI after dropping files in. If it says (no .fbx in input/), nothing was found where it's looking.

    Non-Mixamo rigs fail. Bone mapping follows Mixamo's naming, so other skeletons bail out with "No Mixamo bones could be mapped." Mixamo's auto-rigger output is fine; a random downloaded rig usually isn't.

    You just made 480 files. 8 views × 60 frames is a lot of Klein sampling downstream. Sparse first; re-export dense once you know the clip is worth it.

    Exporting outside poses/ splits your library. The rest of the pack reads the package's poses/ folder, so a custom out_dir means Prep never sees those files.

    CategoryCharacterPose

    Inputs (6)

    NameTypeDefaultDescription
    fbxCOMBO4 options: /tmp/ComfyUI/custom_nodes/_ComfyUI_CharacterPose/mixamo/Crawling.fbx, /tmp/ComfyUI/custom_nodes/_ComfyUI_CharacterPose/mixamo/Head Hit.fbx, /tmp/ComfyUI/custom_nodes/_ComfyUI_CharacterPose/mixamo/Slow Run.fbx, /tmp/ComfyUI/custom_nodes/_ComfyUI_CharacterPose/mixamo/T-Pose.fbx
    orientationsCOMBO84 options: 4_iso, 4_cardinal, 6, 8
    frames_per_viewINT41–64—
    out_diroptSTRINGposes—
    write_pngoptBOOLEANfalse—
    sizeoptINT1024256–2048—

    Outputs (3)

    NameTypeDescription
    pose_listSTRING—
    countINT—
    previewIMAGE—