Nodes/Teskor's Utils/TS Save Pose Data
ComfyUI Node

TS Save Pose Data

Run pose detection once, reuse the result forever

By teskor-hub·Created 8 months ago·Updated 9 days ago· 4
TS Save Pose Data
  • pose_data
  • saved_path
filename

Pose detection is the hidden tax on pose-driven video: every generation run re-detects the same clip, because the detector result only lives inside the graph. TS Save Pose Data is the counter - it caches a POSEDATA sequence to disk so you can iterate on smoothing and generation settings without ever re-running OpenPose/ViTPose. Run detection once, save, and from then on your workflow loads the cached pose in a fraction of a second.

It pairs with TS Load Pose Data in the same pack, and it's the kind of utility that quietly saves you hours. Detection is the slow, expensive part of a pose workflow; generation is the part you actually want to tune. Saving the result decouples the two.

How it works

Feed it a pose_data and it writes a compressed .npz archive to ComfyUI's output folder - the same structure the Aligned-AI / Kijai-style pose nodes produce, including the per-frame confidence arrays and the original pre-smoothing data if present. Everything is plain numpy arrays and strings, so the file is portable between machines and carries no code references.

Now about the name - TSSavePoseDataAsPickle. It's a lie, in the good way. Older releases genuinely wrote Python pickles, and pickle is an arbitrary-code-execution format: a pose file shared by anyone else was untrusted input running with your permissions. Those pickles also embedded the absolute install path of ComfyUI-WanAnimatePreprocess as a module name, so they broke whenever that pack moved. The class name is kept so old saved workflows still resolve, but the node writes safe .npz now. If you have old .pkl caches, they can't be loaded anymore - re-save them through this node (the README links a converter for the one-off migration).

The inputs that matter

  • pose_data (POSEDATA) - wire from your pose detector, or from TS Pose Data Smoother to stash the smoothed version for later comparison.
  • filename (STRING) - optional. Empty gives you an auto name like pose_data_20260826_143500.npz. It never overwrites: if the name exists, it appends _0001, _0002, and so on. Type .pkl or .pickle out of habit and it'll quietly correct the extension to .npz.

Output: saved_path (STRING) - the full path where the file landed, if you want to hand it elsewhere.

Install

Part of Teskor's Utils. ComfyUI Manager → search Teskor's Utils → Install → Restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/teskor-hub/comfyui-teskors-utils
pip install -r comfyui-teskors-utils/requirements.txt

Restart, find it under TS Utils/Pose. Just numpy and opencv-python; nothing heavy.

Gotchas

The folder split is the one thing that trips people up. This node saves into ComfyUI's output folder, but TS Load Pose Data reads from the input folder - so the round-trip isn't automatic. Save your pose, then drop the .npz into the input folder (where you keep reference images) and the load node's dropdown will find it. And worth repeating: it's a cache, not a backup format with a versioned contract - if you rely on saved poses across pack updates, re-save them after upgrading. Cheap to do, and it costs you one detection run instead of a silent format mismatch later.

CategoryTS Utils/Pose

Inputs (2)

NameTypeDefaultDescription
pose_dataPOSEDATA
filenameSTRING

Outputs (1)

NameTypeDescription
saved_pathSTRING