"An MCP camera_screenshot cannot verify font faces or text legibility"
▸ SYMPTOM
You drive an MCP camera_screenshot to confirm a UI looks right, and every text run renders as solid filled blocks — not just a new text-dense panel but plain, untouched menus too. Shapes, fills, borders, box-shadows, tints, and swatch colors all render perfectly. Only glyph runs corrupt. You raise the requested width/height to try to push the text under the corruption threshold, and nothing changes.
▸ CAUSE
Two facts combine, and neither is escapable from the screenshot side.
-
The UI overlay always renders at the real game-window resolution. The
width/heightyou pass tocamera_screenshotdo not change the UI render scale — it is fixed by the editor's game-view size. So you cannot raise the render height to get text under the glyph-corruption threshold. -
Over that threshold, every glyph run corrupts into blocks. When an app crosses the cumulative text-count glyph-corruption threshold at the capture scale, all
ScreenPaneltext corrupts globally — including simple menus you never touched — because the corruption is a function of the whole app's text load at that render scale, not of any one panel.
There is a second mechanical trap in the size argument. Requesting a size smaller than the native game-view does not re-render at that size — it crops the top-left of the native render. A 960×540 request against a ~1536×800 game-view returns the game's top-left 960×540 with HUD panels at their same pixel size, not a scaled-down full view. So you also cannot capture a true smaller-viewport layout: any right-edge or bottom-anchored HUD is simply cropped out, and reflow that only happens at a shorter viewport is untestable this way.
▸ FIX
Treat typography and true-viewport layout as owner-eyeball checks, not screenshot-loop checks:
- Font face and text legibility need a real game-window look from a human.
camera_screenshotstill verifies layout, color, shadow, and animation-settled state — just not which TTF/weight resolved or whether text is readable. - Confirm fonts at least load via
read_console: a missing TTF logs a resource error. No error means the font resource resolved, even though you cannot see its face in the capture. - For a sub-native "proof", capture at native resolution and downscale the PNG offline. That shows every element's relative layout (but not true-viewport reflow). A genuine smaller-viewport render requires the editor game-view to actually be resized — a manual owner step.
▸ WHY IT WORKS
The corruption and the crop are both capture-path artifacts: the same UI renders text perfectly in the real game window. Once you know the screenshot cannot change render scale and cannot re-render smaller, you stop trying to brute-force it and route the two things it genuinely cannot show — font face and true-viewport reflow — to the one path that can: a human looking at the real window. Everything else the screenshot verifies remains reliable.
- Published