--- title: Qwen Runner Vision — 12-Task Extraction + Fusion emoji: 🧩 colorFrom: indigo colorTo: blue sdk: gradio sdk_version: 6.20.0 app_file: app.py pinned: false license: apache-2.0 short_description: Image → 12-task JSON + fused prompt on ZeroGPU --- # Qwen Runner Vision — deterministic 12-task extraction + fusion **Stick an image in → get a full JSON readout.** This Space showcases the vision half of [`qwen-test-runner`](https://github.com/AbstractEyes/qwen-test-runner): a **deterministic-first** pipeline that replaces a hallucinating VLM with hand-picked Apache/MIT specialist models, one per task, then **fuses** everything into one relational scene and a byte-deterministic prompt. It runs the **batched extraction structure** on **ZeroGPU**. ## What comes out Per image, the full readout: - **12 task JSONs** — 11 from the specialist/derive engine (`image_classification`, `bbox_grounding`, `ocr_text`, `data_type_differentiation`, `data_type_utilization`, `structural_spatial_awareness`, `depth_analysis`, `subject_fixation`, `segmentation`, `outline_association`, `style_structural_awareness`) plus `semantic_association` from the fusion tier — with a per-task **schema-validity** map. - **`FusedScene`** — entities (dedup + left-to-right ids), relations, the attribute **ownership cascade** and the **shared basin** (uncertainty stored, never guessed), a voted scene block, and a quality/accounting block. - **`prompt_fused`** — the deterministic natural-language prompt, plus `fusion_confidence`. - **Overlays** — detection boxes, SAM mask fills, subject box, outline, and a depth heatmap. - **Download** — one row in the production column shape (`tasks_json`, `tasks_valid`, `fused_json`, `prompt_fused`, `fusion_confidence`, `proc_width/height`, plus `struct_*`/`age_audit` when those toggles are on). ## Everything is a toggle It's a *multiple-possibility system*: **structurer** (`off` / Qwen3.5-0.8B / Qwen3.5-9B for caption enrichment) · **tasks** (which to run/show) · **vocab** (COCO-80 / shapes / custom phrases) · **specialists** (OCR, SAM masks, depth on/off) · **detection** (box/text thresholds) · **fusion** (`t_own`, `t_margin`, `dedup_iou`, coord space) · **batch** (`extract_batch`, `gdino_batch`) · optional **age-gate** pre-filter. The core path needs no captions: the fusion attribute-ownership and shared-basin machinery light up when you supply captions and pick a structurer, but entities/relations/scene come from the image alone. ## Model ledger (Apache-2.0 — redistributable) | role | checkpoint | |---|---| | detection (hub) | `IDEA-Research/grounding-dino-base` | | segmentation | `facebook/sam-vit-base` | | depth | `depth-anything/Depth-Anything-V2-Small-hf` | | classification / style | `google/siglip2-so400m-patch14-384` | | OCR | EasyOCR | | structurer (optional) | `Qwen/Qwen3.5-0.8B` · `Qwen/Qwen3.5-9B` | | age gate (optional) | `nateraw/vit-age-classifier` | ## Hardware Select **ZeroGPU** in the Space's hardware settings. `large` (48 GB) is enough for the default config and the 0.8B structurer; the 9B structurer wants `xlarge` (96 GB). The fusion tier is CPU-only (torch-free) and runs off the GPU. Full-corpus production (streaming an HF dataset → published `{src}-fused` parquet shards) runs in Colab via `colab/produce_fused_dataset.py` — this Space is the interactive showcase.