Open-source visual memory

Give agents the scene, not the whole stream.

Sight Cache turns RTSP camera history into compact contact sheets, then lets AI agents inspect the exact frames they need through protected MCP tools.

Self-hosted on your Cloudflare account

One hour becomes six quick, inspectable contact sheets.

From camera to context

Keep the evidence. Reduce the looking.

Agents start with a compact hour-level overview, narrow in on a suspicious minute, compare the frames that stand out, and retrieve an original only when it adds useful evidence.

  1. 01

    Capture near the camera

    The Node.js collector uses FFmpeg to spool timestamped JPEGs and upload them sequentially.

  2. 02

    Store originals at the edge

    The Ingest Worker authenticates each device, validates the image, and writes it to R2.

  3. 03

    Summarize complete windows

    A scheduled queue builds hourly sheets; minute sheets are built on demand after a five-minute finalization delay.

  4. 04

    Inspect through MCP

    The Image Worker exposes a stateless path protected by Cloudflare Access OAuth.

Six tools

Move from overview to exact evidence.

The inspection path stays deliberate. List devices, scan contact sheets, find nearby timestamps, compare the frames worth a second look, then open only the originals that matter.

  • list_devicesFind active cameras and time zones
  • get_contact_sheetReview a minute or hour
  • list_framesLocate exact captures
  • get_frame_comparison_sheetCompare 2–10 frames side by side
  • get_original_frameRetrieve unmodified evidence
  • create_original_frame_downloadsShare up to 20 originals when enabled
// One sheet, with exact metadata for every slot
{
  "deviceName": "front-entry",
  "unit": "hour",
  "beginAt": "2026-09-13T10:00:00Z",
  "sheetNumber": 5,
  "sheetCount": 6,
  "slots": [
    {
      "slot": 3,
      "capturedAt": "2026-09-13T10:42:03Z",
      "capturedAtLocal": "2026-09-13T18:42:03+08:00",
      "deltaMs": 3000,
      "status": "captured"
    }
  ]
}

A small, separated system

Each service does one clear job.

Capture stays close to the camera. Storage and processing run on Cloudflare. Inspection remains behind your Access policy.

At the camera

A lightweight collector captures RTSP frames without sending a continuous video stream.

  • Node.js
  • FFmpeg
  • Docker

On Cloudflare

Three Workers authenticate, store, summarize, schedule, and serve the camera history.

  • Workers
  • D1
  • R2
  • Images
  • Queues
  • Cron

With the agent

Any compatible MCP client can inspect authorized history through a stateless endpoint.

  • MCP
  • Managed OAuth

Private footage stays deliberate

Protection is part of the pipeline.

Sight Cache provides the controls, while you retain ownership of the account, Access policies, storage lifecycle, and every camera credential.

  • Protect admin and MCP routes with matching Cloudflare Access applications.
  • Store token hashes only; complete collector tokens appear once when issued.
  • Set an R2 lifecycle rule that matches how long your footage should remain.
  • Keep frame download URLs off by default; when enabled, links expire after 30 minutes.

Bring one camera online

Start with the repository and a clear retention plan.

Provision the Cloudflare resources, deploy the three Workers, then run one collector near each RTSP camera. The guides document every binding and environment value.

  • Node.js 24.19+
  • FFmpeg or Docker
  • Cloudflare Workers Paid

Clone the project

git clone https://github.com/catwithlover/sight-cache.git

  1. 1
    Provision D1, R2, Queues, Images, and two Access applications.
  2. 2
    Configure and deploy the Admin, Ingest, and Image Workers.
  3. 3
    Create a device, save its one-time token, and start the collector.