TS Load Checkpoint
A Checkpoint Loader for a File Nothing Else on Your Disk Can Open
- model
- clip
- vae
What it is
Three nodes in the Timesaver pack exist for one file type, .tsmodel. This is the CheckpointLoaderSimple of the three: point it at a locked checkpoint and you get model, clip and vae, exactly like the stock node.
Why would anyone take a working checkpoint and make it awkward to load? The stated use is distribution - you hand someone a model you'd rather they didn't casually re-upload, feed to another app, or open with a five-line Python script. That's the entire ambition. The README says so, and the source says so too: there is no key, no password and no cryptography anywhere in the format. Anyone holding this pack's source can unlock a file, and once loaded the model is as available to any saving node as any other. It's a "don't just grab the file and load it" lock, not DRM. Which is a useful thing to be clear-eyed about, because the reverse is also true - the real risk in ComfyUI was never the model file, it was the node code around it.
What a .tsmodel file actually is
It's a safetensors file with a disguise on the front. safetensors is a length-prefixed JSON header followed by raw tensor bytes, with nothing executable in it - that's the whole reason it replaced pickle-based .ckpt. The lock leaves that structure alone and changes three things:
- The first 8 bytes - the header length - are replaced with the magic marker
TSMODEL\x01. Every ordinary reader dies on the spot:safe_openreports a header length around 1.6×10¹⁷ and gives up, torch raises an unpickling error. - The JSON header is still there but zlib-compressed and zero-padded back to its original length, so names, shapes and offsets aren't readable in a hex editor.
- The tensor data hasn't moved. Byte for byte where it always was, which is what makes the format practical.
- A trailer at the end records the version, mode, original header length, original file size and a CRC32 of the header.
Because nothing but the header moved, locking a finished 20 GB file is a header rewrite that takes milliseconds, and this node hands the tensors to ComfyUI through the same mmap path the core uses, streaming from disk into VRAM. The overhead is unpacking a header: milliseconds. If ComfyUI's internal read path ever changes under it, the loader falls back to a plain mmap on its own - slower, but still loading.
The node also knows nothing about model architectures, which is deliberate. It parses the header and passes the state dict to comfy.sd.load_state_dict_guess_config - the same function CheckpointLoaderSimple calls - so ComfyUI guesses the architecture from the weights and new architectures keep working without the pack being updated.
Inputs and outputs
One input: ckpt_name, a dropdown of .tsmodel files found under models/checkpoints, subfolders included, plus every folder you've added through extra_model_paths.yaml. The extension is deliberately not registered with ComfyUI, so the stock loaders never offer you a file they can't open.
Outputs are the familiar trio: model, clip, vae.
Install
ComfyUI Manager → search Timesaver, or:
cd ComfyUI/custom_nodes
git clone https://github.com/AlexYez/comfyui-timesaver
cd comfyui-timesaver
python -m pip install -r requirements.txt
Restart ComfyUI. There is nothing extra to download for these three nodes and no optional dependency to install - the reader is part of the pack. Do note the pack targets the V3 node API (comfy_api.v0_0_2), so keep ComfyUI reasonably current.
When it goes wrong
The dropdown says (no .tsmodel files found). The scan walks every folder registered for checkpoints, so either the file isn't in one of them or your models live somewhere ComfyUI doesn't know about. Check extra_model_paths.yaml. The list is cached for a couple of seconds, so a file you copied in a moment ago appears on a refresh or a re-queue rather than instantly.
Don't rename it to .safetensors. That unlocks nothing; it just turns a clear "this isn't a .tsmodel" into a header-too-large error from a stock loader.
Could not detect the model type of … The file opened fine, so this is the checkpoint itself, not the lock. The format read the file successfully and ComfyUI couldn't identify the weights. That's your answer about where the problem is - and it's the opposite of the error you'd get from a corrupted file or a bad copy.
For the other two shapes of model, TS Load Diffusion Model handles a bare diffusion model and TS Load LoRA, model only handles an adapter.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| ckpt_name | COMBO | A .tsmodel file from models/checkpoints. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| vae | VAE | — |