Reconcile the ~50 frontend files that consumed the old hand-written types against the stricter generated bindings (141 -> 0 svelte-check errors): - Nullable strictness: null-coalesce/guard at consumer sites; widen shared helpers (CachedImage.tag, ticksToSeconds, formatDuration, getSessionIcon, session store send*/transferToRemote) to accept null. - Field-name fixes exposed by codegen: userData.played -> isPlayed; remote NowPlayingItem uses album (not albumName); ArtistItem id/name. - player.ts: normalize remote NowPlayingItem -> MediaItem in mergedMedia. - ArtistItem now serializes camelCase (PascalCase alias retained for Jellyfin deserialize); update its serialize test. - Update downloads.test.ts to the bundled { request } shape; complete the sessions.test.ts NowPlayingItem mock. Frontend: svelte-check 0 errors, vitest 448 passing. Backend: 387 passing.