Surface HunyuanImage 2.1 in the image model catalog

Catalog group with the open bf16 mirror pipeline (~50 GB resident, so a
bare click on a consumer card routes to the QuantStack GGUF quants, which
load and render through the generic GGUF path, verified live) plus the
images page defaults (50 steps, guidance 3.25 feeding
distilled_guidance_scale).
This commit is contained in:
Daniel Han 2026-07-17 12:52:01 +00:00
commit ff888fd3da
3 changed files with 35 additions and 0 deletions

View file

@ -380,6 +380,25 @@ assert.equal(
"Alpha-VLLM/Lumina-Image-2.0",
);
assert.equal(loadSpecFor("Alpha-VLLM/Lumina-Image-2.0", IMAGE_CATALOG)?.kind, "pipeline");
// HunyuanImage 2.1: the 50 GB bf16 pipeline does NOT fit a 24 GB card, so a bare
// click routes to the QuantStack GGUF; on a large GPU the bf16 wins. The mirror id
// and the GGUF id resolve to one group.
const hyimage = groupForRepoId(
"hunyuanvideo-community/HunyuanImage-2.1-Diffusers",
IMAGE_CATALOG,
);
assert.ok(hyimage);
assert.equal(
pickDefaultArtifact(hyimage, { gpuGb: 24, systemRamGb: 64, isDownloaded: notDownloaded })
.repoId,
"QuantStack/HunyuanImage-2.1-GGUF",
);
assert.equal(
pickDefaultArtifact(hyimage, { gpuGb: 141, systemRamGb: 128, isDownloaded: notDownloaded })
.format,
"bf16",
);
assert.equal(groupForRepoId("QuantStack/HunyuanImage-2.1-GGUF", IMAGE_CATALOG), hyimage);
// FLUX.1-schnell is Apache-2.0 (not gated): its BF16 IS auto-routed on a GPU that fits it.
const fluxSchnellRoute = groupForRepoId("unsloth/FLUX.1-schnell", IMAGE_CATALOG);
assert.ok(fluxSchnellRoute);

View file

@ -263,6 +263,19 @@ export const IMAGE_CATALOG: CatalogGroup[] = [
scope: "image",
artifacts: [bf16Pipeline("Alpha-VLLM/Lumina-Image-2.0", 11)],
},
{
// 17B dual-stream 2K-native DiT with a Qwen2.5-VL encoder; the mirror's guider
// components load natively on diffusers 0.39. ~50 GB bf16-resident, so consumer
// GPUs route to the QuantStack GGUF quants.
canonicalId: "hunyuanvideo-community/HunyuanImage-2.1-Diffusers",
displayName: "HunyuanImage 2.1",
description: "Text-to-image",
scope: "image",
artifacts: [
bf16Pipeline("hunyuanvideo-community/HunyuanImage-2.1-Diffusers", 50),
gguf("QuantStack/HunyuanImage-2.1-GGUF"),
],
},
{
// No bf16 repo exists for Ideogram 4: -fp8 stores its two DiTs as raw
// float8 (~46 GB resident after the bf16 cast); -nf4-diffusers is the

View file

@ -170,6 +170,9 @@ const MODEL_DEFAULTS: Array<{ match: string; steps: number; guidance: number }>
{ match: "ideogram", steps: 48, guidance: 7 },
// Lumina Image 2.0 model-card recipe (the backend adds cfg_trunc_ratio itself).
{ match: "lumina", steps: 50, guidance: 4 },
// HunyuanImage 2.1: 50 steps; the guidance value feeds distilled_guidance_scale
// (default 3.25), real CFG runs inside the repo's guider components.
{ match: "hunyuanimage", steps: 50, guidance: 3.25 },
// SDXL: Turbo is distilled (few steps, no CFG); base/full SDXL wants ~30 steps and
// real CFG (~7). "sdxl-turbo" must precede the generic "sdxl" substring match.
{ match: "sdxl-turbo", steps: 3, guidance: 0 },