Scene Cache Viewer

Client-side chunk cache demo — chunk URL is the cache key. Play scenes sharing a performance to watch cross-scene cache hits. (HLS experimentation goal G7)

Public Feed

Load the feed to list playable scenes

Player

Select a scene from the feed

Client-Side Cache Architecture

┌─────────────┐ demuxed frames ┌──────────────────────────┐ │ <video> │ ◄────────────────── │ hls.js (ABR, buffering) │ └─────────────┘ └──────────┬───────────────┘ │ every playlist/.ts request ┌──────────▼───────────────┐ │ CachingLoader (custom) │ │ key = chunk URL │ └──────┬─────────┬─────────┘ HIT ──┘ └── MISS ┌────────────▼──┐ ┌──▼─────────────────┐ │ Chunk Cache │ │ CloudFront CDN │ │ Map<url,bytes>│◄──┤ users/{u}/media/ │ │ LRU by bytes │put│ {m}/hls/*.ts │ └───────────────┘ └────────────────────┘ Why this works: HLS-manifest-stitched scenes reference each performance's ORIGINAL chunk URLs — the same URL appears in every scene that includes that performance. URL-keyed caching therefore gives cross-scene reuse for free. MediaConvert-stitched scenes have scene-private chunk URLs (scenes/{id}/playback/hls/*) — never shared.
Demo script: ① play a scene (all MISS — network) ② replay it (all HIT) ③ play a DIFFERENT scene that shares a performance (HITs for shared chunks only — the cross-scene win). In-memory for the demo; a production client would use CacheStorage/disk with the same URL key.

Cache Stats (live)

0
Hits
0
Misses
0
Chunks
0
Evicted
hit rate 0%
0
Bytes from cache
0
Bytes from network
0
Cache size

Request Log

No requests yet

Cache Contents — by performance media

Cache key = full chunk URL (scene-independent CloudFront path). Each group = one performance's media folder. "Used by scenes" > 1 proves cross-scene chunk reuse. ▪ cached ▪ hit at least once. Click a group to list its keys.

Cache is empty