# silveroxides/convert_to_quant architecture

> Architecture diagram of the GitHub repository silveroxides/convert_to_quant, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/silveroxides/convert_to_quant
- Repository: https://github.com/silveroxides/convert_to_quant

## Overview

1. **What this repository is**
   - `convert_to_quant` is a Python package and CLI tool that converts model weights stored as `safetensors` into quantized weights for ComfyUI inference.
   - The central architectural flow is: **load model weights → choose quantization format/preset → calibrate/optimize → write a new quantized safetensors file with ComfyUI-compatible metadata**.

2. **Primary entry points**
   - There are two front doors into the same pipeline: the CLI in `convert_to_quant/cli/main.py` and the module API exposed from `convert_to_quant/__init__.py` and `convert_to_quant/convert_to_quant.py`.
   - The CLI argument parser (`convert_to_quant/cli/argument_parser.py`) maps flags like `--int8`, `--mxfp8`, `--nvfp4`, `--comfy_quant`, and model presets into the conversion pipeline.

3. **Core orchestration layer**
   - `convert_to_quant/convert_to_quant.py` acts as the top-level coordinator.
   - It wires together model loading, layer selection, calibration, conversion, metadata generation, and output serialization.
   - This is the boundary where user intent becomes a concrete conversion plan.

4. **Format-specific conversion subsystem**
   - The `convert_to_quant/formats/` package contains the actual quantization-format logic:
     - `fp8_conversion.py`
     - `int8_conversion.py`
     - `mxfp8_conversion.py`
     - `nvfp4_conversion.py`
     - `hybrid_mxfp8_conversion.py`
     - `format_migration.py`
   - These modules encapsulate how weights are encoded for each target format and how mixed/hybrid layer strategies are represented.
   - `legacy_utils.py` suggests backward-compatibility handling for older metadata or format layouts.

5. **Optimization and learned rounding**
   - The `convert_to_quant/converters/` package contains converter classes and optimization variants:
     - `base_converter.py` defines the shared conversion interface/behavior.
     - `learned_rounding.py`, `learned_mxfp8.py`, and `learned_nvfp4.py` implement error-reduction strategies.
     - `mxfp8_converter.py` and `nvfp4_converter.py` specialize the format conversion path.
   - The README’s “learned rounding” and “bias correction” features are implemented as a distinct optimization layer on top of raw format conversion, not as part of the storage format itself.

6. **Calibration and numeric analysis**
   - `calibrate_activation_scales.py` indicates a calibration stage used to measure activation/scale behavior before finalizing quantization.
   - Utility modules such as `utils/float_utils.py`, `utils/tensor_utils.py`, and `utils/convrot.py` support numerical transforms, error analysis, and rounding/rotation-related preprocessing.
   - This is the part of the pipeline that improves accuracy, especially when calibration samples and synthetic data are used.

7. **Model-specific filtering and layer policy**
   - `config/layer_config.py`, `constants.py`, and the README’s preset flags (`--flux2`, `--t5xxl`, `--hunyuan`, `--wan`) define which layers should be kept in higher precision or excluded from quantization.
   - The repo supports both preset-based filtering and explicit regex-based exclusions, which means the conversion pipeline is not “quantize everything”; it is policy-driven at the layer boundary.

8. **ComfyUI compatibility boundary**
   - `convert_to_quant/comfy/` and `utils/comfy_quant.py` are the integration layer for ComfyUI.
   - `comfy/float.py`, `comfy/quant_ops.py`, and `comfy/int8_kernels.py` appear to provide custom tensor/operation behavior needed for ComfyUI to consume the produced weights correctly.
   - The output format includes metadata and optional ComfyUI-specific layer information so the converted file can be loaded like a normal model in that ecosystem.

9. **Memory and runtime constraints**
   - `utils/memory_efficient_loader.py` and `pinned_transfer.py` show that the pipeline is designed for large model weights and constrained GPU/CPU memory.
   - The README’s `--low-memory` mode and the presence of OOM recovery tests indicate that memory management is a first-class concern, not an afterthought.
   - For INT8, the architecture also depends on optional Triton-backed kernels, which affects runtime behavior and performance on supported systems.

