// UI entries (training form + Generate page) for the models this package // registers in AI_TOOLKIT_MODELS. Loaded at runtime by the UI, not bundled: // see ui/src/extensions/README.md for the convention and the allowed imports. import Link from "next/link"; import type { CustomModelOption, ModelArch } from "@/app/jobs/new/options"; import type { JobConfig } from "@/types"; import { defaultSampleConfig, defaultIdeogramSamplesConfig, } from "@/helpers/defaultSamples"; const defaultNameOrPath = ""; const defaultLinearRank = 32; // Qwen-Image-2.1 and its turbo distill share the RGBA VAE, so both entries // carry this option const qwenImage21TransparencyOption: CustomModelOption[] = [ { type: "checkbox", label: "Transparency (RGBA)", getValue: (config: JobConfig) => config?.config?.process?.[0]?.model?.model_kwargs?.rgba ?? false, onChange: ( value: boolean, config: JobConfig, setJobConfig: (value: any, key: string) => void, ) => { const kwargs = { ...(config?.config?.process?.[0]?.model?.model_kwargs ?? {}), }; if (value) { kwargs.rgba = true; } else { delete kwargs.rgba; } setJobConfig(kwargs, "config.process[0].model.model_kwargs"); }, doc: { title: "Transparency (RGBA)", description: (

This model's VAE is natively RGBA, so alpha can be carried end to end. When on, dataset images and reference images load with their alpha channel, the VAE encodes all four channels, and samples are saved as PNGs with their transparency intact.

Images with no alpha of their own get a fully opaque one, so a mixed dataset is fine. Turn this off to train and sample flat RGB: alpha is dropped on the way in and added back as opaque.

