Krea 2 · Kroma v0.3 Turbo — INT8 ConvRot
Learned-rounding INT8 ConvRot quantization of lodestones/Kroma, reduced from 25.64 GB to 13.49 GB.
This is the full diffusion model, converted directly from kroma-v0.3-turbo.safetensors. It is not a LoRA or an all-in-one checkpoint: the Krea 2 text encoder and VAE remain separate.
The conversion uses row-wise INT8 weights, fixed 256-wide ConvRot groups, and the architecture-specific Krea2 preset in silveroxides/convert_to_quant. All 28 main transformer blocks are quantized; the latent input/output, timestep and text-conditioning paths retain their source BF16 values.
Validated: exact tensor coverage, all ConvRot metadata, byte-identical retained weights, and native ComfyUI loading plus a synthetic diffusion forward. Quantization is lossy; no matched-prompt visual quality comparison or inference-speed benchmark has been performed.
Download
| File | Size | Purpose |
|---|---|---|
| kroma-v0.3-turbo-int8convrot.safetensors | 13.492 GB / 12.565 GiB | INT8 ConvRot diffusion model |
Exact file size: 13,491,951,240 bytes. This saves 12,148,239,856 bytes (47.38%) compared with the 25,640,191,096-byte BF16 source. File-size reduction is not a claim about peak VRAM usage or generation speed.
Place the model in ComfyUI/models/diffusion_models/ (a subfolder is fine) and select it in Load Diffusion Model. Use a Krea2-compatible workflow with its separate text encoder and VAE. The tested native ComfyUI loader handles the embedded quantization metadata; no custom INT8 loader was needed in that environment.
What was quantized
The source contains 12,820,073,036 parameters across 430 BF16 tensors. Its main transformer has 28 blocks, numbered 0 through 27, with eight linear weight matrices per block.
Quantized weights in every blocks.0–blocks.27 |
Matrices |
|---|---|
attn.gate, attn.wk, attn.wo, attn.wq, attn.wv |
140 |
mlp.down, mlp.gate, mlp.up |
84 |
| Total | 224 |
12,155,092,992 parameters are stored as INT8. The denominators are:
| Coverage measure | Result |
|---|---|
| Quantized parameters / all model parameters | 94.81298% |
| Quantized parameters / all rank-2 weight parameters | 94.82402% |
| Quantized matrices / all rank-2 weight matrices | 224 / 264 = 84.84848% |
There are 265 rank-2 tensors in total; last.modulation.lin is a modulation parameter rather than a linear weight matrix and is excluded from the 264-weight denominator. Every selected input dimension is divisible by 256. Neither the first nor the last main transformer block is excluded.
What remains in BF16, and why
| Retained path | Role in the model |
|---|---|
first |
Projects latent patches into the transformer. Its input width of 64 also cannot use a 256-wide rotation. |
last, including last.linear and last.modulation |
Final latent prediction and output modulation. |
tmlp, tproj |
Timestep conditioning and shared modulation supplied to the main blocks. |
txtfusion |
Combines 12 text-encoder hidden states using two layerwise blocks, a 12-to-1 projector and two refiner blocks. The projector input width of 12 is incompatible with group size 256. |
txtmlp |
Projects the fused text conditioning into the main transformer width. |
| Other norms, biases and modulation parameters | Retained without quantization. |
All 206 retained tensors, totaling 664,980,044 parameters, are byte-identical BF16 copies of the source tensors. These exclusions follow the actual Krea2 computation graph and the converter's Krea2 preset. They are precautions, not measured evidence of a quality improvement.
The exact quantized and retained tensor names are listed in quantization_manifest.json.
Conversion method and reproducibility
| Setting | Value |
|---|---|
| Converter | convert-to-quant 1.3.1 |
| Format | INT8, row-wise scaling |
| Rotation | ConvRot, fixed group size 256 |
| Rounding | Learned AdaRound, not simple rounding |
| Optimizer | Prodigy, plateau schedule |
| Iteration limit | 4,000 per tensor, with default early stopping |
| Calibration | 3,072 synthetic samples; no prompt/image calibration dataset |
| Preset | --krea2 |
| Memory mode | --low-memory |
| Recorded seed | 3971162022 |
| GPU | NVIDIA GeForce RTX 5070 Ti, 16 GB, compute capability 12.0 |
| PyTorch / CUDA | 2.12.0+cu130 / 13.0 |
| Other tested components | comfy-kitchen 0.2.31, triton-windows 3.7.0.post26 |
| Conversion time | Approximately 104.5 minutes on this machine |
The command below reproduces the run configuration, making the randomly selected seed from the original log explicit. --simple is intentionally absent. Do not overwrite your source checkpoint.
ctq -i "kroma-v0.3-turbo.safetensors" -o "kroma-v0.3-turbo-int8convrot.safetensors" --int8 --scaling_mode row --convrot --convrot-group-size 256 --comfy_quant --save-quant-metadata --krea2 --low-memory --device cuda --manual_seed 3971162022
The optimizer runs separately for each matrix. Its progress restarting below 4,000 iterations is expected when a tensor reaches the early-stopping condition. Reusing a seed does not guarantee identical output bytes across different software versions or hardware.
Validation results
Structural validation passed. The completed file contains exactly 878 tensors:
| Tensor type | Count | Stored elements |
|---|---|---|
| INT8 weights | 224 | 12,155,092,992 |
| FP32 row scales | 224 | 1,691,648 |
| BF16 retained tensors | 206 | 664,980,044 |
| U8 metadata tensors | 224 | 19,936 |
Every per-layer comfy_quant marker was decoded and verified:
{
"format": "int8_tensorwise",
"per_row": true,
"convrot": true,
"convrot_groupsize": 256
}
int8_tensorwise is the native layout identifier here; scaling is per row, as shown by per_row and the scale tensors. The top-level _quantization_metadata agrees with all 224 markers. Tensor names, shapes, offsets and file length match the planned layout; scales are finite and positive; no tensors are missing or unexpected. The source file's SHA-256 was checked before and after conversion and remained unchanged.
Native ComfyUI smoke test passed. The local checkout at commit e7051b03 recognized Krea2, loaded all 224 ConvRot modules, and executed a CUDA diffusion forward with:
- Latent input shape:
[1, 16, 8, 8] - Synthetic text-conditioning shape:
[1, 4, 30720] - Output shape:
[1, 16, 8, 8], with all values finite
This tests native loading and execution, not image quality or real-workflow memory requirements. Machine-readable results are in validation_summary.json.
Cross-check against an existing quantization
The header and all 224 quantization markers of Stabhappy's Kroma v0.3 base INT8 ConvRot checkpoint were inspected remotely. Its quantized main-block weight names and 256-wide rotation match this selection. This is an architecture/format cross-check, not a comparison of output quality: that checkpoint uses the base model and retains some tensors in FP32, while this conversion uses the Turbo BF16 source and preserves its excluded tensors in BF16.
Provenance and checksums
Source: lodestones/Kroma/kroma-v0.3-turbo.safetensors, revision 09347873d44464c8a94e2c1059b3eb45bc792490. The local source size and SHA-256 were also matched against Hugging Face's upstream file metadata before publication.
Source SHA-256
1e58dbbf59bb2cdd8589256666dbc57f73102a06e97293a411e91493e2a675bd
INT8 ConvRot output SHA-256
b1c3da9045d7ca931cad201df4fc84543b135f684b7aa9e0d15f10b00e4c1022
The output checksum is also available in SHA256SUMS.txt.
Quality limits
Quantization is lossy. Learned rounding optimizes a reconstruction objective; it does not guarantee visibly better images, perceptual equivalence, or a speedup. No matched-prompt BF16-versus-INT8 image comparison has been performed. To assess quality, compare the two checkpoints using identical prompts, seeds, sampler, steps, CFG, resolution, text encoder and VAE across several representative prompts.
Credits and license
- Krea — original Krea 2 model and architecture.
- lodestones — Kroma fine-tune and source Turbo checkpoint.
- silveroxides/convert_to_quant — quantization tooling and Krea2 preset.
- ComfyUI and comfy-kitchen — native loading and execution.
- thedarkthrust — this conversion and validation release.
This is a modified, unofficial derivative, not an official release or endorsement by Krea or lodestones. The modifications are INT8 row-wise ConvRot quantization of the 224 main-block weight matrices, learned rounding, and the addition of scales and quantization metadata; the remaining source tensors are unchanged.
The weights are distributed under the Krea 2 Community License Agreement. Recipients must be bound by and comply with that agreement, including its commercial-use conditions and deployment requirements. See the complete included LICENSE, Notice.txt, and the official license page. This conversion does not grant additional rights to the underlying model.
Model tree for thedarkthrust/Krea2-Kroma-v0.3-Turbo-INT8-ConvRot
Base model
lodestones/Kroma