10. **Validation and error measurement**
   - The `tests/` directory is unusually important here: it includes functional tests, CLI consistency checks, OOM recovery, hybrid-format coverage, and INT8/convrot-specific tests.
   - The quantization error measurement scripts and documentation in `tests/` indicate that numerical fidelity is a major acceptance criterion.
   - In architectural terms, the tests validate both the conversion logic and the “does this still work in ComfyUI?” integration boundary.

11. **Overall data flow for an architecture diagram**
   - Input: `safetensors` model file plus CLI/module options.
   - Policy stage: layer presets, exclusions, and custom format selection.
   - Calibration/optimization stage: activation-scale measurement, learned rounding, bias correction.
   - Conversion stage: format-specific encoder path for FP8, INT8, NVFP4, MXFP8, or hybrid layouts.
   - Output: quantized `safetensors` file with metadata and ComfyUI compatibility artifacts.

12. **How to think about the repository boundary**
   - This repo is not a model trainer; it is a **post-training weight conversion and optimization tool**.
   - Its main external dependencies are PyTorch, safetensors, CUDA-capable hardware, and optionally Triton/comfy-kitchen depending on the target format.
   - The key architectural seam is between **generic model weights** and **format-aware, ComfyUI-ready quantized weights**.

Main entry points: [`convert_to_quant/convert_to_quant.py`](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/convert_to_quant.py) (Pipeline), [`convert_to_quant/converters/base_converter.py`](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/converters/base_converter.py) (Base converter), [`convert_to_quant/utils/comfy_quant.py`](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/comfy_quant.py) (Comfy quant), [`convert_to_quant/cli/main.py`](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/cli/main.py) (CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_group_entry["Entry points"]
  node_node_cli_main["CLI<br/>entrypoint<br/>[main.py]"]
  node_node_cli_args["Args<br/>parser<br/>[argument_parser.py]"]
  node_node_init_api["Public API<br/>[__init__.py]"]
end

subgraph group_group_core["Core pipeline"]
  node_node_orchestrator{{"Pipeline<br/>orchestrator"}}
  node_node_loader[("Loader<br/>weight I/O")]
  node_node_transfer["Pinned transfer<br/>runtime helper<br/>[pinned_transfer.py]"]
end

subgraph group_group_policy["Policy"]
  node_node_layer_config["Layer policy<br/>preset rules<br/>[layer_config.py]"]
  node_node_constants["Constants<br/>shared config<br/>[constants.py]"]
end

subgraph group_group_calib["Calibration"]
  node_node_calibrate{{"Calibration<br/>analysis stage"}}
  node_node_float_utils["Float utils<br/>numeric helpers<br/>[float_utils.py]"]
  node_node_tensor_utils["Tensor utils<br/>tensor helpers<br/>[tensor_utils.py]"]
  node_node_convrot["ConvRot<br/>preprocess<br/>[convrot.py]"]
end

subgraph group_group_formats["Formats"]
  node_node_fp8["FP8<br/>format encoder<br/>[fp8_conversion.py]"]
  node_node_int8["INT8<br/>format encoder<br/>[int8_conversion.py]"]
  node_node_mxfp8["MXFP8<br/>format encoder"]
  node_node_nvfp4["NVFP4<br/>format encoder"]
  node_node_hybrid_mxfp8["Hybrid MXFP8<br/>mixed format"]
  node_node_migrate["Migration<br/>compatibility"]
end

subgraph group_group_opt["Optimization"]
  node_node_base_converter{{"Base converter<br/>conversion interface<br/>[base_converter.py]"}}
  node_node_learned_rounding["Learned rounding<br/>optimization"]
  node_node_mxfp8_conv["MXFP8 conv<br/>specialized converter<br/>[mxfp8_converter.py]"]
  node_node_nvfp4_conv["NVFP4 conv<br/>specialized converter<br/>[nvfp4_converter.py]"]
end

subgraph group_group_comfy["ComfyUI integration"]
  node_node_comfy_quant["Comfy quant<br/>integration<br/>[comfy_quant.py]"]
  node_node_comfy_float["Comfy float<br/>tensor shim<br/>[float.py]"]
  node_node_comfy_ops["Quant ops<br/>ops shim<br/>[quant_ops.py]"]
  node_node_comfy_int8["INT8 kernels<br/>kernel shim<br/>[int8_kernels.py]"]
end

subgraph group_group_utils["Utilities"]
end

subgraph group_group_tests["Validation"]
  node_node_test_func["Functional tests<br/>test suite<br/>[test_functional.py]"]
  node_node_test_cli["CLI tests<br/>test suite"]
  node_node_test_oom["OOM recovery<br/>test suite"]
  node_node_test_hybrid["Hybrid tests<br/>test suite"]
end

node_node_cli_main -->|"parses"| node_node_cli_args
node_node_cli_main -->|"calls"| node_node_orchestrator
node_node_init_api -->|"exports"| node_node_orchestrator
node_node_orchestrator -->|"loads"| node_node_loader
node_node_orchestrator -->|"applies"| node_node_layer_config
node_node_orchestrator -->|"uses"| node_node_constants
node_node_orchestrator -->|"calibrates"| node_node_calibrate
node_node_orchestrator -->|"analyses"| node_node_float_utils
node_node_orchestrator -->|"transforms"| node_node_tensor_utils
node_node_orchestrator -->|"preprocesses"| node_node_convrot
node_node_orchestrator -->|"dispatches"| node_node_base_converter
node_node_base_converter -->|"augments"| node_node_learned_rounding
node_node_base_converter -->|"specializes"| node_node_mxfp8_conv
node_node_base_converter -->|"specializes"| node_node_nvfp4_conv
node_node_orchestrator -->|"selects"| node_node_fp8
node_node_orchestrator -->|"selects"| node_node_int8
node_node_orchestrator -->|"selects"| node_node_mxfp8
node_node_orchestrator -->|"selects"| node_node_nvfp4
node_node_orchestrator -->|"selects"| node_node_hybrid_mxfp8
node_node_orchestrator -->|"migrates"| node_node_migrate
node_node_orchestrator -->|"writes"| node_node_comfy_quant
node_node_comfy_quant -->|"depends on"| node_node_comfy_float
node_node_comfy_quant -->|"depends on"| node_node_comfy_ops
node_node_comfy_quant -->|"depends on"| node_node_comfy_int8
node_node_orchestrator -->|"optimizes"| node_node_transfer
node_node_test_func -.->|"validates"| node_node_orchestrator
node_node_test_cli -.->|"validates"| node_node_cli_main
node_node_test_oom -.->|"validates"| node_node_loader
node_node_test_hybrid -.->|"validates"| node_node_hybrid_mxfp8

click node_node_cli_main "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/cli/main.py"
click node_node_cli_args "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/cli/argument_parser.py"
click node_node_init_api "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/__init__.py"
click node_node_orchestrator "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/convert_to_quant.py"
click node_node_loader "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/memory_efficient_loader.py"
click node_node_transfer "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/pinned_transfer.py"
click node_node_layer_config "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/config/layer_config.py"
click node_node_constants "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/constants.py"
click node_node_calibrate "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/calibrate_activation_scales.py"
click node_node_float_utils "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/float_utils.py"
click node_node_tensor_utils "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/tensor_utils.py"
click node_node_convrot "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/convrot.py"
click node_node_fp8 "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/fp8_conversion.py"
click node_node_int8 "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/int8_conversion.py"
click node_node_mxfp8 "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/mxfp8_conversion.py"
click node_node_nvfp4 "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/nvfp4_conversion.py"
click node_node_hybrid_mxfp8 "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/hybrid_mxfp8_conversion.py"
click node_node_migrate "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/format_migration.py"
click node_node_base_converter "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/converters/base_converter.py"
click node_node_learned_rounding "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/converters/learned_rounding.py"
click node_node_mxfp8_conv "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/converters/mxfp8_converter.py"
click node_node_nvfp4_conv "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/converters/nvfp4_converter.py"
click node_node_comfy_quant "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/comfy_quant.py"
click node_node_comfy_float "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/comfy/float.py"
click node_node_comfy_ops "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/comfy/quant_ops.py"
click node_node_comfy_int8 "https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/comfy/int8_kernels.py"
click node_node_test_func "https://github.com/silveroxides/convert_to_quant/blob/main/tests/test_functional.py"
click node_node_test_cli "https://github.com/silveroxides/convert_to_quant/blob/main/tests/test_cli_consistency.py"
click node_node_test_oom "https://github.com/silveroxides/convert_to_quant/blob/main/tests/test_oom_recovery.py"
click node_node_test_hybrid "https://github.com/silveroxides/convert_to_quant/blob/main/tests/test_hybrid_mxfp8.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_node_cli_main,node_node_cli_args,node_node_init_api,node_node_comfy_quant,node_node_comfy_float,node_node_comfy_ops,node_node_comfy_int8 toneBlue
class node_node_orchestrator,node_node_loader,node_node_transfer toneAmber
class node_node_layer_config,node_node_constants,node_node_test_func,node_node_test_cli,node_node_test_oom,node_node_test_hybrid toneMint
class node_node_calibrate,node_node_float_utils,node_node_tensor_utils,node_node_convrot toneRose
class node_node_fp8,node_node_int8,node_node_mxfp8,node_node_nvfp4,node_node_hybrid_mxfp8,node_node_migrate toneIndigo
class node_node_base_converter,node_node_learned_rounding,node_node_mxfp8_conv,node_node_nvfp4_conv toneTeal
```

## Components

### Entry points

User-facing CLI and module API

- [CLI](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/cli/main.py): entrypoint · Command-line front door · `convert_to_quant/cli/main.py`
- [Args](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/cli/argument_parser.py): parser · Maps flags and presets to conversion options · `convert_to_quant/cli/argument_parser.py`
- [Public API](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/__init__.py): module · Package-level exports · `convert_to_quant/__init__.py`

### Core pipeline

Top-level conversion coordination and model loading

- [Pipeline](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/convert_to_quant.py): orchestrator · Coordinates loading, policy, calibration, conversion, and writeout · `convert_to_quant/convert_to_quant.py`
- [Loader](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/memory_efficient_loader.py): weight I/O · Large-model and memory-aware weight loading · `convert_to_quant/utils/memory_efficient_loader.py`
- [Pinned transfer](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/pinned_transfer.py): runtime helper · Assists host/device data movement · `convert_to_quant/pinned_transfer.py`

### Policy

Layer selection and conversion presets

- [Layer policy](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/config/layer_config.py): preset rules · Preset-based layer keep/exclude logic · `convert_to_quant/config/layer_config.py`
- [Constants](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/constants.py): shared config · Global quantization and policy constants · `convert_to_quant/constants.py`

### Calibration

Numeric analysis and accuracy recovery

- [Calibration](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/calibrate_activation_scales.py): analysis stage · Measures activation scales before final quantization · `convert_to_quant/calibrate_activation_scales.py`
- [Float utils](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/float_utils.py): numeric helpers · Floating-point transforms and error support · `convert_to_quant/utils/float_utils.py`
- [Tensor utils](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/tensor_utils.py): tensor helpers · Tensor-level transforms and analysis helpers · `convert_to_quant/utils/tensor_utils.py`
- [ConvRot](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/convrot.py): preprocess · Rounding/rotation-related preprocessing · `convert_to_quant/utils/convrot.py`

### Formats

Format-specific quantization encoders

- [FP8](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/fp8_conversion.py): format encoder · FP8 weight conversion path · `convert_to_quant/formats/fp8_conversion.py`
- [INT8](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/int8_conversion.py): format encoder · INT8 weight conversion path · `convert_to_quant/formats/int8_conversion.py`
- [MXFP8](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/mxfp8_conversion.py): format encoder · MXFP8 weight conversion path · `convert_to_quant/formats/mxfp8_conversion.py`
- [NVFP4](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/nvfp4_conversion.py): format encoder · NVFP4 weight conversion path · `convert_to_quant/formats/nvfp4_conversion.py`
- [Hybrid MXFP8](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/hybrid_mxfp8_conversion.py): mixed format · Mixed-layer MXFP8 strategy · `convert_to_quant/formats/hybrid_mxfp8_conversion.py`
- [Migration](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/formats/format_migration.py): compatibility · Format migration and legacy layout handling · `convert_to_quant/formats/format_migration.py`

### Optimization

Learned rounding and specialized converter paths

- [Base converter](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/converters/base_converter.py): conversion interface · Shared converter behavior · `convert_to_quant/converters/base_converter.py`
- [Learned rounding](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/converters/learned_rounding.py): optimization · Error-reduction and bias-correction layer · `convert_to_quant/converters/learned_rounding.py`
- [MXFP8 conv](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/converters/mxfp8_converter.py): specialized converter · MXFP8 converter implementation · `convert_to_quant/converters/mxfp8_converter.py`
- [NVFP4 conv](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/converters/nvfp4_converter.py): specialized converter · NVFP4 converter implementation · `convert_to_quant/converters/nvfp4_converter.py`

### ComfyUI integration

Compatibility helpers for output consumption

- [Comfy quant](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/utils/comfy_quant.py): integration · ComfyUI metadata and quantization bridge · `convert_to_quant/utils/comfy_quant.py`
- [Comfy float](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/comfy/float.py): tensor shim · Float tensor behavior for ComfyUI compatibility · `convert_to_quant/comfy/float.py`
- [Quant ops](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/comfy/quant_ops.py): ops shim · Custom quantized ops for ComfyUI consumption · `convert_to_quant/comfy/quant_ops.py`
- [INT8 kernels](https://github.com/silveroxides/convert_to_quant/blob/main/convert_to_quant/comfy/int8_kernels.py): kernel shim · INT8-specific runtime kernels · `convert_to_quant/comfy/int8_kernels.py`

### Validation

High-signal test and measurement coverage

- [Functional tests](https://github.com/silveroxides/convert_to_quant/blob/main/tests/test_functional.py): test suite · End-to-end conversion coverage · `tests/test_functional.py`
- [CLI tests](https://github.com/silveroxides/convert_to_quant/blob/main/tests/test_cli_consistency.py): test suite · Argument and behavior consistency checks · `tests/test_cli_consistency.py`
- [OOM recovery](https://github.com/silveroxides/convert_to_quant/blob/main/tests/test_oom_recovery.py): test suite · Memory-failure recovery coverage · `tests/test_oom_recovery.py`
- [Hybrid tests](https://github.com/silveroxides/convert_to_quant/blob/main/tests/test_hybrid_mxfp8.py): test suite · Hybrid MXFP8 coverage · `tests/test_hybrid_mxfp8.py`

## Connections

- CLI → Args: parses · CLI entry uses shared argument mapping
- CLI → Pipeline: calls · CLI dispatches into the conversion pipeline
- Public API → Pipeline: exports · Module API exposes the conversion coordinator
- Pipeline → Loader: loads · Reads safetensors and stages weights
- Pipeline → Layer policy: applies · Selects layer policy and presets
- Pipeline → Constants: uses · Shares global conversion settings
- Pipeline → Calibration: calibrates · Runs activation/scale measurement
- Pipeline → Float utils: analyses · Uses numeric helpers during calibration
- Pipeline → Tensor utils: transforms · Uses tensor-level utility helpers
- Pipeline → ConvRot: preprocesses · Applies rounding/rotation steps when needed
- Pipeline → Base converter: dispatches · Routes into a converter implementation
- Base converter → Learned rounding: augments · Optimization layer for lower error
- Base converter → MXFP8 conv: specializes · MXFP8-specific conversion path
- Base converter → NVFP4 conv: specializes · NVFP4-specific conversion path
- Pipeline → FP8: selects · Chooses the FP8 encoder when requested
- Pipeline → INT8: selects · Chooses the INT8 encoder when requested
- Pipeline → MXFP8: selects · Chooses the MXFP8 encoder when requested
- Pipeline → NVFP4: selects · Chooses the NVFP4 encoder when requested
- Pipeline → Hybrid MXFP8: selects · Uses mixed-format MXFP8 strategy for layer-specific layouts
- Pipeline → Migration: migrates · Handles legacy metadata and layout compatibility
- Pipeline → Comfy quant: writes · Attaches ComfyUI-compatible metadata and output structure
- Comfy quant → Comfy float: depends on · Uses tensor compatibility shims
- Comfy quant → Quant ops: depends on · Uses quantized op shims
- Comfy quant → INT8 kernels: depends on · Uses INT8 runtime kernels when available
- Pipeline → Pinned transfer: optimizes · Uses pinned transfer for constrained memory paths
- Functional tests → Pipeline: validates · Functional end-to-end coverage
- CLI tests → CLI: validates · Checks CLI consistency and mapping
- OOM recovery → Loader: validates · Exercises low-memory and recovery behavior
- Hybrid tests → Hybrid MXFP8: validates · Covers hybrid format behavior
