- VideoNode upload now goes through backend (/jobs/upload via uploadCanvasVideo)
for a stable reloadable URL instead of a session-only blob: that leaked and
broke on reload; cleanNodeForStorage also strips blob: URLs
- useCachedMediaUrl: record real blob.size (chunked videos reported 0, making the
LRU byte cap a no-op); guard the catch path with the race token
- useApi: send credentials when reading reference images; drop the node-level
video poll that duplicated the Canvas-level syncPendingVideoNodes loop
- request.js: 60s timeout (was ~8.3h) + withCredentials
- remove dead getVideoTaskStatus/pollVideoTask that ignored taskId
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>