Changing this re-caches latents, and it cannot be combined with a dataset using alpha_mask, which consumes the alpha channel as a loss mask instead.

), }, }, ]; export const AI_TOOLKIT_UI_MODELS: ModelArch[] = [ { name: "anima", label: "Anima", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "circlestone-labs/Anima-Base-v1.0-Diffusers", defaultNameOrPath, ], "config.process[0].model.quantize": [false, false], "config.process[0].model.quantize_te": [false, false], "config.process[0].model.qtype": ["", "qfloat8"], "config.process[0].model.qtype_te": ["", "qfloat8"], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].sample.neg": [ "worst quality, low quality, score_1, score_2, score_3, blurry, jpeg artifacts, sepia, signature, artist name", "", ], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "flux", label: "FLUX.1", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "black-forest-labs/FLUX.1-dev", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], }, disableSections: ["network.conv"], gateUrl: "https://huggingface.co/black-forest-labs/FLUX.1-dev", }, { name: "flux_kontext", label: "FLUX.1-Kontext-dev", group: "instruction", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "black-forest-labs/FLUX.1-Kontext-dev", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], }, disableSections: ["network.conv"], additionalSections: ["datasets.control_path", "sample.ctrl_img"], gateUrl: "https://huggingface.co/black-forest-labs/FLUX.1-Kontext-dev", }, { name: "flex1", label: "Flex.1", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "ostris/Flex.1-alpha", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.bypass_guidance_embedding": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], }, disableSections: ["network.conv"], }, { name: "chroma", label: "Chroma", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "lodestones/Chroma1-Base", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], }, disableSections: ["network.conv"], }, { name: "zeta_chroma", label: "Zeta Chroma", group: "experimental", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "lodestones/Zeta-Chroma/zeta-chroma-base-x0-pixel-dino-distance.safetensors", defaultNameOrPath, ], "config.process[0].model.extras_name_or_path": [ "Tongyi-MAI/Z-Image-Turbo", undefined, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], }, disableSections: ["network.conv"], }, { name: "wan21:1b", label: "Wan 2.1 (1.3B)", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", defaultNameOrPath, ], "config.process[0].model.quantize": [false, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [41, 1], "config.process[0].sample.fps": [16, 1], "config.process[0].datasets[x].fps": [16, undefined], }, disableSections: ["network.conv"], additionalSections: [ "datasets.num_frames", "model.low_vram", "datasets.auto_frame_count", ], }, { name: "wan21_i2v:14b480p", label: "Wan 2.1 I2V (14B-480P)", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Wan-AI/Wan2.1-I2V-14B-480P-Diffusers", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [41, 1], "config.process[0].sample.fps": [16, 1], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].datasets[x].fps": [16, undefined], }, disableSections: ["network.conv"], additionalSections: [ "sample.ctrl_img", "datasets.num_frames", "model.low_vram", "datasets.auto_frame_count", ], }, { name: "wan21_i2v:14b", label: "Wan 2.1 I2V (14B-720P)", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Wan-AI/Wan2.1-I2V-14B-720P-Diffusers", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [41, 1], "config.process[0].sample.fps": [16, 1], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].datasets[x].fps": [16, undefined], }, disableSections: ["network.conv"], additionalSections: [ "sample.ctrl_img", "datasets.num_frames", "model.low_vram", "datasets.auto_frame_count", ], }, { name: "wan21:14b", label: "Wan 2.1 (14B)", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Wan-AI/Wan2.1-T2V-14B-Diffusers", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [41, 1], "config.process[0].sample.fps": [16, 1], "config.process[0].datasets[x].fps": [16, undefined], }, disableSections: ["network.conv"], additionalSections: [ "datasets.num_frames", "model.low_vram", "datasets.auto_frame_count", ], }, { name: "wan22_14b:t2v", label: "Wan 2.2 (14B)", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "ai-toolkit/Wan2.2-T2V-A14B-Diffusers-bf16", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [41, 1], "config.process[0].sample.fps": [16, 1], "config.process[0].model.low_vram": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].datasets[x].fps": [16, undefined], "config.process[0].model.model_kwargs": [ { train_high_noise: true, train_low_noise: true, }, {}, ], }, disableSections: ["network.conv"], additionalSections: [ "datasets.num_frames", "model.low_vram", "model.multistage", "model.layer_offloading", "datasets.auto_frame_count", ], accuracyRecoveryAdapters: { // '3 bit with ARA': 'uint3|ostris/accuracy_recovery_adapters/wan22_14b_t2i_torchao_uint3.safetensors', "4 bit with ARA": "uint4|ostris/accuracy_recovery_adapters/wan22_14b_t2i_torchao_uint4.safetensors", }, }, { name: "wan22_14b_i2v", label: "Wan 2.2 I2V (14B)", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "ai-toolkit/Wan2.2-I2V-A14B-Diffusers-bf16", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [41, 1], "config.process[0].sample.fps": [16, 1], "config.process[0].model.low_vram": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].datasets[x].fps": [16, undefined], "config.process[0].model.model_kwargs": [ { train_high_noise: true, train_low_noise: true, }, {}, ], }, disableSections: ["network.conv"], additionalSections: [ "sample.ctrl_img", "datasets.num_frames", "model.low_vram", "model.multistage", "model.layer_offloading", "datasets.auto_frame_count", ], accuracyRecoveryAdapters: { "4 bit with ARA": "uint4|ostris/accuracy_recovery_adapters/wan22_14b_i2v_torchao_uint4.safetensors", }, }, { name: "wan22_5b", label: "Wan 2.2 TI2V (5B)", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Wan-AI/Wan2.2-TI2V-5B-Diffusers", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [121, 1], "config.process[0].sample.fps": [24, 1], "config.process[0].sample.width": [768, 1024], "config.process[0].sample.height": [768, 1024], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].datasets[x].do_i2v": [true, undefined], "config.process[0].datasets[x].fps": [24, undefined], }, disableSections: ["network.conv"], additionalSections: [ "sample.ctrl_img", "datasets.num_frames", "model.low_vram", "datasets.do_i2v", "datasets.auto_frame_count", ], }, { name: "lumina2", label: "Lumina2", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Alpha-VLLM/Lumina-Image-2.0", defaultNameOrPath, ], "config.process[0].model.quantize": [false, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], }, disableSections: ["network.conv"], }, { name: "qwen_image", label: "Qwen-Image", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Qwen/Qwen-Image", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], accuracyRecoveryAdapters: { "3 bit with ARA": "uint3|ostris/accuracy_recovery_adapters/qwen_image_torchao_uint3.safetensors", }, }, { name: "qwen_image:2512", label: "Qwen-Image-2512", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Qwen/Qwen-Image-2512", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], // Training an ARA now, the other one will not work accuracyRecoveryAdapters: { "3 bit with ARA": "uint3|ostris/accuracy_recovery_adapters/qwen_image_2512_torchao_uint3.safetensors", "4 bit with ARA": "uint4|ostris/accuracy_recovery_adapters/qwen_image_2512_torchao_uint4.safetensors", }, }, { name: "qwen_image_edit", label: "Qwen-Image-Edit", group: "instruction", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Qwen/Qwen-Image-Edit", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], }, disableSections: ["network.conv"], additionalSections: [ "datasets.control_path", "sample.ctrl_img", "model.low_vram", "model.layer_offloading", ], accuracyRecoveryAdapters: { "3 bit with ARA": "uint3|ostris/accuracy_recovery_adapters/qwen_image_edit_torchao_uint3.safetensors", }, }, { name: "qwen_image_edit_plus", label: "Qwen-Image-Edit-2509", group: "instruction", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Qwen/Qwen-Image-Edit-2509", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], "config.process[0].model.model_kwargs": [ { match_target_res: false, }, {}, ], }, disableSections: ["network.conv", "train.unload_text_encoder"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", "model.qie.match_target_res", ], accuracyRecoveryAdapters: { "3 bit with ARA": "uint3|ostris/accuracy_recovery_adapters/qwen_image_edit_2509_torchao_uint3.safetensors", }, }, { name: "qwen_image_edit_plus:2511", label: "Qwen-Image-Edit-2511", group: "instruction", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Qwen/Qwen-Image-Edit-2511", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], "config.process[0].model.model_kwargs": [ { match_target_res: false, }, {}, ], }, disableSections: ["network.conv", "train.unload_text_encoder"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", "model.qie.match_target_res", ], accuracyRecoveryAdapters: { "3 bit with ARA": "uint3|ostris/accuracy_recovery_adapters/qwen_image_edit_2511_torchao_uint3.safetensors", }, }, { name: "qwen_image_2", label: "Qwen-Image-2.1", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Comfy-Org/Qwen-Image-2.1", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["shift", "sigmoid"], // the Comfy-Org weights are pre-quantized int8 convrot; these qtypes // match the checkpoints exactly, so the load is unchanged. Picking a // different qtype re-quantizes layer by layer into that format. "config.process[0].model.qtype": ["convrot8", "qfloat8"], "config.process[0].model.qtype_te": ["convrot8", "qfloat8"], "config.process[0].sample.guidance_scale": [3.0, 4.0], // the VAE is RGBA: images load, encode and decode with their alpha "config.process[0].model.model_kwargs": [ { rgba: false, }, {}, ], }, disableSections: ["network.conv", "train.unload_text_encoder"], // one model: it edits when the dataset has control paths, and is plain // text to image when it does not additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", ], customModelSelectOptions: qwenImage21TransparencyOption, }, { name: "qwen_image_2:turbo", label: "Qwen-Image-2.1 Turbo (w/ Training Adapter)", generateNameOverride: "Qwen-Image-2.1 Turbo", group: "image", defaults: { // default updates when [selected, unselected] in the UI // the turbo weight file in the repack (text encoder and VAE come from // the same repack); model_kwargs.turbo selects the turbo schedule "config.process[0].model.name_or_path": [ "Comfy-Org/Qwen-Image-2.1/diffusion_models/qwen_image_2.1_turbo_int8_convrot.safetensors", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["shift", "sigmoid"], "config.process[0].model.qtype": ["convrot8", "qfloat8"], "config.process[0].model.qtype_te": ["convrot8", "qfloat8"], // training adapter: live on the DiT while training, off while sampling "config.process[0].model.assistant_lora_path": [ 'ostris/qwen_image_2_turbo_training_adapter/qwen_image_2_turbo_training_adapter_v1.safetensors', undefined ], // the turbo checkpoint samples with its own fixed 8-step schedule at // CFG 1; the step count here is informational "config.process[0].sample.guidance_scale": [1.0, 4.0], "config.process[0].sample.sample_steps": [8, 25], "config.process[0].model.model_kwargs": [ { turbo: true, rgba: false, }, {}, ], }, disableSections: ["network.conv", "train.unload_text_encoder"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", "model.assistant_lora_path", ], customModelSelectOptions: qwenImage21TransparencyOption, }, { name: "ming_image", label: "Ming-Image 0.1 Design (w/ Training Adapter)", group: "image", defaults: { // default updates when [selected, unselected] in the UI // the ComfyUI repack (local copies in the comfy models folder win over // the download); the vendor repo or a fine-tune here loads as named "config.process[0].model.name_or_path": [ "Comfy-Org/Ming-Image", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], // the text encoder is a 16B MoE (34 GB in bf16): quantize it, and // prefer caching text embeddings so it can be unloaded before training "config.process[0].model.quantize_te": [true, false], // the ComfyUI repack ships int8 convrot for both; these qtypes match it // exactly, so the files attach as-is (another qtype re-quantizes) "config.process[0].model.qtype": ["convrot8", "qfloat8"], "config.process[0].model.qtype_te": ["convrot8", "qfloat8"], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["shift", "sigmoid"], // training adapter: merged in for training, inverted for sampling "config.process[0].model.assistant_lora_path": [ "ostris/ming_image_training_adapter/ming_image_01_design_training_adapter_v1.safetensors", undefined, ], // recommended: 12 steps, no guidance (the negative is zero conditioning) "config.process[0].sample.guidance_scale": [1.0, 4.0], "config.process[0].sample.sample_steps": [12, 25], // the VAE is RGBA: images load, encode and decode with their alpha "config.process[0].model.model_kwargs": [ { rgba: false, }, {}, ], }, disableSections: ["network.conv"], // the model also edits (a dataset control path + reference image); the // UI does not expose that yet additionalSections: [ "model.low_vram", "model.layer_offloading", "model.assistant_lora_path", ], customModelSelectOptions: [ { type: "checkbox", label: "Transparency (RGBA)", getValue: (config: JobConfig) => config?.config?.process?.[0]?.model?.model_kwargs?.rgba ?? false, onChange: ( value: boolean, config: JobConfig, setJobConfig: (value: any, key: string) => void, ) => { const kwargs = { ...(config?.config?.process?.[0]?.model?.model_kwargs ?? {}), }; if (value) { kwargs.rgba = true; } else { delete kwargs.rgba; } setJobConfig(kwargs, "config.process[0].model.model_kwargs"); }, doc: { title: "Transparency (RGBA)", description: (

