Files
AI-Profile-Router/docs/QWEN_IMAGE_21.md
T

232 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Qwen-Image-2.1 auf Athena
Stand: 21. September 2026. Qwen-Image-2.1 ist der produktive Bildworker des
Routers. FLUX.2 Klein 9B FP8 bleibt als gestoppter Rückfallcontainer erhalten.
## Gepinnter Stand
- ComfyUI: Commit `b0f4b7b294ce482a2e071d9d762c133d38c7aa07`
- Modell-Repository: `Comfy-Org/Qwen-Image-2.1`, Revision
`ace0edeb3791a594ddfa36ed5f41a178a394e921`
- Transformer: `qwen_image_2.1_int8_convrot.safetensors`
(`cb74113cb03faecd79611b01fd7fd642f0aa60d6f0b95086abee214d75eaa57d`)
- Textencoder: `qwen3vl_8b_int8_convrot.safetensors`
(`8bfd0f6e12abf2d2d697ecc888e5e90b0d6741d6708f05799f53afa560452e8f`)
- VAE: `qwen_image_2.1_vae_bf16.safetensors`
(`bb21f7473051e1ac368515dd3f2e15cd44d7a11748ee8823e1ddca3e4876b7c9`)
- Pipeline: 25 Schritte, CFG 1, Euler/Simple, `--lowvram`
- GPU: ausschließlich Athena-GPU 1, die RTX 5080 mit 16 GB
Die Gewichte liegen außerhalb von Git unter
`/data/models/Qwen-Image-2.1-ComfyUI`. Der Adapter
`platform/docker/qwen-image-worker/qwen_image_worker.py` stellt vor ComfyUI
die bestehende private Worker-API auf Port 8086 bereit. Der öffentliche
Routervertrag bleibt damit `/v1/images/generations` und `/v1/images/edits`.
Der Container läuft wie der Router mit UID/GID `10002:10002`, damit beide das
gemeinsame Bild-Volume ohne erweiterte Linux-Capabilities verwenden können.
## Lebenszyklus
Ein Bildauftrag läuft transaktional:
1. Der Router merkt sich das aktive Textprofil.
2. Der Profile Controller stoppt LLM, TTS und andere GPU-Spezialworker.
3. Bei einem Textauftrag startet `mike-ai-image-prompt-enhancer-t2i`, bei
Referenzbildern `mike-ai-image-prompt-enhancer-i2i` auf der RTX 3060.
4. Der offizielle Qwen-Enhancer schreibt den knappen Benutzertext um und wird
anschließend vollständig gestoppt.
5. `mike-ai-image-worker` startet Qwen Image auf der RTX 5080 und erzeugt das
Bild oder bearbeitet bis zu vier Referenzbilder.
6. Der Qwen-Worker wird vollständig gestoppt.
7. Das vorherige Textprofil und Qwen3-TTS werden wiederhergestellt.
Der Container ist außerhalb eines Auftrags gestoppt. Das ist der Sollzustand.
## Reproduzierbare Vorbereitung
```bash
cd /opt/mike-ai/stack
sudo ./scripts/prepare-qwen-image-21.sh
```
Das Skript lädt fehlende Dateien mit festen SHA-256-Prüfsummen, baut den
produktiven Qwen-Worker und legt Qwen, beide Prompt-Enhancer sowie FLUX
gestoppt an. Es lädt dabei kein Modell in den VRAM.
## Funktionsprobe über den echten Routerweg
```bash
curl -sS http://127.0.0.1:8081/v1/images/generations \
-H "Authorization: Bearer $ROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model":"Qwen-Image-2.1-int8",
"prompt":"Fotorealistisches rotes Haus bei Tageslicht",
"size":"1024x1024",
"steps":25,
"guidance":1.0,
"response_format":"url"
}'
```
Nach dem Lauf müssen `mike-ai-image-worker`, beide Prompt-Enhancer und
`mike-ai-flux-image-worker` gestoppt sein und das vorherige LLM-Profil wieder
gesund laufen.
## OpenClaw 2026.9.5
OpenClaws eingebautes Werkzeug `image_generate` verwendet den separaten
Medienmodell-Eintrag. Er muss auf den OpenAI-kompatiblen Athena-Router zeigen:
```bash
openclaw config set agents.defaults.mediaModels.image.primary \
openai/Qwen-Image-2.1-int8
openclaw config set agents.defaults.mediaModels.image.fallbacks '[]' \
--strict-json
```
Der Provider `models.providers.openai.baseUrl` bleibt
`http://192.168.1.212:8081/v1`. `openclaw models set-image` ist hierfür nicht
der richtige Befehl: Er schreibt `agents.defaults.imageModel`, nicht den von
`image_generate` verwendeten Medienmodell-Eintrag. Ein alter Wert unter
`agents.defaults.imageModel` wird mit folgendem Befehl entfernt:
```bash
openclaw config unset agents.defaults.imageModel
```
Die leere Fallbackliste verhindert, dass OpenClaw bei einem lokalen Fehler
unbemerkt auf `openai/gpt-image-2` ausweicht.
OpenClaw überträgt Referenzbilder an `/v1/images/edits` als
OpenAI-kompatibles Multipart-Formular mit dem Feld `image[]`. Der Router
akzeptiert dort ein bis vier Referenzbilder und normalisiert numerische
Formularwerte wie `n` und `steps`. Der ältere JSON-/Base64-Weg bleibt für
bestehende Clients erhalten.
Beim ersten Wechsel von FLUX auf Qwen funktionierten Referenzbilder deshalb
nicht: Der neue Qwen-Pfad verstand zunächst nur den älteren JSON-/Base64-Weg.
Zusätzlich war anfangs `agents.defaults.imageModel` gesetzt, obwohl
OpenClaws `image_generate` den Eintrag unter
`agents.defaults.mediaModels.image` verwendet. Das waren Lücken der neuen
Qwen-Integration. Der zuvor produktive FLUX-Pfad war davon nicht betroffen.
## Produktionsvalidierung vom 21. September 2026
Beide öffentlichen Routerpfade wurden auf Athena mit dem produktiven Stack
geprüft:
- Text zu Bild: gültiges PNG mit 1024×1024 Pixeln, 25 Schritte,
`Qwen-Image-2.1-int8`; 48,9 Sekunden reine Bildpipeline und 71,6 Sekunden
für den vollständigen transaktionalen Routerlauf.
- Bildbearbeitung: gültiges PNG mit 1024×1024 Pixeln aus einem Referenzbild,
25 Schritte, `Qwen-Image-2.1-int8`; 76,3 Sekunden für den vollständigen
Routerlauf.
Nach beiden Aufträgen waren Qwen und FLUX gestoppt. `mike-ai-llama-medium`,
Qwen3-TTS, Router und Profile Controller liefen anschließend wieder gesund.
Damit sind Erzeugung, Referenzbildübergabe und Wiederherstellung des zuvor
aktiven Textprofils über den echten Routerweg bestätigt.
Zusätzlich wurde `image_generate` am 21. September 2026 über einen isolierten
OpenClaw-`agent exec`-Lauf geprüft. OpenClaw rief
`openai/Qwen-Image-2.1-int8` einmal auf; Athena erzeugte das PNG und stellte
Medium sowie Qwen3-TTS nach 72,5 Sekunden wieder gesund her.
Auch die Referenzbildbearbeitung wurde anschließend über das echte
OpenClaw-Werkzeug `image_generate` geprüft. OpenClaw übergab ein Referenzbild
als `image[]`; der Router erzeugte mit `Qwen-Image-2.1-int8` ein gültiges
PNG mit 1024×1024 Pixeln und meldete im Sidecar `mode: image-edit` sowie
`reference_images: 1`. Medium und Qwen3-TTS liefen nach dem Auftrag wieder
gesund, der Bildworker wurde erwartungsgemäß gestoppt.
## FLUX-Rückfallpfad
FLUX verwendet weiterhin das Image `mike-ai/image-worker:local`, die
bestehenden Modellverzeichnisse und den Container
`mike-ai-flux-image-worker`. Er hat das Controller-Label `flux-standby` und
kann deshalb nicht durch einen normalen Router-Bildauftrag gestartet werden.
Eine manuelle Diagnose ist nur über den allowlist-beschränkten Controllerpfad
`/workers/flux-standby/start` möglich. Für eine dauerhafte Rückschaltung müssen
Service-DNS, Modellname und Schrittzahl gemeinsam in Compose auf FLUX gesetzt
und anschließend Router und Controller neu ausgerollt werden. Keine dieser
Änderungen erfolgt automatisch.
Historische FLUX-Messwerte und Grenzen stehen in
[FLUX_9B_BETA.md](FLUX_9B_BETA.md) und
[FLUX_RESOLUTION_TEST_20260912.md](FLUX_RESOLUTION_TEST_20260912.md).
## Offizielle Prompt-Enhancer im produktiven Router
Qwen veröffentlicht zwei getrennte, auf Qwen3.5-VL 9B nachtrainierte
Prompt-Enhancer. Sie sind kein Bestandteil der Qwen-Image-Gewichte. Athena
startet automatisch die zum Auftrag passende Variante; OpenClaw ruft weiterhin
nur sein normales Werkzeug `image_generate` mit dem unveränderten Modellnamen
`openai/Qwen-Image-2.1-int8` auf.
- `mike-ai-image-prompt-enhancer-t2i` bereitet reine Textaufträge auf.
- `mike-ai-image-prompt-enhancer-i2i` wertet ein bis vier Referenzbilder
gemeinsam aus und trennt Identität, gewünschte Änderungen und neue Szene.
- Beide verwenden getrennte offizielle Systemprompts, `Q5_K_M`, llama.cpp
Build 10930, 16.384 Token Kontext und höchstens 2.048 Denktokens.
- Sie laufen ausschließlich und nacheinander auf der RTX 3060. Nach dem Rewrite
werden sie gestoppt; Qwen-Image rendert anschließend auf der RTX 5080.
- Falls der Client keine Größe vorgibt, übernimmt der Router das vom Enhancer
vorgeschlagene Seitenverhältnis und bildet es auf eine erlaubte Auflösung ab.
Eine ausdrücklich angegebene gültige Größe bleibt unverändert.
- Das Sidecar jedes PNG enthält `original_prompt`, den tatsächlich verwendeten
`prompt` und Modell, Quantisierung, Laufzeit und Verhältnis unter
`prompt_enhancer`. Verdeckte Denktokens werden nicht gespeichert.
- Ein fehlgeschlagener Rewrite bricht den Bildauftrag sichtbar ab. Der Router
sendet in diesem Fall keinen unaufbereiteten Ersatzprompt an Qwen-Image.
### Gepinnte Dateien
PE-I2I stammt aus `Qwen/Qwen-Image-2.1-PE-I2I`, Revision
`72927bc08afc99b7888ceb7d7d51a12db3700bbd`, und dem GGUF-Repository
`prithivMLmods/Qwen-Image-2.1-PE-I2I-GGUF`, Revision
`55b9c1a326599e142d59bcad8715d5601ccf8daa`. Die Dateien liegen unter
`/data/models/qwen-image-2.1-pe-i2i-q5`:
| Datei | SHA-256 |
|---|---|
| `Qwen-Image-2.1-PE-I2I.Q5_K_M.gguf` | `cb71f71fe5fe5938570d65a7c403fbcb1a9065dff9dd9a021f58aec42785b84e` |
| `Qwen-Image-2.1-PE-I2I.mmproj-bf16.gguf` | `8dedb71dbc3092dc47de9108ad373d68a12854e2527d59bd9399601738f3bce1` |
| `system_prompt.txt` | `e378fea686a1431581ba4c654d332ae96adad633f144ae738ec8ce9c4fd66439` |
PE-T2I stammt aus `Qwen/Qwen-Image-2.1-PE-T2I`, Revision
`f3ed7985c788ad75b3ab7223e0c4c51e2a43545b`, und dem GGUF-Repository
`prithivMLmods/Qwen-Image-2.1-PE-T2I-GGUF`, Revision
`e18d4a3e0830ab157770738b16830e6fcf5f57d4`. Die Dateien liegen unter
`/data/models/qwen-image-2.1-pe-t2i-q5`:
| Datei | SHA-256 |
|---|---|
| `Qwen-Image-2.1-PE-T2I.Q5_K_M.gguf` | `749f5652fd6e8b760ca860091f7a5bffa254a7954203ae5c9bcdf5f93197702f` |
| `system_prompt.txt` | `a77c9a06c59b120741141d9514b95682bb8761d02bec49ca61def7b2b3d9fb99` |
Der zuvor geprüfte PE-I2I-FP8-Checkpoint ist 13,54 GB groß und passt mit
Aktivierungs- und Laufzeitspeicher nicht in die 12-GB-RTX-3060. CPU-Offload war
unpraktisch langsam. Er wurde verworfen und entfernt. Der Q5-I2I-Worker belegt
etwa 7.167 MiB VRAM und ist deshalb der produktive Stand.
### Abnahme vom 21. September 2026
Der vollständige öffentliche Routerweg wurde nach der Integration zweimal
geprüft:
- Ein kurzer deutscher Textprompt wurde von PE-T2I in 36,6 Sekunden in einen
strukturierten englischen Produktionsprompt umgeschrieben. Qwen-Image
erzeugte das 1024×1024-PNG anschließend in 49,0 Sekunden.
- Ein hochgeladenes Referenzbild wurde von PE-I2I in 65,9 Sekunden aufbereitet.
Der Rewrite verlangte ausdrücklich eine neue Szene, neue Pose und Kleidung
sowie das Entfernen der alten Gegenstände. Qwen-Image erzeugte in 111,3
Sekunden ein neues 1024×1536-PNG: genau eine Person in einer Blumenwiese an
einer Autobahn, ohne Badewanne, Gitarre oder Gummiente.
Nach beiden Aufträgen waren der Bildworker und beide Enhancer gestoppt. Medium
und Qwen3-TTS liefen wieder gesund. Der erste I2I-Versuch deckte eine relative
Pfadauflösung bei temporären Multipart-Uploads auf; der korrigierte Pfad ist mit
einem eigenen Regressionstest abgedeckt. Insgesamt laufen 96 schnelle
GPU-freie Release-Tests.