4K Chat logo

    AI insights

    Fork any stream to AI. Still no servers.

    Every stream in a call is already a live track on your device. Cloning one costs nothing — no re-encode, no extra uplink — so a copy can be handed to analysis while the call carries on untouched. Where that copy goes is entirely your choice, and it is off until you make one.

    The fork, in one picture

      local cam ─┐
      screen  ───┼─► track.clone() ─► frame tap (worker)
      camera src ┤          │  throttled fps, downscaled
      remote pc ─┘          ▼
                     ┌──────────────┐
                     │ Insight Bus  │
                     └──────┬───────┘
            ┌───────────────┼────────────────┐
            ▼               ▼                ▼
       on-device      your receiver     your API key
       (worker)       (WHIP / socket)   (BYO vision)
                            │
                            ▼
                 tile overlay + insights feed

    The clone is read as decoded frames, downscaled to a few hundred pixels, and throttled to one to five frames per second. That is enough for detection and scene understanding, and small enough that the analysis path never competes with the call for bandwidth or GPU.

    Four places a tap can go

    On-device

    A worker on your machine downsamples the fork and runs motion and scene-change detection. Zero egress, works with no internet at all, and it is the default.

    Publish to your own receiver

    Send the cloned track by WHIP to a receiver you run — a box on the LAN, a workstation, or your own cloud. Hardware-encoded, no transcode, no third party in the path.

    Your endpoint

    Post downscaled frames to a WebSocket or HTTP endpoint you control and read JSON insights back over the same connection.

    Vision API with your key

    Point a tap at a vision API using your own key. The key is stored on your device and never reaches our backend, because there is no backend in the media path.

    Consent is part of the design

    Off by default

    No tap exists until someone creates one. There is no ambient analysis and no default endpoint.

    Visible to the room

    Tapping a remote participant announces it over the data channel, and everyone sees a persistent badge for as long as it runs.

    Consent is enforced locally

    Any participant can refuse taps on their stream. The refusal is applied on the tapping device, so the fork simply never starts.

    Never at the call's expense

    Taps are throttled to a few frames per second, yield under uplink pressure, and suspend when the tab is hidden. Human video always wins.

    End-to-end encryption is unaffected. A tap reads frames that this device has already decoded for display — it does not weaken the transport, and it gives no one else access to the media.

    What it unlocks

    Questions we get

    Does this mean 4K Chat sees my video?

    No. There is no media server, and taps run on your device. If you configure an external sink, the frames go to the endpoint you named and nowhere else.

    Does a tap cost extra bandwidth?

    On-device taps cost none. External sinks send a few downscaled frames per second, and WHIP publishing is marked low priority so people in the call are served first.

    Which browsers support it?

    Chromium browsers and Edge get the efficient frame path. Elsewhere it falls back to a canvas tap, which works but costs a little more CPU.

    Can I bring my own model?

    Yes — that is the point of the endpoint and API sinks. Run whatever you like on your own receiver and hand back a small JSON event; the insights feed and tile overlays render it.

    Do participants know when they are analysed?

    Yes. Tapping a remote stream announces itself in the room and shows a persistent badge, and anyone can refuse taps on their own stream.