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

6.4 KiB
Raw Blame History

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. mike-ai-image-worker startet Qwen Image auf der RTX 5080.
  4. Der Adapter erzeugt das Bild oder bearbeitet bis zu vier Referenzbilder.
  5. Der Qwen-Worker wird vollständig gestoppt.
  6. Das vorherige Textprofil und Qwen3-TTS werden wiederhergestellt.

Der Container ist außerhalb eines Auftrags gestoppt. Das ist der Sollzustand.

Reproduzierbare Vorbereitung

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 sowie FLUX gestoppt an. Es lädt dabei kein Modell in den VRAM.

Funktionsprobe über den echten Routerweg

curl -sS http://127.0.0.1:8081/v1/images/generations \
  -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 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:

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:

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 und FLUX_RESOLUTION_TEST_20260912.md.