From audit #297 (G3). server/app/ai_signs.py has a complete provider abstraction (registry, request model, storage, dedup, thumbnails) but only one registered provider: local-stub, which returns a solid-colour PNG with no network call. Wire one real image-generation backend behind the existing SignProvider interface (#266 intent: ChatGPT image gen / Nano Banana). Keep local-stub registered for offline use and tests. iPad UI and Unity decal path already work end-to-end — this is a contained drop-in.
From audit #297 (G3).
server/app/ai_signs.pyhas a complete provider abstraction (registry, request model, storage, dedup, thumbnails) but only one registered provider:local-stub, which returns a solid-colour PNG with no network call. Wire one real image-generation backend behind the existingSignProviderinterface (#266 intent: ChatGPT image gen / Nano Banana). Keeplocal-stubregistered for offline use and tests. iPad UI and Unity decal path already work end-to-end — this is a contained drop-in.