Ming-Image's VAE is natively RGBA, so alpha can be carried end to end. When on, dataset images and reference images load with their alpha channel, the VAE encodes all four channels, and samples are saved as PNGs with their transparency intact.

Images with no alpha of their own get a fully opaque one, so a mixed dataset is fine. Turn this off to train and sample flat RGB: alpha is dropped on the way in and added back as opaque.

To sample a transparent image, start the prompt with one of the model's fixed trigger phrases, e.g.{" "} RGBA, 4-channel, transparent background or{" "} 带透明通道,4通道RGBA图像, and sample at 2048x2048: the same prompts come out opaque at 1024.

Changing this re-caches latents, and it cannot be combined with a dataset using alpha_mask, which consumes the alpha channel as a loss mask instead.

), }, }, ], }, { name: "hidream", label: "HiDream", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "HiDream-ai/HiDream-I1-Full", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.lr": [0.0002, 0.0001], "config.process[0].train.timestep_type": ["shift", "sigmoid"], "config.process[0].network.network_kwargs.ignore_if_contains": [ ["ff_i.experts", "ff_i.gate"], [], ], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram"], accuracyRecoveryAdapters: { "3 bit with ARA": "uint3|ostris/accuracy_recovery_adapters/hidream_i1_full_torchao_uint3.safetensors", }, }, { name: "hidream_e1", label: "HiDream E1", group: "instruction", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "HiDream-ai/HiDream-E1-1", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.lr": [0.0001, 0.0001], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].network.network_kwargs.ignore_if_contains": [ ["ff_i.experts", "ff_i.gate"], [], ], }, disableSections: ["network.conv"], additionalSections: [ "datasets.control_path", "sample.ctrl_img", "model.low_vram", ], }, { name: "sdxl", label: "SDXL", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "stabilityai/stable-diffusion-xl-base-1.0", defaultNameOrPath, ], "config.process[0].model.quantize": [false, false], "config.process[0].model.quantize_te": [false, false], "config.process[0].sample.sampler": ["ddpm", "flowmatch"], "config.process[0].train.noise_scheduler": ["ddpm", "flowmatch"], "config.process[0].sample.guidance_scale": [6, 4], }, disableSections: ["model.quantize", "train.timestep_type"], }, { name: "sd15", label: "SD 1.5", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "stable-diffusion-v1-5/stable-diffusion-v1-5", defaultNameOrPath, ], "config.process[0].sample.sampler": ["ddpm", "flowmatch"], "config.process[0].train.noise_scheduler": ["ddpm", "flowmatch"], "config.process[0].sample.width": [512, 1024], "config.process[0].sample.height": [512, 1024], "config.process[0].sample.guidance_scale": [6, 4], }, disableSections: ["model.quantize", "train.timestep_type"], }, { name: "omnigen2", label: "OmniGen2", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "OmniGen2/OmniGen2", defaultNameOrPath, ], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].model.quantize": [false, false], "config.process[0].model.quantize_te": [true, false], }, disableSections: ["network.conv"], additionalSections: ["datasets.control_path", "sample.ctrl_img"], }, { name: "flux2", label: "FLUX.2", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "black-forest-labs/FLUX.2-dev", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], "config.process[0].model.model_kwargs": [ { match_target_res: false, }, {}, ], }, disableSections: ["network.conv"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", "model.qie.match_target_res", ], gateUrl: "https://huggingface.co/black-forest-labs/FLUX.2-dev", }, { name: "zimage:turbo", label: "Z-Image Turbo (w/ Training Adapter)", generateNameOverride: "Z-Image Turbo", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Tongyi-MAI/Z-Image-Turbo", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], "config.process[0].model.assistant_lora_path": [ "ostris/zimage_turbo_training_adapter/zimage_turbo_training_adapter_v2.safetensors", undefined, ], "config.process[0].sample.guidance_scale": [1, 4], "config.process[0].sample.sample_steps": [9, 25], }, disableSections: ["network.conv"], additionalSections: [ "model.low_vram", "model.layer_offloading", "model.assistant_lora_path", ], }, { name: "zimage", label: "Z-Image", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Tongyi-MAI/Z-Image", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], "config.process[0].sample.sample_steps": [30, 25], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "zimage:deturbo", label: "Z-Image De-Turbo (De-Distilled)", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "ostris/Z-Image-De-Turbo", defaultNameOrPath, ], "config.process[0].model.extras_name_or_path": [ "Tongyi-MAI/Z-Image-Turbo", undefined, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], "config.process[0].sample.guidance_scale": [3, 4], "config.process[0].sample.sample_steps": [25, 25], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "minimax_h3", label: "MiniMax-H3", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Comfy-Org/MiniMax-H3", defaultNameOrPath, ], // the Comfy-Org weights are pre-quantized (int8 convrot DiT, nvfp4 TE); these // qtypes match the checkpoints exactly, so the load is unchanged. Picking a // different qtype re-quantizes layer by layer into that format. "config.process[0].model.quantize": [true, false], "config.process[0].model.qtype": ["convrot8", "qfloat8"], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.qtype_te": ["nvfp4", "qfloat8"], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.cache_text_embeddings": [true, false], "config.process[0].model.assistant_lora_path": [ "ostris/minimax_h3_training_adapter/minimax_h3_training_adapter_v3.safetensors", undefined, ], "config.process[0].network.linear": [16, defaultLinearRank], "config.process[0].network.linear_alpha": [16, defaultLinearRank], "config.process[0].network.network_kwargs.ignore_if_contains": [ ["adaln_proj"], [], ], "config.process[0].sample.num_frames": [107, 1], "config.process[0].sample.fps": [24, 1], "config.process[0].sample.width": [768, 1024], "config.process[0].sample.height": [768, 1024], "config.process[0].sample.guidance_scale": [1, 4], "config.process[0].sample.sample_steps": [28, 25], "config.process[0].train.audio_loss_multiplier": [1.0, undefined], "config.process[0].train.timestep_type": ["shift", "sigmoid"], "config.process[0].datasets[x].do_i2v": [false, undefined], "config.process[0].datasets[x].do_audio": [true, undefined], "config.process[0].datasets[x].cache_latents_to_disk": [true, false], "config.process[0].datasets[x].fps": [24, undefined], "config.process[0].datasets[x].num_frames": [39, undefined], "config.process[0].datasets[x].auto_frame_count": [true, undefined], }, disableSections: ["network.conv"], additionalSections: [ "sample.ctrl_img", "datasets.num_frames", "model.layer_offloading", "model.low_vram", "datasets.do_audio", "datasets.audio_normalize", "datasets.audio_preserve_pitch", "datasets.do_i2v", "train.audio_loss_multiplier", "datasets.auto_frame_count", "model.assistant_lora_path", ], customModelSelectOptions: [ { label: "Distillation Handling Method", options: [ { value: "cg", label: "Contrastive Guidance" }, { value: "ta", label: "Training Adapter (default)" }, { value: "both", label: "Contrastive Guidance + Training Adapter", }, { value: "none", label: "None" }, ], getValue: (config: JobConfig) => { const assistantLoraPath = config?.config?.process?.[0]?.model?.assistant_lora_path; const hasAssistantLoraPath = assistantLoraPath && assistantLoraPath.trim() !== ""; const hasContrastiveGuidance = config?.config?.process?.[0]?.train?.do_guidance_loss; if (hasAssistantLoraPath && hasContrastiveGuidance) { return "both"; } if (hasAssistantLoraPath) { return "ta"; } if (hasContrastiveGuidance) { return "cg"; } return "none"; }, onChange: ( value: string, config: JobConfig, setJobConfig: (value: any, key: string) => void, ) => { if (value === "cg") { setJobConfig(true, "config.process[0].train.do_guidance_loss"); setJobConfig( undefined, "config.process[0].model.assistant_lora_path", ); if (!config?.config?.process?.[0]?.train?.guidance_loss_target) { setJobConfig(3.5, "config.process[0].train.guidance_loss_target"); } } else if (value === "ta") { setJobConfig(undefined, "config.process[0].train.do_guidance_loss"); setJobConfig( undefined, "config.process[0].train.guidance_loss_target", ); setJobConfig( "ostris/minimax_h3_training_adapter/minimax_h3_training_adapter_v3.safetensors", "config.process[0].model.assistant_lora_path", ); } else if (value === "both") { setJobConfig(true, "config.process[0].train.do_guidance_loss"); setJobConfig( "ostris/minimax_h3_training_adapter/minimax_h3_training_adapter_v3.safetensors", "config.process[0].model.assistant_lora_path", ); if (!config?.config?.process?.[0]?.train?.guidance_loss_target) { setJobConfig(3.5, "config.process[0].train.guidance_loss_target"); } } else if (value === "none") { setJobConfig(undefined, "config.process[0].train.do_guidance_loss"); setJobConfig( undefined, "config.process[0].train.guidance_loss_target", ); setJobConfig( undefined, "config.process[0].model.assistant_lora_path", ); } }, doc: { title: "MiniMax-H3 Distillation Handling", description: (
MiniMax H3 is a guidance distilled model, so training on it directly will make the guidance distillation break down. There are two different ways to train on this model without breaking the guidance distillation: Contrastive Guidance and Training Adapter. Both have their pros and cons. The adapter is faster, but will still break down over a long run. Contrastive Guidance is slower, but is less likely to break down.
), }, }, ], modelNotes: (

Weights load from the{" "} Models Folder Path {" "} set in settings. Anything missing is downloaded there from{" "} Comfy-Org/MiniMax-H3 on first load (~43GB total). Files used:

          {`/
├── diffusion_models/
│   └── minimax_h3_fl2va_pruned_int8_convrot.safetensors
├── text_encoders/
│   └── qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors
└── vae/
    ├── minimax_h3_video_vae_fp16.safetensors
    └── minimax_h3_audio_vae_fp32.safetensors`}
        

The checkpoints are pre-quantized and load directly: int8 ConvRot DiT (~21GB) and nvfp4 Qwen3-VL text encoder (~16GB). The default qtypes ( convrot8 / nvfp4) match the files exactly, so nothing is re-quantized on load. Picking a different quantization re-quantizes the pre-quantized layers into that format, one layer at a time.

Supports t2v and first-frame i2v (ctrl img / i2v datasets) with joint audio. The model is guidance-distilled — keep guidance scale at 1. Video is fixed 24 fps and frame counts snap down to the 17n+5 grid (5, 22, 39, 56, ..., 107, 124 ≈ 5s). Image datasets (num_frames 1) train as single frames, and a sample with num_frames 1 renders a single image.

), }, { name: "minimax_h3_ref2va", label: "MiniMax-H3 Ref2V", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Comfy-Org/MiniMax-H3", defaultNameOrPath, ], // pre-quantized weights: matching qtypes keep the load unchanged "config.process[0].model.quantize": [true, false], "config.process[0].model.qtype": ["convrot8", "qfloat8"], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.qtype_te": ["nvfp4", "qfloat8"], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.cache_text_embeddings": [true, false], "config.process[0].model.assistant_lora_path": [ "ostris/minimax_h3_training_adapter/minimax_h3_ref2va_training_adapter_v2.safetensors", undefined, ], "config.process[0].network.linear": [16, defaultLinearRank], "config.process[0].network.linear_alpha": [16, defaultLinearRank], "config.process[0].network.network_kwargs.ignore_if_contains": [ ["adaln_proj"], [], ], "config.process[0].sample.num_frames": [107, 1], "config.process[0].sample.fps": [24, 1], "config.process[0].sample.width": [768, 1024], "config.process[0].sample.height": [768, 1024], "config.process[0].sample.guidance_scale": [1, 4], "config.process[0].sample.sample_steps": [28, 25], "config.process[0].train.audio_loss_multiplier": [1.0, undefined], "config.process[0].train.timestep_type": ["shift", "sigmoid"], "config.process[0].datasets[x].do_audio": [true, undefined], "config.process[0].datasets[x].cache_latents_to_disk": [true, false], "config.process[0].datasets[x].fps": [24, undefined], "config.process[0].datasets[x].num_frames": [39, undefined], "config.process[0].datasets[x].auto_frame_count": [true, undefined], }, disableSections: ["network.conv"], additionalSections: [ "sample.multi_ctrl_imgs", "datasets.multi_control_paths", "datasets.num_frames", "model.layer_offloading", "model.low_vram", "datasets.do_audio", "datasets.audio_normalize", "datasets.audio_preserve_pitch", "train.audio_loss_multiplier", "datasets.auto_frame_count", "model.assistant_lora_path", ], customModelSelectOptions: [ { label: "Distillation Handling Method", options: [ { value: "cg", label: "Contrastive Guidance" }, { value: "ta", label: "Training Adapter (default)" }, { value: "both", label: "Contrastive Guidance + Training Adapter", }, { value: "dopsd", label: "D-OPSD" }, { value: "none", label: "None" }, ], getValue: (config: JobConfig) => { if (config?.config?.process?.[0]?.model?.model_kwargs?.dopsd) { return "dopsd"; } const assistantLoraPath = config?.config?.process?.[0]?.model?.assistant_lora_path; const hasAssistantLoraPath = assistantLoraPath && assistantLoraPath.trim() !== ""; const hasContrastiveGuidance = config?.config?.process?.[0]?.train?.do_guidance_loss; if (hasAssistantLoraPath && hasContrastiveGuidance) { return "both"; } if (hasAssistantLoraPath) { return "ta"; } if (hasContrastiveGuidance) { return "cg"; } return "none"; }, onChange: ( value: string, config: JobConfig, setJobConfig: (value: any, key: string) => void, ) => { const kwargs = { ...(config?.config?.process?.[0]?.model?.model_kwargs ?? {}), }; if (value === "dopsd") { kwargs.dopsd = true; kwargs.dopsd_bleed_strength = 1.0; } else { delete kwargs.dopsd; delete kwargs.dopsd_bleed_strength; } setJobConfig(kwargs, "config.process[0].model.model_kwargs"); if (value === "cg") { setJobConfig(true, "config.process[0].train.do_guidance_loss"); setJobConfig( undefined, "config.process[0].model.assistant_lora_path", ); if (!config?.config?.process?.[0]?.train?.guidance_loss_target) { setJobConfig(3.5, "config.process[0].train.guidance_loss_target"); } } else if (value === "ta") { setJobConfig(undefined, "config.process[0].train.do_guidance_loss"); setJobConfig( undefined, "config.process[0].train.guidance_loss_target", ); setJobConfig( "ostris/minimax_h3_training_adapter/minimax_h3_ref2va_training_adapter_v2.safetensors", "config.process[0].model.assistant_lora_path", ); } else if (value === "both") { setJobConfig(true, "config.process[0].train.do_guidance_loss"); setJobConfig( "ostris/minimax_h3_training_adapter/minimax_h3_ref2va_training_adapter_v2.safetensors", "config.process[0].model.assistant_lora_path", ); if (!config?.config?.process?.[0]?.train?.guidance_loss_target) { setJobConfig(3.5, "config.process[0].train.guidance_loss_target"); } } else if (value === "dopsd" || value === "none") { setJobConfig(undefined, "config.process[0].train.do_guidance_loss"); setJobConfig( undefined, "config.process[0].train.guidance_loss_target", ); setJobConfig( undefined, "config.process[0].model.assistant_lora_path", ); } }, doc: { title: "MiniMax-H3 Distillation Handling", description: (
MiniMax H3 is a guidance distilled model, so training on it directly will make the guidance distillation break down. There are two different ways to train on this model without breaking the guidance distillation: Contrastive Guidance and Training Adapter. Both have their pros and cons. The adapter is faster, but will still break down over a long run. Contrastive Guidance is slower, but is less likely to break down. D-OPSD instead self-distills: a no-grad teacher pass sees the training target as its own reference and its prediction becomes the training target for a reference-free pass, baking the reference into your trigger word (or the caption itself when no trigger word is set). Re-caches latents with pixel tensors.
), }, }, { label: "Image Reference Presentation", options: [ { value: "picture", label: "Picture (default)" }, { value: "video", label: "Static video clip" }, ], getValue: (config: JobConfig) => { return config?.config?.process?.[0]?.model?.model_kwargs ?.image_refs_as_video ? "video" : "picture"; }, onChange: ( value: string, config: JobConfig, setJobConfig: (value: any, key: string) => void, ) => { const kwargs = { ...(config?.config?.process?.[0]?.model?.model_kwargs ?? {}), }; if (value === "video") { kwargs.image_refs_as_video = true; } else { delete kwargs.image_refs_as_video; delete kwargs.image_ref_video_frames; } setJobConfig(kwargs, "config.process[0].model.model_kwargs"); }, doc: { title: "MiniMax-H3 Image Reference Presentation", description: (

How still-image references (dataset control images and sample ctrl images) are shown to the model. Video references always use the video path.

Picture: the native ref2va recipe — a single-frame reference block, shown to Qwen3-VL as a{" "} <Picture i> block, scaled down only.

Static video clip: the image is held for 5 frames (2 latent frames) and routed through the exact path a reference VIDEO takes — video sizing (matched to the target's pixel area), multi-frame reference block,{" "} <Video k> timestamped presentation. Use this when training on image references but sampling with video references, so the LoRA learns the pathway it will be used through. Adds a handful of rows per reference. Frame count is adjustable with model_kwargs.image_ref_video_frames{" "} (17n+5). Changing this re-caches text embeddings.

), }, }, ], modelNotes: (

Reference-to-video: control images and videos condition the output as subject/style references (never as a first frame). References keep their own aspect and are matched to the target's pixel area (images scale down only, never up; a same-aspect video reference is exactly the target size). Each rides into the packed sequence as a reference block, and is also shown to the Qwen3-VL conditioner as a{" "} <Picture i> (image) or timestamped{" "} <Video k> (video) vision block. Training references come from the dataset control path(s); sampling uses the sample ctrl images — always as references. The Image Reference Presentation option can route still images through the video-reference path as short static clips.

Weights load like MiniMax-H3 (see that arch's notes) from the{" "} Models Folder Path , using{" "} diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors {" "} — the ref2va partition of the same release; text encoder and VAEs are shared with the fl2va arch. Everything else (pre-quantized load, 24 fps, 17n+5 frame grid, guidance scale 1, single-image mode) matches MiniMax-H3.

), }, { name: "minimax_h3_vsa", label: "FastH3 8-Step V2", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "FastVideo/FastVideo-FastH3-Comfy", defaultNameOrPath, ], // pre-quantized weights: matching qtypes keep the load unchanged "config.process[0].model.quantize": [true, false], "config.process[0].model.qtype": ["convrot8", "qfloat8"], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.qtype_te": ["nvfp4", "qfloat8"], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.cache_text_embeddings": [true, false], "config.process[0].model.assistant_lora_path": [ "ostris/minimax_h3_training_adapter/fastvideo_fasth3_8step_v2_training_adapter_v1.safetensors", undefined, ], "config.process[0].network.linear": [16, defaultLinearRank], "config.process[0].network.linear_alpha": [16, defaultLinearRank], "config.process[0].network.network_kwargs.ignore_if_contains": [ ["adaln_proj"], [], ], "config.process[0].sample.num_frames": [107, 1], "config.process[0].sample.fps": [24, 1], "config.process[0].sample.width": [768, 1024], "config.process[0].sample.height": [768, 1024], "config.process[0].sample.guidance_scale": [1, 4], "config.process[0].sample.sample_steps": [8, 25], "config.process[0].train.audio_loss_multiplier": [1.0, undefined], "config.process[0].train.timestep_type": ["shift", "sigmoid"], "config.process[0].datasets[x].do_audio": [true, undefined], "config.process[0].datasets[x].cache_latents_to_disk": [true, false], "config.process[0].datasets[x].fps": [24, undefined], "config.process[0].datasets[x].num_frames": [39, undefined], "config.process[0].datasets[x].auto_frame_count": [true, undefined], }, disableSections: ["network.conv"], additionalSections: [ "datasets.num_frames", "model.layer_offloading", "model.low_vram", "datasets.do_audio", "datasets.audio_normalize", "datasets.audio_preserve_pitch", "train.audio_loss_multiplier", "datasets.auto_frame_count", "model.assistant_lora_path", ], customModelSelectOptions: [ { label: "Distillation Handling Method", options: [ { value: "ta", label: "Training Adapter (default)" }, { value: "none", label: "None" }, ], getValue: (config: JobConfig) => { const assistantLoraPath = config?.config?.process?.[0]?.model?.assistant_lora_path; return assistantLoraPath && assistantLoraPath.trim() !== "" ? "ta" : "none"; }, onChange: ( value: string, config: JobConfig, setJobConfig: (value: any, key: string) => void, ) => { setJobConfig( value === "ta" ? "ostris/minimax_h3_training_adapter/fastvideo_fasth3_8step_v2_training_adapter_v1.safetensors" : undefined, "config.process[0].model.assistant_lora_path", ); }, doc: { title: "FastH3 Distillation Handling", description: (
FastH3 is a step-distilled model, so training on it directly will make the distillation break down. The Training Adapter (the MiniMax-H3 adapter) absorbs that drift during training and is removed at inference, but can still break down over a long run.
), }, }, ], modelNotes: (

FastVideo's FastH3 8-Step V2: MiniMax-H3 DMD2-distilled to 8 steps with Video Sparse Attention (80% sparsity). Text-to-video with joint audio only — no first-frame or reference conditioning.

Weights load from the{" "} Models Folder Path {" "} set in settings. Anything missing is downloaded there from{" "} FastVideo/FastVideo-FastH3-Comfy on first load. The text encoder and VAEs are the same files MiniMax-H3 uses, so an existing MiniMax-H3 setup only needs the new DiT. Files used:

          {`/
├── diffusion_models/
│   └── fastvideo_fasth3_8step_v2_pruned_int8_convrot.safetensors
├── text_encoders/
│   └── qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors
└── vae/
    ├── minimax_h3_video_vae_fp16.safetensors
    └── minimax_h3_audio_vae_fp32.safetensors`}
        

Sample with 8 steps and guidance scale 1 (the trained schedule). Video is fixed 24 fps and frame counts snap down to the 17n+5 grid.

), }, { name: "ltx2", label: "LTX-2", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Lightricks/LTX-2", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [121, 1], "config.process[0].sample.fps": [24, 1], "config.process[0].sample.width": [768, 1024], "config.process[0].sample.height": [768, 1024], "config.process[0].train.audio_loss_multiplier": [1.0, undefined], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].datasets[x].do_i2v": [false, undefined], "config.process[0].datasets[x].do_audio": [true, undefined], "config.process[0].datasets[x].fps": [24, undefined], "config.process[0].datasets[x].auto_frame_count": [false, undefined], }, disableSections: ["network.conv"], additionalSections: [ "sample.ctrl_img", "datasets.num_frames", "model.layer_offloading", "model.low_vram", "datasets.do_audio", "datasets.audio_normalize", "datasets.audio_preserve_pitch", "datasets.do_i2v", "train.audio_loss_multiplier", "datasets.auto_frame_count", ], }, { name: "ltx2.3", label: "LTX-2.3", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "Lightricks/LTX-2.3/ltx-2.3-22b-dev.safetensors", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [121, 1], "config.process[0].sample.fps": [24, 1], "config.process[0].sample.width": [768, 1024], "config.process[0].sample.height": [768, 1024], "config.process[0].train.audio_loss_multiplier": [1.0, undefined], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].datasets[x].cache_latents_to_disk": [true, false], "config.process[0].datasets[x].do_i2v": [false, undefined], "config.process[0].datasets[x].do_audio": [true, undefined], "config.process[0].datasets[x].fps": [24, undefined], "config.process[0].datasets[x].auto_frame_count": [false, undefined], }, disableSections: ["network.conv"], additionalSections: [ "sample.ctrl_img", "datasets.num_frames", "model.layer_offloading", "model.low_vram", "datasets.do_audio", "datasets.audio_normalize", "datasets.audio_preserve_pitch", "datasets.do_i2v", "train.audio_loss_multiplier", "datasets.auto_frame_count", ], }, { name: "ltx2.5", label: "LTX-2.5", gateUrl: "https://huggingface.co/Lightricks/LTX-2.5", group: "video", isVideoModel: true, defaults: { // default updates when [selected, unselected] in the UI // comfy-style split files resolve from/download to the models folder; // the int8 ConvRot dev transformer is the default "config.process[0].model.name_or_path": [ "Lightricks/LTX-2.5", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.qtype": ["convrot8", "qfloat8"], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.qtype_te": ["convrot8", "qfloat8"], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.num_frames": [121, 1], "config.process[0].sample.fps": [24, 1], "config.process[0].sample.width": [768, 1024], "config.process[0].sample.height": [768, 1024], "config.process[0].train.audio_loss_multiplier": [1.0, undefined], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].datasets[x].cache_latents_to_disk": [true, false], "config.process[0].datasets[x].do_i2v": [false, undefined], "config.process[0].datasets[x].do_audio": [true, undefined], "config.process[0].datasets[x].fps": [24, undefined], "config.process[0].datasets[x].auto_frame_count": [false, undefined], }, disableSections: ["network.conv"], additionalSections: [ "sample.ctrl_img", "datasets.num_frames", "model.layer_offloading", "model.low_vram", "datasets.do_audio", "datasets.audio_normalize", "datasets.audio_preserve_pitch", "datasets.do_i2v", "train.audio_loss_multiplier", "datasets.auto_frame_count", ], }, { name: "flux3", label: "FLUX.3 (small)", group: "image", gateUrl: "https://huggingface.co/herzogenhorn/f3-image-small", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "herzogenhorn/f3-image-small", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.qtype": ["convrot8", "qfloat8"], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.qtype_te": ["convrot8", "qfloat8"], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].sample.width": [1024, 1024], "config.process[0].sample.height": [1024, 1024], "config.process[0].sample.guidance_scale": [3.5, 4], "config.process[0].sample.sample_steps": [28, 25], "config.process[0].train.timestep_type": ["shift", "sigmoid"], "config.process[0].model.model_kwargs": [ { match_target_res: true, }, {}, ], }, disableSections: ["network.conv"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.layer_offloading", "model.low_vram", "model.qie.match_target_res", ], }, { name: "flux2_klein_4b", label: "FLUX.2-klein-base-4B", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "black-forest-labs/FLUX.2-klein-base-4B", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], "config.process[0].model.model_kwargs": [ { match_target_res: false, }, {}, ], }, disableSections: ["network.conv"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", "model.qie.match_target_res", ], }, { name: "ernie_image", label: "ERNIE-Image", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "baidu/ERNIE-Image", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "flux2_klein_9b", label: "FLUX.2-klein-base-9B", group: "image", defaults: { // default updates when [selected, unselected] in the UI "config.process[0].model.name_or_path": [ "black-forest-labs/FLUX.2-klein-base-9B", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].sample.sampler": ["flowmatch", "flowmatch"], "config.process[0].train.noise_scheduler": ["flowmatch", "flowmatch"], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].model.qtype": ["qfloat8", "qfloat8"], "config.process[0].model.model_kwargs": [ { match_target_res: false, }, {}, ], }, disableSections: ["network.conv"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", "model.qie.match_target_res", ], gateUrl: "https://huggingface.co/black-forest-labs/FLUX.2-klein-base-9B", }, { name: "nucleus_image", label: "Nucleus-Image", group: "image", defaults: { "config.process[0].model.name_or_path": [ "NucleusAI/Nucleus-Image", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.network_kwargs.ignore_if_contains": [ ["img_mlp.experts", "img_mlp.gate"], [], ], "config.process[0].network.linear": [128, defaultLinearRank], "config.process[0].network.linear_alpha": [128, defaultLinearRank], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram"], }, { name: "hidream_o1", label: "HiDream-O1", group: "image", defaults: { "config.process[0].model.name_or_path": [ "HiDream-ai/HiDream-O1-Image", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [false, false], "config.process[0].train.timestep_type": ["weighted", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].train.max_loss": [1.0, undefined], "config.process[0].network.network_kwargs.ignore_if_contains": [ ["lm_head", "patch_embed", "visual"], [], ], "config.process[0].network.transformer_only": [false, undefined], "config.process[0].sample.width": [2048, 1024], "config.process[0].sample.height": [2048, 1024], "config.process[0].model.model_kwargs": [ { noise_scale_inference: 8.0, noise_scale: 8.0, }, {}, ], }, disableSections: [ "network.conv", "model.quantize_te", "train.unload_text_encoder", ], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "zimage_l2p", label: "Z-Image L2P (pixel space)", group: "image", defaults: { "config.process[0].model.name_or_path": [ "zhen-nan/L2P/model-1k-merge.safetensors", defaultNameOrPath, ], "config.process[0].model.extras_name_or_path": [ "Tongyi-MAI/Z-Image-Turbo", undefined, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "ideogram4", label: "Ideogram4", group: "experimental", defaults: { "config.process[0].model.name_or_path": [ "ideogram-ai/ideogram-4-fp8", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], "config.process[0].sample": [ defaultIdeogramSamplesConfig, defaultSampleConfig, ], "config.process[0].model.unconditional_lora_path": [ "ostris/ideogram_4_unconditional_lora/ideogram_4_unconditional_lora_r16.safetensors", undefined, ], }, disableSections: ["network.conv"], additionalSections: [ "model.low_vram", "model.layer_offloading", "ideogram_4_prompt", "model.unconditional_lora_path", ], hasMultiLinePrompts: true, gateUrl: "https://huggingface.co/ideogram-ai/ideogram-4-fp8", }, { name: "prx_pixel", label: "PRXPixel (pixel space)", group: "image", defaults: { "config.process[0].model.name_or_path": [ "Photoroom/prxpixel-t2i", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "iris3b", label: "Iris-3B (pixel space)", group: "image", defaults: { "config.process[0].model.name_or_path": [ "speridlabs/iris-3b", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].model.qtype": ["convrot8", "qfloat8"], "config.process[0].model.qtype_te": ["convrot8", "qfloat8"], "config.process[0].train.timestep_type": ["shift", "sigmoid"], "config.process[0].sample.guidance_scale": [3, 4], "config.process[0].sample.sample_steps": [30, 25], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "krea2", label: "Krea 2 (raw)", group: "image", gateUrl: "https://huggingface.co/krea/Krea-2-Raw", defaults: { "config.process[0].model.name_or_path": [ "krea/Krea-2-Raw", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "krea2:turbo", label: "Krea 2 Turbo (w/ Training Adapter)", generateNameOverride: "Krea 2 Turbo", group: "image", gateUrl: "https://huggingface.co/krea/Krea-2-Turbo", defaults: { "config.process[0].model.name_or_path": [ "krea/Krea-2-Turbo", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], "config.process[0].model.assistant_lora_path": [ "ostris/krea2_turbo_training_adapter/krea2_turbo_training_adapter_v1.safetensors", undefined, ], "config.process[0].sample.guidance_scale": [1, 4], "config.process[0].sample.sample_steps": [9, 25], }, disableSections: ["network.conv"], additionalSections: [ "model.low_vram", "model.layer_offloading", "model.assistant_lora_path", ], }, { name: "krea2:o_edit", label: "Krea 2 (raw) [Edit Training]", gateUrl: "https://huggingface.co/krea/Krea-2-Raw", group: "experimental", defaults: { "config.process[0].model.name_or_path": [ "krea/Krea-2-Raw", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].model.model_kwargs": [ { edit: true, match_target_res: true, kv_cache: true, }, {}, ], }, disableSections: ["network.conv", "train.unload_text_encoder"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", "model.qie.match_target_res", "model.model_kwargs.kv_cache", ], }, { name: "krea2:o_edit_turbo", label: "Krea 2 Turbo (w/ Training Adapter) [Edit Training]", generateNameOverride: "Krea 2 Turbo (Edit)", gateUrl: "https://huggingface.co/krea/Krea-2-Turbo", group: "experimental", defaults: { "config.process[0].model.name_or_path": [ "krea/Krea-2-Turbo", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], "config.process[0].model.assistant_lora_path": [ "ostris/krea2_turbo_training_adapter/krea2_turbo_training_adapter_v1.safetensors", undefined, ], "config.process[0].sample.guidance_scale": [1, 4], "config.process[0].sample.sample_steps": [8, 25], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].model.model_kwargs": [ { edit: true, match_target_res: true, kv_cache: true, }, {}, ], }, disableSections: ["network.conv", "train.unload_text_encoder"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", "model.assistant_lora_path", "model.qie.match_target_res", "model.model_kwargs.kv_cache", ], }, { name: "mageflow", label: "Mage-Flow", group: "image", defaults: { "config.process[0].model.name_or_path": [ "microsoft/Mage-Flow-Base", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.guidance_scale": [4, 4], "config.process[0].sample.sample_steps": [25, 25], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "mageflow_edit", label: "Mage-Flow Edit", group: "instruction", defaults: { "config.process[0].model.name_or_path": [ "microsoft/Mage-Flow-Edit-Base", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], "config.process[0].sample.guidance_scale": [4, 4], "config.process[0].sample.sample_steps": [25, 25], "config.process[0].train.unload_text_encoder": [false, false], }, disableSections: ["network.conv", "train.unload_text_encoder"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", ], }, { name: "boogu_image", label: "Boogu Image", group: "image", defaults: { "config.process[0].model.name_or_path": [ "Boogu/Boogu-Image-0.1-Base", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], }, disableSections: ["network.conv"], additionalSections: ["model.low_vram", "model.layer_offloading"], }, { name: "boogu_image_edit", label: "Boogu Image Edit", group: "instruction", defaults: { "config.process[0].model.name_or_path": [ "Boogu/Boogu-Image-0.1-Edit", defaultNameOrPath, ], "config.process[0].model.quantize": [true, false], "config.process[0].model.quantize_te": [true, false], "config.process[0].train.timestep_type": ["linear", "sigmoid"], "config.process[0].network.conv": [undefined, 16], "config.process[0].network.conv_alpha": [undefined, 16], "config.process[0].model.low_vram": [true, false], "config.process[0].train.unload_text_encoder": [false, false], "config.process[0].model.model_kwargs": [ { match_target_res: false, }, {}, ], }, disableSections: ["network.conv", "train.unload_text_encoder"], additionalSections: [ "datasets.multi_control_paths", "sample.multi_ctrl_imgs", "model.low_vram", "model.layer_offloading", "model.qie.match_target_res", ], }, ];