the symptom, in your words

"An MCP camera_screenshot cannot verify font faces or text legibility"

✓ verified on 26.07.15a
lane Building UIposted

▸ 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.

  1. The UI overlay always renders at the real game-window resolution. The width/height you pass to camera_screenshot do 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.

  2. 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 ScreenPanel text 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_screenshot still 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.

Verified on engine 26.07.15a: seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?
changelog
  • Published

Want to know when new guides or fixes drop? Join the community to help build this out. Report gotchas, flag outdated fixes, or just lurk.

Join the Discord