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: - Noctaluna/Noct-Q-Uncensored-Qwen-Image-2.1
base_model_relation: quantized
Noct Q V4 (an uncensored Qwen-Image 2.1 fine-tune), IQ8R — radiance container
Noctaluna's Noct Q V4 — a fine-tune of Qwen-Image
2.1's diffusion transformer that, by its own card, renders nudes and explicit scenes without a LoRA — as a single .rad
container for the radiance inference engine (AMD RDNA4, ROCm), with the
stock Qwen-Image 2.1 conditioning network and VAE. It makes adult content; for adults only.
It replaces StillDeadcode/radiance-noctq-v4-uncensored-fp8,
with the same eight bits a weight.
What differs from Qwen-Image 2.1
Compared tensor by tensor against Qwen/Qwen-Image-2.1: Noct Q V4 changes blocks 0-15 of the diffusion
transformer, all six of their linears (q, k, v, out, gate/up, down), by about 1.1% of their norm. Blocks 16-31,
every other transformer tensor, the conditioning network and the VAE are the stock model's.
Noct Q is published on Hugging Face only as ComfyUI's int8_tensorwise + ConvRot file (its bf16 is on Civitai).
That format is decoded here exactly as ComfyUI's quantiser encodes it (per-row int8 of the weight rotated by the
normalised regular Hadamard of order 256): re-quantising the stock weights reproduces the codes of the untouched
blocks. So blocks 16-31 are taken from the stock bf16 checkpoint, and only blocks 0-15 carry Noct Q's int8
rounding (about 0.9% of their norm) before this container's own int8.
| File | noctq-v4-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 | 40 by default; Noct Q's card recommends 25 with guidance 3 and a negative prompt ("num_inference_steps": 25, "true_cfg_scale": 3 with a negative_prompt) |
| 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: noctq-v4-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 at 20 steps takes 10.3 to 10.6 s, as the FP8 container's does
(10.3 to 10.5 s). From the same noise its four test pictures are 27.8 dB from the FP8 container's on average
(17.8 to 32.9; the lowest is a picture whose composition differs, a desk drawn from another angle). 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 decode_noctq.py NoctQ_V4_int8_convrot.safetensors Qwen/Qwen-Image-2.1/transformer Noctaluna/Noct-Q-V4/transformer
rad-convert Noctaluna/Noct-Q-V4 --recipe qwen-image-2.1-iq8r.recipe -o noctq-v4-uncensored-iq8r.rad
decode_noctq.py (in this repository) writes the decoded transformer as a diffusers transformer/ directory;Noctaluna/Noct-Q-V4 is the diffusers download of Qwen/Qwen-Image-2.1 with that directory in place of its own.
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. Noct Q is Noctaluna's derivative of Qwen-Image 2.1 and, like it, is licensed under the Qwen RESEARCH
LICENSE AGREEMENT (non-commercial; LICENSE in this repository). NOTICE carries Qwen's attribution and Noct Q's
change notice. This container is a further modified copy: its linear weights are re-encoded as rotated int8 (see above).