PWARegistry already normalizes screenshots. You should not re-interpret the original Web App Manifest form_factor yourself.
If your UI is narrow / mobile, use:
application.screenshots.narrow
If your UI is wide / desktop, use:
application.screenshots.wide
Never mix narrow and wide in the same gallery.
const shots = app.application.screenshots;
const mobile = shots.narrow;
const desktop = shots.wide;
If a set is empty, that form factor was not published (or the files were not reachable images). Do not fill the gap with the other set unless you have a documented fallback for unspecified shots:
const mobile =
shots.narrow.length ? shots.narrow : shots.unspecified;
const desktop =
shots.wide.length ? shots.wide : shots.unspecified;
unspecified means the manifest did not declare form_factor. platformSpecific lists shots that declared a platform member — extra metadata, not a third gallery to blend in.
Like icons, screenshot src values are origin URLs. They are not proxied.
capabilities.narrowScreenshots / wideScreenshots tell you whether those sets are non-empty, which is useful when filtering a catalog (“has desktop screenshots”).