license: other
license_name: qwen-research
license_link: LICENSE
pipeline_tag: text-to-image
library_name: radiance
tags:
- radiance
- rocm
- amd
- rdna4
- int8
- w8a8
- iq8r
- hadamard
- text-to-image
- image-editing
- uncensored
- not-for-all-audiences
base_model: - Qwen/Qwen-Image-2.1-Turbo
- AtomicChat/Qwen-Image-2.1-Turbo-Uncensored-GGUF
Qwen-Image 2.1 Turbo with AtomicChat's abliterated text encoder, IQ8R — radiance container
Qwen-Image 2.1 Turbo with the abliterated Qwen3-VL-8B text encoder
of AtomicChat's Qwen-Image-2.1-Turbo-Uncensored,
as a single .rad container for the radiance inference engine
(AMD RDNA4, ROCm).
It replaces StillDeadcode/radiance-qwen-image-2.1-turbo-uncensored-fp8,
with the same eight bits a weight.
What differs from Qwen-Image 2.1 Turbo
Only the conditioning network's language model: the o_proj and down_proj weights of all 36 layers and the token
embedding, which AtomicChat's abliteration rewrote (scale 0.75, per their GGUF's metadata). The diffusion transformer,
the vision tower and the VAE are the stock Turbo model's.
What that does to pictures is small. The stock pipeline has no content filter, and AtomicChat's own test found no
image outcome changed over 45 prompts; in the FP8 container a picture moved by about as much as the FP8 conversion
moved it (39.7 dB PSNR from the stock container at 1024x1024). The Turbo diffusion transformer itself has no
uncensored fine-tune on Hugging Face.
| File | qwen-image-2.1-turbo-uncensored-iq8r.rad — 16.13 GiB |
| Weights | the conditioning network's (Qwen3-VL-8B) and the diffusion transformer's linears int8 (codes −127..127) with a u8 scale per row and 256 of K under a bf16 scale a row, each 128 of K rotated by the unnormalised Hadamard, round to nearest; the vision tower, the small linears, the norms and the VAE bf16 |
| Activations | int8 under the same rotation (W8A8) |
| Steps | 8, fixed by the model |
| Needs | radiance built from main after 1.17.0: IQ8R at one scale a 256 of K is not in 1.17.0 and comes with the next release |
Serve
# radiance.yaml
server:
host: 0.0.0.0
port: 8000
models:
qwen-image:
model: qwen-image-2.1-turbo-uncensored-iq8r.rad
tp: 2
radiance --config radiance.yaml
tp: 1 serves it on one card. The server speaks OpenAI's Images API: POST /v1/images/generations andPOST /v1/images/edits (JSON, or multipart with image / image[] and mask, as OpenAI's SDKs send them).
Pictures come back as b64_json (png, jpeg or webp; response_format: url is refused). Also: n, size
(WxH or auto = 2048x2048), seed, streaming with partial_images, background: transparent; edits take
1 to 10 reference pictures and a mask. /v1/models lists the model.
On one Radeon AI PRO R9700 a 1024x1024 picture takes 4.5 s (the FP8 container: 4.4 s). From the same noise its
four test pictures are 25.7 dB from the FP8 container's on average (19.6 to 33.2). Not measured against a bf16
container of this model; on Qwen-Image 2.1 itself the same recipe is 32.6 dB from bf16 where FP8 is 28.1.
How this file was made
python extract_atomic.py Qwen/Qwen-Image-2.1/text_encoder AtomicChat/Qwen-Image-2.1-Turbo-Uncensored/text_encoder
rad-convert AtomicChat/Qwen-Image-2.1-Turbo-Uncensored --recipe qwen-image-2.1-iq8r.recipe -o qwen-image-2.1-turbo-uncensored-iq8r.rad
extract_atomic.py (in this repository) reads AtomicChat's BF16 GGUF by HTTP range and writes the 73 tensors that
differ from the stock text encoder as abliterated.safetensors, with a model.safetensors.index.json that points
those names at it and every other name at the stock shards (linked beside it). AtomicChat/Qwen-Image-2.1-Turbo-Uncensored
is the diffusers download of Qwen/Qwen-Image-2.1-Turbo with that text_encoder/ in place.
The recipe (qwen-image-2.1-iq8r.recipe in this repository) names what is quantised; everything it does not
name is the checkpoint's own dtype:
te.blk.*.attn_qkv.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
te.blk.*.attn_output.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
te.blk.*.ffn_gate_up.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
te.blk.*.ffn_down.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dit.blk.*.attn_qkv.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dit.blk.*.attn_output.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dit.blk.*.ffn_gate_up.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
dit.blk.*.ffn_down.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search
vae.* cast dtype=bf16
License
Built with Qwen. Qwen-Image 2.1 Turbo is licensed under the Qwen RESEARCH LICENSE AGREEMENT (non-commercial;LICENSE in this repository), and NOTICE carries its attribution. This container is a modified copy: its text
encoder carries AtomicChat's abliteration and its linear weights are re-encoded as rotated int8 (see above).