Skip to content

Reels / Shorts — Detailed#

flowchart TB
  subgraph Creator
    APP([Creator app])
    EDIT[Editor + effects + audio]
  end

  subgraph Upload
    PRE[Resumable upload]
    OBJ[(Origin)]
    META[Metadata]
    TR([Transcoder<br/>vertical 1080×1920 ladder])
    THUMB[Auto cover]
    AUD[Audio extract + match]
    AI([Safety / NSFW / copyright])
  end

  subgraph Distribution
    CDN[CDN]
    PREFETCH[Aggressive prefetch<br/>next-3 in feed]
  end

  subgraph Feed[Vertical Feed]
    SESSION[Session feed builder]
    CG([Candidate Gen<br/>two-tower + recent + collab])
    RANK([Multi-task DNN ranker])
    RR([Reranker / diversity / safety])
    EXPLORE[Exploration bucket]
  end

  subgraph Signals
    WATCH[Watch / replay / completion]
    SHARE[Share / save]
    SKIP[Skip / scroll fast]
    LIKE[Like / comment / follow]
    AUDIO[Audio engagement]
  end

  subgraph Stores
    VDB[(Video metadata)]
    EMB([(Embeddings)])
    HIST[(Watch history)]
    USR([(User profile)])
    AUDB[(Audio library / fingerprints)]
  end

  subgraph ML
    FS[Feature store - near-RT]
    TRAIN[Training pipelines]
    SERVE([Model server fleet])
    AB[A/B framework]
  end

  subgraph Side
    REMIX[Remix / Duet / Reactions]
    SHOP[Shopping tags]
    AD[Ads stitched in feed]
  end

  APP --> EDIT --> PRE --> OBJ
  PRE --> TR --> CDN
  TR --> THUMB
  TR --> AUD --> AUDB
  TR --> AI
  PRE --> META --> VDB
  Viewer[Viewer] --> CDN
  Viewer --> SESSION --> CG --> RANK --> RR --> Viewer
  Viewer --> PREFETCH
  Signals --> FS --> CG
  Signals --> FS --> RANK
  EMB --- CG
  HIST --- CG
  USR --- CG
  AB --- SERVE
  SERVE --- RANK
  Side --- Viewer

    classDef client fill:#dbeafe,stroke:#1e40af,stroke-width:1px,color:#0f172a;
    classDef edge fill:#cffafe,stroke:#0e7490,stroke-width:1px,color:#0f172a;
    classDef service fill:#fef3c7,stroke:#92400e,stroke-width:1px,color:#0f172a;
    classDef datastore fill:#fee2e2,stroke:#991b1b,stroke-width:1px,color:#0f172a;
    classDef cache fill:#fed7aa,stroke:#9a3412,stroke-width:1px,color:#0f172a;
    classDef queue fill:#ede9fe,stroke:#5b21b6,stroke-width:1px,color:#0f172a;
    classDef compute fill:#d1fae5,stroke:#065f46,stroke-width:1px,color:#0f172a;
    classDef storage fill:#e5e7eb,stroke:#374151,stroke-width:1px,color:#0f172a;
    classDef external fill:#fce7f3,stroke:#9d174d,stroke-width:1px,color:#0f172a;
    classDef obs fill:#f3e8ff,stroke:#6b21a8,stroke-width:1px,color:#0f172a;
    class APP,Viewer client;
    class CDN edge;
    class EDIT,PRE,META,THUMB,AUD,PREFETCH,SESSION,WATCH,SHARE,SKIP,LIKE,AUDIO,FS,TRAIN,AB,REMIX,SHOP,AD service;
    class OBJ,VDB,EMB,HIST,USR,AUDB datastore;
    class TR,AI,CG,RANK,RR,SERVE compute;
    class EXPLORE storage;

What's distinctive vs YouTube/TikTok#

  • Vertical-first ladders: 9:16, 1080×1920 baseline.
  • Aggressive prefetch of the next 1–3 candidates while user watches current → snappy scroll.
  • Often shorter session feeds (50–100 items) regenerated frequently.
  • Heavy audio reuse: shared sound library drives trend amplification.

Prefetch policy#

  • Decode first second of next video off-screen.
  • Cancel and reclaim if user shares / closes / skips early.
  • Balance with mobile data — pause prefetch on cellular if user disables.

Cold start#

  • Without watch history, use region + device + onboarding interests to seed.
  • Exploration bucket injects fresh creators to learn signals.

Trade-offs#

  • Vertical ladders double storage if you also serve horizontal contexts (Reels embedded in Facebook posts).
  • Per-impression personalization demands fast feature store and tiny ranker latency.
  • Audio licensing for music is a major business / legal surface.

Glossary & fundamentals#

Concepts referenced in this design. Each row links to its canonical page; the tag column shows whether it is a high-level (HLD) or low-level (LLD) concept.

Tag Concept What it is Page
HLD CDN edge caching for static assets cdn
LLD Creational patterns Singleton, Factory, Builder, Prototype creational-patterns