Pianosequenza-True_long · Save PSkf
The two-second step that decides whether tonight's render is wasted
- pskf
- pskf_path
- state_info
This node writes one file. That's it. And it's the highest-value node in the whole Pianosequenza chain, because everything else - resuming, extending, retrying shot 9 without redoing shots 1 through 8 - depends on a checkpoint that exists.
Pianosequenza-True_long · Save PSkf takes the packed state and writes it out as a versioned .pskf.safetensors file inside ComfyUI/output. Two required inputs, two string outputs, and it's a terminal output node, so it actually runs.
Why a savetensors file and not an mp4
Because what you need to resume an H3 sequence isn't pixels. It's the joint video+audio latent plus the boundary analysis that tells the continuation engine where the seam is. An mp4 has already thrown that away - you can re-encode it, re-decode it, re-encode it, and every round trip is a slight quality tax and a lost alignment.
So the save is a latent checkpoint with metadata attached: format, engine, schema version, fps, clip index, frame count, visible frame count, head context, technical padding, the video and audio tensor shapes, the source id, and the serialised handover JSON. That handover blob is the piece that makes automatic mode work later; it's the freeze analysis for that boundary, stored next to the tensors rather than recomputed.
If you've used disk-backed samplers or latent continuation in other long-video stacks, this should look familiar - the whole family of "extend beyond the model's window" workflows is really a checkpointing discipline with sampling glued on.
Inputs and outputs
pskf- the state fromIAMCCS_H3PSkfPack, or a loaded one fromLoad PSkf.filename_prefix- defaults toiamccs_true_long/clip. Note the folder-shaped default: the saver runs it through ComfyUI's normal save-path logic, so you get a subfolder underoutputplus aclipstem.
Outputs are pskf_path (the resolved file you can feed to the LTX resume nodes or print into a log) and state_info (the same summary string the packer produces).
How it works, concretely
The state's latent gets split back into its video and audio streams and moved to CPU, contiguous. Then the file is named {folder}/{filename}_{slot:05d}.pskf.safetensors - the slot comes from the state's clip_index when it's above zero, otherwise from ComfyUI's counter. That %05d suffix is why Load PSkf's clip_index input exists and why the two nodes are designed as a pair.
Practical consequence: keep your clip indices stable and unique. Two different shots saved with clip_index = 1 will collide on the same filename, and the second silently overwrites the first. Name them 1, 2, 3 in sequence or key them to shot numbers - whatever you pick, pick it once.
Install
Ships in IAMCCS-nodes. ComfyUI Manager → IAMCCS Nodes → install → restart → hard-refresh the browser. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Restart. Keep one copy in custom_nodes; duplicates cause stale definitions per the README.
No requirements.txt in the repo, so nothing to pip install for the pack. safetensors is already a ComfyUI dependency, so there's no new wheel here. You need ComfyUI 3.0.0+ and your own H3 weights - the pack ships none.
Common issues
The interrupt that erases your evening. ComfyUI writes this file at the end of the node's execution. Interrupt during a long sample and there's no partial checkpoint to fall back on - you get an empty folder and a "why won't Load PSkf find anything" question. If a run is expensive, save the accepted chunk before queueing anything that continues from it. This is the single failure mode that costs people actual hours.
Files fine, loader confused. Check the folder and index. A save with filename_prefix of my_project/shot and clip_index 4 produces output/my_project/shot_00004.pskf.safetensors. The loader wants a path relative to output (my_project/shot) plus index 4, or 0 for newest.
Disk filling up unnoticed. These are latents, not thumbnails, and long sequences stack up fast. Nothing in the node warns you. Every few dozen clips, go delete the false starts - the whole point of a versioned filename is that the folder is browsable.
"Nothing saved." If nothing downstream is an output node and the saver is bypassed or muted, ComfyUI prunes it. Check the node is enabled and not bypassed (that pale purple state catches everyone twice).
Where it fits
The useful habit is Pack → Save → Extend, in that order. The save is your insurance policy; the extend is the actual work. Then when the extend produces garbage - and on a 12-shot sequence, one of them will - you reload the checkpoint immediately before it and re-run just that segment instead of the whole programme.
For the round trip back in, use IAMCCS_H3PSkfLoad, and note that some delivery paths (MiniMax H3 → LTX · Resume Saved Native) can read a saved native master and rebuild the plan from its sidecar without loading H3 at all.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| pskf | IAMCCS_H3_PSKF | — | |
| filename_prefix | STRING | iamccs_true_long/clip | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| pskf_path | STRING | — |
| state_info | STRING | — |