Apple Silicon ComfyUI workflows for Qwen Image 2.1

Tested custom nodes, GUI/API workflows and seeded comparisons. Integration package; no model weights. Runs PyTorch MPS, not MLX.

Install

Tested: Apple M4 Max / 64 GiB, macOS 27.0.1, ComfyUI 0.39.2, Python 3.12.12, PyTorch 2.14.1. Later releases are not qualified here.

  1. Download this repository. Copy custom_nodes/qwen_mps_loader.py and custom_nodes/viggle_turbo.py into your ComfyUI custom_nodes directory. Back up conflicting custom modules first. Restart an idle server.
  2. Download the model components listed below from their publishers.
  3. Import a JSON from workflows/. For edits, upload your reference image; the API examples use qwen-validation-reference.png from examples/.
Folder under ComfyUI/models File
diffusion_models qwen_image_2.1_turbo_int8_convrot.safetensors or qwen_image_2.1_turbo_bf16.safetensors
diffusion_models qwen_image_2.1_int8_convrot.safetensors or qwen_image_2.1_bf16.safetensors for base/Viggle
text_encoders qwen3vl_8b_int8_convrot.safetensors or qwen3vl_8b_bf16.safetensors
vae qwen_image_2.1_vae_bf16.safetensors
loras Qwen-Image-2.1-viggle-turbo-v0.3-6step-lora-r256.safetensors, for Viggle only

Weights: Comfy-Org. Adapter: Viggle.

Shared profile flags: --use-pytorch-cross-attention --reserve-vram 24 --cache-none. This reserves headroom; it does not guarantee swap-free operation. Queue one job at a time. BF16 and 2K need more headroom. The BF16-transformer Turbo preset retains the INT8-storage encoder.

What is custom

  • QwenImage21CLIPLoaderMPS: BF16 text-encoder computation on Metal, CPU offload through ComfyUI. INT8 storage is emulated BF16 computation on this host.
  • ViggleTurboLora: runtime low-rank branches rather than weight merging/requantization; handles fused MLP projections.
  • ViggleTurboSigmas: publisher's six-step nodes with its resolution-dependent shift. This belongs to Viggle, not official Turbo.
  • Official Turbo workflows use native ManualSigmas: 1, .978453, .95418, .926626, .89508, .845148, .704534, .414568, 0; Euler, CFG 1, no extra dynamic shift, no Viggle adapter.
  • Reference edits use 1056 pixels, avoiding the separate 1024-grid issue observed with this stack.

Measured results

October 9, 2026; individual runs in the shared profile, existing LLM retained. Same prompt, seed, 1024 square, Euler and CFG 1 within each comparison. Total wall includes validation/loading, encoding, denoising, VAE decode, save, 0.25-second polling and local PNG retrieval. Server execution is also recorded in benchmark-results.json. These are historical local measurements, not new public-revision benchmarks or universal quality rankings.

Model Cup total wall Poster total wall
Base / 25 steps 168.7 s 167.1 s
Viggle v0.3 r256 / 6 59.1 s 61.9 s
Official Turbo / 8 68.5 s 70.0 s

Additional official Turbo: BF16 transformer 1024 square 82.1 s; INT8 native 2048 square 266.5 s; INT8 reference edit 1056 square 91.9 s. All nine final jobs completed. Both poster strings and the three-bean count were correct across the compared models; the edit changed cup color while closely preserving the scene. No broad prompt suite was run.

Cup Poster Reference edit Precision and resolution

License and credits

Integration code is GPL-3.0; see LICENSE. Model weights and adapters retain their publishers' licenses. Qwen diffusion weights use the Qwen Research License; commercial model use requires separate authorization. This repository grants no model license.

Credits: Qwen, Comfy-Org/ComfyUI, Viggle, PyTorch. Community packaging and local validation: Shiftedx. Example images are AI-generated. Independent release; no publisher endorsement.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for Shiftedx/apple-silicon-comfyui-qwen-workflows

Finetuned
(85)
this model

Collection including Shiftedx/apple-silicon-comfyui-qwen-workflows