Rendered all 26 dump windows through the studio's --screenshot mode + a System.Drawing contact-sheet montage. The generic dump LayoutSource renders every panel with no crash; fidelity tracks static-chrome (in the dump) vs runtime content (slots/stats/appraise, not in the dump). Static-rich panels (vitals/toolbar/character/map/radar/effects/chat…) render great; runtime-only windows (examine) are correctly blank; inventory shows backdrop+frame but its nested sub-window chrome is sparse (next investigation). screenshots gitignored. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3 KiB
UI Studio — dump-panel render sweep (2026-06-25)
All 26 windows in docs/research/2026-06-25-retail-ui-layout-dump.json were rendered through
the studio's dump LayoutSource (AcDream.App ui-studio --dump <slug> --screenshot <png>) and
read back as PNGs. Goal: verify the generic dump source renders every retail window, identify
real render bugs vs. expected gaps.
Verdict
The generic dump source renders all 26 panels with no crash. Render fidelity tracks how much of a panel is static chrome (present in the dump, so it draws) vs runtime content (slots, stats, appraise text — NOT in the dump, so it can't draw). This is the dump's nature, not a studio bug.
Per-panel status (read from studio-shots/)
| Status | Panels |
|---|---|
| Full / great (frame + static content) | vitals (3 bars + heart/glyphs), side_by_side_vitals, toolbar (all spell/combat icons + backpack), map, main_panel, radar (disc), character (frame+tabs+scrollbar), combat, powerbar, negative_effects, positive_effects, options, quests, social, spellbook, main_chat, floating_chat_1..4, environment_panel |
| Partial (chrome only; runtime content absent) | inventory — stone backdrop + top frame render, but the nested sub-window chrome (gm3DItemsUI / gmBackpackUI / paperdoll) is sparse and the slots are runtime-filled. The one panel with a possible real gap — investigate the nested-layout / sub-window node handling. |
| Blank (runtime-only window, no static sprites in dump) | examine (appraise window — populated only on examine), and likely the small indicators / smartbox / vitae |
Tooling shipped this sweep
--screenshot <path>headless mode (f778b10): render the loaded panel (dump or dat) to a PNG off-screen viaPanelFbo+glReadPixels+ ImageSharp, then exit. Hidden window (IsVisible=false). The autonomous self-verification primitive.- Contact-sheet montage via PowerShell
System.Drawing(one image, 26 thumbs) — the cheap per-sweep overview (studio-shots/_contact.png, gitignored).
Rect basis (confirmed in DumpLayout)
Dump rect fields are ABSOLUTE retail screen coords; DumpLayout converts to parent-relative
(child.Left = child.Rect.X - parent.Rect.X) and places the root at (0,0). Verified correct by
the toolbar (icons land precisely) + vitals.
Next (loop)
- Inventory nested chrome — determine whether the sub-window content is missing because
(a) those nodes are
Groups with no static sprite (expected), or (b)DumpLayoutisn't expanding abase_layout_idsub-layout reference (a fixable bug). Dump the inventory panel's nodewidget_kind/rect/image_idlist and compare to what rendered. - Spot-confirm the remaining blanks (
indicators/smartbox/vitae) are runtime-only. - The dump source is functionally complete as a static previewer; richer (live-data) previews are the dat-import + fixture path (the parked Task 4 bags/equip), not the dump path.