Nodes/IAMCCS-nodes/Pianosequenza-True_long · Load PSkf
ComfyUI Node

Pianosequenza-True_long · Load PSkf

Reload an H3 take mid-sequence instead of regenerating it

By IAMCCS·Created about a year ago·Updated 3 days ago· 118
Pianosequenza-True_long · Load PSkf
    • pskf
    • latent
    • handover
    • resolved_path
    • state_info
    ◄pskf_pathiamccs_true_long►
    ◄clip_index1►

    Long H3 sequences have an annoying shape: you generate a chunk, you like it, you continue from it, and then something downstream - an upscale pass, a delivery re-run, a look tweak - forces you to start over from chunk one. Pianosequenza-True_long · Load PSkf is the node that stops that. It reads a checkpoint of a previously accepted H3 state off disk and hands it back to the graph as if you'd just generated it.

    "Pianosequenza" is the author's own word for this workflow, by the way. You won't find it in community discussion - I looked, and it has essentially zero footprint outside the repo. Treat it as IAMCCS jargon, not an established technique name.

    What a PSkf actually is

    A PSkf is an "IAMCCS Pianosequenza State Keyframe": the complete native H3 video and audio latent, saved as a .pskf.safetensors file. Not frames, not an mp4 - the joint AV latent, so a continuation can pick up both picture and sound from the same point.

    That's the interesting part. H3 generates audio natively alongside picture (it's a 33B omni-modal model with a unified context, not a silent generator with an audio pass bolted on), which means "resume where I left off" has to carry two aligned streams. A video-only latent checkpoint doesn't get you there.

    Inputs and outputs

    Two inputs, both genuinely simple:

    • pskf_path - a file or folder relative to ComfyUI/output. Default is the folder iamccs_true_long.
    • clip_index - which clip slot you want. It matches the numeric suffix the saver wrote. 0 means "whatever the newest file is", which is the one you'll use most.

    Five outputs, and you normally only wire two:

    • pskf → the state object, into Pack/Save or into the Extend node
    • latent → the joint AV LATENT, into your sampler
    • handover → the freeze-analysis metadata saved alongside the clip, consumed by continuation nodes
    • resolved_path and state_info → STRING diagnostics; state_info prints clip index, technical frames, visible frames, head context and padding

    That last one is genuinely useful when something looks off - it's the node telling you what it loaded rather than what you assumed it loaded.

    How it works

    The loader resolves your path against the output directory and hard-refuses anything outside it, then opens the safetensors file, checks that both a video and an audio tensor exist, and checks their dimensionality. It also validates the metadata's format string against iamccs_pskf_v1; a file that isn't this format fails loudly instead of loading garbage.

    Then it rebuilds what ComfyUI expects: a nested tensor pairing video and audio samples into a single samples payload, plus a state dict carrying the clip index, head context length, visible frame count, source id, and the parsed handover_json. Everything downstream in the True_long chain operates on that state, so a loaded checkpoint is indistinguishable from a freshly packed one.

    Worth noting the tradeoff: this is disk-backed state, so there's no model dependency and no H3 weights needed just to read it - but it's also a load at whatever moment ComfyUI decides to evaluate it. It's not a source of speed, it's a source of resumability.

    Install

    This is part of the IAMCCS pack, not a standalone repo. From ComfyUI Manager, search IAMCCS Nodes and install, then restart and hard-refresh the browser. Manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/IAMCCS/IAMCCS-nodes.git
    

    Restart afterwards. The README is blunt about duplicates: keep exactly one copy in custom_nodes, or you get stale node definitions and frontend routes that don't match the backend.

    No pip requirements for the pack itself - there's no requirements.txt in the repo. You will need your H3 model set (model, VAE, text encoder) for the rest of the workflow, since nothing weights-related ships with the pack. ComfyUI 3.0.0+.

    Common issues

    "Load path must stay inside the ComfyUI output directory." The containment check is deliberate, and it catches absolute paths and ../ escapes. Your checkpoints live under ComfyUI/output, so use a relative path like iamccs_true_long and let the node resolve it.

    "Checkpoint must contain both video and audio tensors" / "unsupported checkpoint format". You pointed it at a .safetensors that isn't a PSkf - a plain model file, or a checkpoint from an older revision of the workflow. Loaders that fail on format are doing you a favour; the alternative is a corrupt-looking continuation three minutes into a queue.

    clip_index doesn't find anything. The index maps to the filename suffix the saver wrote. If you're unsure, use 0 and read state_info, which tells you what you actually got.

    Nothing to load because nothing was saved. The save step is a separate node (Save PSkf) and it has to complete - an interrupt between sampling and saving leaves you with an empty folder, not a partial file. That's the one failure mode that costs real GPU time, so save before you queue anything long.

    Where it fits

    The intended loop is Pack → Save → (later) Load → Extend. Load on its own is just a reader; its value shows up when you're iterating on a twelve-shot sequence and only want to re-run shots 9 through 12 from the boundary at the end of shot 8. Wire pskf into IAMCCS_H3TrueLongExtend as previous_latent and it continues from there with the phase alignment intact.

    CategoryIAMCCS/MiniMax H3/Pianosequenza-True_long

    Inputs (2)

    NameTypeDefaultDescription
    pskf_pathSTRINGiamccs_true_longFile or folder relative to ComfyUI/output.
    clip_indexINT10–999990 loads the newest PSkf file.

    Outputs (5)

    NameTypeDescription
    pskfIAMCCS_H3_PSKF—
    latentLATENT—
    handoverH3_CONTINUOUS_HANDOVER—
    resolved_pathSTRING—
    state_infoSTRING—