From 3c05f4876b558ef3e51488d903bfa512f91fea2b Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Mon, 21 Sep 2026 17:50:47 +0000 Subject: [PATCH 1/2] fix(stablediffusion-ggml): bump sd.cpp for Qwen-Image 2.1, fix RPC build Bump stable-diffusion.cpp to c678dfe70, which adds Qwen-Image 2.1 support (leejet/stable-diffusion.cpp#1994). The same range pulls a ggml update that adds GGML_OP_SAGE_ATTN but does not update the GGML_OP_COUNT static_assert in ggml-rpc.h. We build with SD_RPC=ON and upstream CI does not, so every backend image failed to compile (see #12170). Add a sync-rpc-op-count step after checkout. It sets the ggml-rpc.h assert to the count that ggml.c asserts. The new op is appended before GGML_OP_COUNT, so existing op ids on the wire do not change, and the RPC handshake compares only major and minor versions. When upstream fixes the header, the step does nothing, so future automated bumps stay green. Assisted-by: Claude:claude-opus-5 [Claude Code] Signed-off-by: Ettore Di Giacinto --- backend/go/stablediffusion-ggml/Makefile | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/backend/go/stablediffusion-ggml/Makefile b/backend/go/stablediffusion-ggml/Makefile index ed5f53f5bff3..2507ac18c5b1 100644 --- a/backend/go/stablediffusion-ggml/Makefile +++ b/backend/go/stablediffusion-ggml/Makefile @@ -8,7 +8,7 @@ JOBS?=$(shell nproc --ignore=1) # stablediffusion.cpp (ggml) STABLEDIFFUSION_GGML_REPO?=https://github.com/leejet/stable-diffusion.cpp -STABLEDIFFUSION_GGML_VERSION?=1330cebae8f2ba99249df846cc0c9444fcbd4308 +STABLEDIFFUSION_GGML_VERSION?=c678dfe704a2230342376b46add9c8ca736a653d CMAKE_ARGS+=-DGGML_MAX_NAME=128 @@ -70,6 +70,20 @@ sources/stablediffusion-ggml.cpp: cd sources/stablediffusion-ggml.cpp && \ git checkout $(STABLEDIFFUSION_GGML_VERSION) && \ git submodule update --init --recursive --depth 1 --single-branch + $(MAKE) sync-rpc-op-count + +# leejet's ggml fork adds ops (e.g. GGML_OP_SAGE_ATTN) without updating the +# GGML_OP_COUNT static_assert in ggml-rpc.h, which breaks the build because we +# enable SD_RPC while upstream CI does not. The new ops are appended before +# GGML_OP_COUNT, so existing op ids on the wire are unchanged and the RPC +# handshake only compares major/minor versions. Align the assert with the +# count that ggml.c asserts; this is a no-op once upstream fixes it. +sync-rpc-op-count: + @count=$$(grep -oE 'GGML_OP_COUNT == [0-9]+' sources/stablediffusion-ggml.cpp/ggml/src/ggml.c | head -n1 | grep -oE '[0-9]+'); \ + if [ -n "$$count" ]; then \ + sed -i.bak -E "s/GGML_OP_COUNT == [0-9]+/GGML_OP_COUNT == $$count/" sources/stablediffusion-ggml.cpp/ggml/include/ggml-rpc.h && \ + rm -f sources/stablediffusion-ggml.cpp/ggml/include/ggml-rpc.h.bak; \ + fi UNAME_S := $(shell uname -s) From 66e584b682b95b239a82ed4e59435778b03c5205 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Mon, 21 Sep 2026 17:50:47 +0000 Subject: [PATCH 2/2] feat(gallery): add Qwen-Image 2.1 GGUF for stablediffusion-ggml Add qwen-image-2.1-q4_k-ggml, with qwen-image-2.1-q8_0-ggml as a variant, from leejet/Qwen-Image-2.1-GGUF. The config follows the upstream stable-diffusion.cpp recipe: Qwen3-VL-8B-Instruct text encoder, the Qwen-Image 2.1 VAE, cfg scale 6, euler sampler. The bundle also pulls the Qwen3-VL mmproj as llm_vision_path, so that image editing with reference images works. The text encoder and mmproj use the same filenames and checksums as the qwen3-vl-8b-instruct entry, so both entries share the files on disk. Assisted-by: Claude:claude-opus-5 [Claude Code] Signed-off-by: Ettore Di Giacinto --- docs/content/reference/compatibility-table.md | 2 +- gallery/index.yaml | 104 ++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/docs/content/reference/compatibility-table.md b/docs/content/reference/compatibility-table.md index 60786a22e2f4..7e6bfd73d63c 100644 --- a/docs/content/reference/compatibility-table.md +++ b/docs/content/reference/compatibility-table.md @@ -93,7 +93,7 @@ All backends listed here can be installed on demand from the [Backend Gallery]({ | Backend | Description | Acceleration | |---------|-------------|-------------| -| [stable-diffusion.cpp](https://github.com/leejet/stable-diffusion.cpp) | Stable Diffusion, Flux, PhotoMaker, Ideogram in C/C++ | CPU, CUDA 12/13, Intel SYCL, Vulkan, Metal, Jetson L4T | +| [stable-diffusion.cpp](https://github.com/leejet/stable-diffusion.cpp) | Stable Diffusion, Flux, PhotoMaker, Ideogram, Qwen-Image in C/C++ | CPU, CUDA 12/13, Intel SYCL, Vulkan, Metal, Jetson L4T | | [diffusers](https://github.com/huggingface/diffusers) | HuggingFace diffusion models (image and video generation) | CPU, CUDA 12/13, ROCm, Intel SYCL, Metal, Jetson L4T | | [mlx-video](https://github.com/Blaizzy/mlx-video) | LTX-2 and converted Wan2.1/Wan2.2 video generation | Metal (Apple Silicon) | | [vLLM Omni](https://github.com/vllm-project/vllm-omni) | Multimodal generation including text-to-image and text-to-video | CUDA 12/13, ROCm, Jetson L4T | diff --git a/gallery/index.yaml b/gallery/index.yaml index 913db79d4794..f9da22ceff7d 100644 --- a/gallery/index.yaml +++ b/gallery/index.yaml @@ -45553,6 +45553,110 @@ - filename: flux2-vae.safetensors sha256: 868fe7b343cc8f3a19dbcfcafbc3d5f888802be3f89bd81b65b3621a066ce8f3 uri: https://huggingface.co/Comfy-Org/Ideogram-4/resolve/main/vae/flux2-vae.safetensors +- name: qwen-image-2.1-q4_k-ggml + variants: + - model: qwen-image-2.1-q8_0-ggml + url: "github:mudler/LocalAI/gallery/virtual.yaml@master" + urls: + - https://huggingface.co/Qwen/Qwen-Image-2.1 + - https://huggingface.co/leejet/Qwen-Image-2.1-GGUF + description: | + Qwen-Image 2.1 is the Qwen image generation foundation model, with strong prompt adherence and accurate text rendering (English and Chinese). It uses Qwen3-VL-8B as the text encoder and its own VAE, and supports both text-to-image and image editing: pass reference images to edit them. + + This is the Q4_K (4-bit) quantization (~4.2GB diffusion model) by leejet for stable-diffusion.cpp. The bundle also pulls the Qwen3-VL-8B-Instruct text encoder with its vision projector (used for image editing) and the Qwen-Image 2.1 VAE. Use image dimensions divisible by 32. + license: qwen-research + icon: https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/qwen_image_logo.png + tags: + - qwen + - qwen-image + - text-to-image + - image-to-image + - image-editing + - text-rendering + - multilingual + - gguf + - quantized + - diffusion + last_checked: "2026-09-21" + overrides: + backend: stablediffusion-ggml + step: 25 + # Qwen-Image 2.1 is not guidance-distilled: 6 matches the upstream + # stable-diffusion.cpp example. + cfg_scale: 6 + options: + - diffusion_model + - llm_path:Qwen3-VL-8B-Instruct-Q4_K_M.gguf + - llm_vision_path:mmproj/mmproj-Qwen3-VL-8B-Instruct-F16.gguf + - vae_path:qwen_image_2.1_vae_bf16.safetensors + - sampler:euler + - offload_params_to_cpu:true + parameters: + model: qwen_image_2.1-Q4_K.gguf + files: + - filename: qwen_image_2.1-Q4_K.gguf + sha256: 29f9c83c249ff0292fb2943fceddfa2319b446601866c82a4f8be062abea72c2 + uri: huggingface://leejet/Qwen-Image-2.1-GGUF/qwen_image_2.1-Q4_K.gguf + - filename: Qwen3-VL-8B-Instruct-Q4_K_M.gguf + sha256: 108e7ff92b78eefd3db4741885104acba514255c11b617d3c7b197a5f46efe89 + uri: huggingface://unsloth/Qwen3-VL-8B-Instruct-GGUF/Qwen3-VL-8B-Instruct-Q4_K_M.gguf + - filename: mmproj/mmproj-Qwen3-VL-8B-Instruct-F16.gguf + sha256: d406d03ebabefdef86a2c86bf0c1b65f9e046f7a81c218f25de4931b46a07fc4 + uri: huggingface://unsloth/Qwen3-VL-8B-Instruct-GGUF/mmproj-F16.gguf + - filename: qwen_image_2.1_vae_bf16.safetensors + sha256: bb21f7473051e1ac368515dd3f2e15cd44d7a11748ee8823e1ddca3e4876b7c9 + uri: https://huggingface.co/Comfy-Org/Qwen-Image-2.1/resolve/main/vae/qwen_image_2.1_vae_bf16.safetensors +- name: qwen-image-2.1-q8_0-ggml + url: "github:mudler/LocalAI/gallery/virtual.yaml@master" + urls: + - https://huggingface.co/Qwen/Qwen-Image-2.1 + - https://huggingface.co/leejet/Qwen-Image-2.1-GGUF + description: | + Qwen-Image 2.1 is the Qwen image generation foundation model, with strong prompt adherence and accurate text rendering (English and Chinese). It uses Qwen3-VL-8B as the text encoder and its own VAE, and supports both text-to-image and image editing: pass reference images to edit them. + + This is the Q8_0 (8-bit) quantization (~7.7GB diffusion model) by leejet for stable-diffusion.cpp. The bundle also pulls the Qwen3-VL-8B-Instruct text encoder with its vision projector (used for image editing) and the Qwen-Image 2.1 VAE. Use image dimensions divisible by 32. + license: qwen-research + icon: https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/qwen_image_logo.png + tags: + - qwen + - qwen-image + - text-to-image + - image-to-image + - image-editing + - text-rendering + - multilingual + - gguf + - quantized + - diffusion + last_checked: "2026-09-21" + overrides: + backend: stablediffusion-ggml + step: 25 + # Qwen-Image 2.1 is not guidance-distilled: 6 matches the upstream + # stable-diffusion.cpp example. + cfg_scale: 6 + options: + - diffusion_model + - llm_path:Qwen3-VL-8B-Instruct-Q4_K_M.gguf + - llm_vision_path:mmproj/mmproj-Qwen3-VL-8B-Instruct-F16.gguf + - vae_path:qwen_image_2.1_vae_bf16.safetensors + - sampler:euler + - offload_params_to_cpu:true + parameters: + model: qwen_image_2.1-Q8_0.gguf + files: + - filename: qwen_image_2.1-Q8_0.gguf + sha256: f8b244b00937f0e444a40dbf7866460871b89b30142594973b6012d1b471dc0a + uri: huggingface://leejet/Qwen-Image-2.1-GGUF/qwen_image_2.1-Q8_0.gguf + - filename: Qwen3-VL-8B-Instruct-Q4_K_M.gguf + sha256: 108e7ff92b78eefd3db4741885104acba514255c11b617d3c7b197a5f46efe89 + uri: huggingface://unsloth/Qwen3-VL-8B-Instruct-GGUF/Qwen3-VL-8B-Instruct-Q4_K_M.gguf + - filename: mmproj/mmproj-Qwen3-VL-8B-Instruct-F16.gguf + sha256: d406d03ebabefdef86a2c86bf0c1b65f9e046f7a81c218f25de4931b46a07fc4 + uri: huggingface://unsloth/Qwen3-VL-8B-Instruct-GGUF/mmproj-F16.gguf + - filename: qwen_image_2.1_vae_bf16.safetensors + sha256: bb21f7473051e1ac368515dd3f2e15cd44d7a11748ee8823e1ddca3e4876b7c9 + uri: https://huggingface.co/Comfy-Org/Qwen-Image-2.1/resolve/main/vae/qwen_image_2.1_vae_bf16.safetensors - name: whisper-1 url: github:mudler/LocalAI/gallery/whisper-base.yaml@master urls: