Epsilon/V-Pred Converter (Tensor Prism)
The fix when your sampler math is wrong
- model
- model
Two diffusion models can have identical architectures and still disagree about what they output: some predict the noise directly (epsilon), and some predict a combined "v" quantity that has to be converted before the sampler can use it. Mixing prediction types is how you get those weird, half-developed, noisy renders that look like the model is broken when it isn't. Epsilon/V-Pred Converter (Tensor Prism) is the targeted fix: it rewrites a model's weights so its prediction type matches what you actually want, no full re-merge required.
This is one of the more useful utilities in the pack, because prediction type mismatches are a classic silent failure - the image comes out wrong in a way that looks like a prompt or sampler problem. The KB's own architecture essay notes that v-prediction variants of familiar SDXL fine-tunes exist (NoobAI's v-pred variant being the well-known one), so "which prediction type is this checkpoint" is a real question you'll eventually face.
How it works
Feed in a model and set two enums: input_pred_type - epsilon or v_prediction - for what the model currently is, and output_pred_type for what you want it to be. Then conversion_strength (1.0 = full conversion, up to 2.0 if you want to overdo it) controls how thoroughly the rewrite happens.
Mechanically, the node doesn't retrain or merge - it applies conversion patches to the model's weights, and it's deliberate about where. Per the source, critical targets are the output blocks (output_blocks., out.) and the middle block, because those layers most directly determine the prediction the sampler sees. Secondary targets (time embedding, the last couple of input blocks) get a gentler conversion. That layering is the whole design: get the prediction right at the output where it matters, disturb the middle as little as possible.
The single output is model, a MODEL ready to plug back into your KSampler.
When to actually use it
- You merged an epsilon model with a v-prediction model and the result renders nonsense - convert one parent first so they speak the same language.
- You have a v-pred checkpoint but your workflow/sampler stack assumes epsilon.
- You downloaded something that "looks broken" and want a cheap test of whether prediction type is the culprit before you start a whole merge.
The README recommends starting at full conversion_strength (1.0) and backing off only if the result seems over-converted. Pure conversion is also much lighter on memory than a block-level merge+convert, per the pack's own notes - so this is the cheap path when all you need is the type fixed.
Installing it
Part of ComfyUI-Tensor-Prism-Node-Pack. ComfyUI Manager → search "Tensor Prism" → Install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/AstrionX/ComfyUI-Tensor-Prism-Node-Pack
No model downloads; deps are torch, numpy, psutil. The README's clone URL is typo'd - use Manager or the URL above.
The honest caveat
A converter like this is a practical patch, not a perfect retrain - converting a v-pred model to epsilon will change its character somewhat, and strong conversion_strength values can introduce artifacts if the model's other layers still expect the original prediction. This pack is also young and first-author ("vibe-coded" is in the dev notes), so verify the converted output against a known-good render before trusting it with production work. If results look over-converted, the README's advice is straightforward: dial conversion_strength down.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Model to convert | |
| input_pred_type | COMBO | epsilon | Current prediction type of the model |
| output_pred_type | COMBO | v_prediction | Desired output prediction type |
| conversion_strength | FLOAT | 1.000–2 | Conversion strength (1.0 = full conversion) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |