peepshow/ sinks

Catalogue 95 destinations

The peepshow sink catalogue

95 places a video can land.

Every peepshow run can fan out to any number of destinations at once. Pick what fits — databases, vector stores, object storage, chat, trackers, knowledge bases, whiteboards, analytics, observability, the IDE. Each one is pure transform + thin CLI, fully tested.

Looking for a specific outcome? Use the sink finder →

drop · process · fan-out · report

Category

Use case

Deployment

Reel #01 · database

SQLite

One file, zero server, full SQL. Ships with auto-schema and upsert.

Local SQL archive
Reel #02 · database

Postgres

Write every run + frame into Postgres. Idempotent upserts, transactional, cloud-friendly.

Team SQL archive
Reel #03 · storage

S3-compatible storage

AWS · MinIO · Cloudflare R2 · DigitalOcean Spaces · Backblaze B2 · Wasabi · GCS.

Object storage
Reel #04 · integration

Webhook

The generic sink. If something speaks HTTP, this connects peepshow to it.

Generic HTTP
Reel #05 · chat

Slack

Incoming-webhook push. Title, thumbnail, deep link to the first frame.

Team chat
Reel #06 · chat

Discord

Discord webhook. Thumbnails in the embed, full frames as attachments.

Community chat
Reel #07 · integration

GraphQL

Typed ingestion into Hasura · Postgraphile · Apollo · Supabase · Contentful · anything.

Typed HTTP
Reel #08 · knowledge

Notion

Creates a page with metadata properties, embedded thumbnails, and the full frame gallery.

Knowledge base
Reel #09 · knowledge

Obsidian

File a note, embed every frame, backlink from an index, all inside a local vault.

Local knowledge
Reel #10 · integration

IDE attachments

Drop frames directly into Cursor · Windsurf · Zed · VS Code / Copilot attachments.

Editor integration
Reel #11 · tracker

Linear

GraphQL + uploads. One issue per run, with frames inline, team/label configurable.

Issue tracker
Reel #12 · tracker

GitHub Issues

REST v3. Repo / labels / assignees configurable. Frames attached via image URLs.

Issue tracker
Reel #13 · observability

Sentry

Frames as attachments, metadata as tags, peepshow run ID as fingerprint.

Observability
Reel #14 · vector

Chroma

Text embeddings over the metadata + caption. Frame paths as IDs.

Vector DB
Reel #15 · vector

Qdrant

Named vectors, payload metadata, filter-ready. Works with Qdrant Cloud or self-hosted.

Vector DB
Reel #16 · vector

Pinecone

Serverless. Auto-detects namespace. Embedding of metadata + caption per frame.

Vector DB
Reel #17 · vector

pgvector

Keep runs + frames + embeddings in one Postgres. One database, full SQL over vectors.

Vector-in-SQL
Reel #18 · database

MongoDB

One document per run, frames as a subdocument array. Works with Atlas or self-hosted.

Document store
Reel #19 · knowledge

MemPalace

Per-run markdown + frames into a directory MemPalace mines, optionally auto-mined on every run.

Local AI memory
Reel #20 · sink

Zep

One system message + one user message per frame, into a persistent Zep session graph.

Agent memory
Reel #21 · sink

Mem0

Mem0 turns the peepshow summary + frame list into retrievable, user-scoped memories.

Agent memory
Reel #22 · database

Weaviate

One object per frame, indexed by whatever vectorizer the class is configured with.

Vector DB
Reel #23 · database

Milvus

Zero-vector rows now, real embeddings wired in by your own pipeline later.

Vector DB
Reel #24 · sink

Letta

Single user message; Letta's built-in memory pipeline distils it into recall memory.

Agent memory
Reel #25 · webhook

Jira

ADF description (strategy, codec, duration, resolution, director) plus one attachment per frame.

Issue tracker
Reel #26 · webhook

Asana

Plain-text notes with the run summary plus one multipart attachment per extracted frame.

Issue tracker
Reel #27 · webhook

ClickUp

Markdown description summarising the run, plus one multipart attachment per frame.

Issue tracker
Reel #28 · webhook

Shortcut

Markdown description, `POST /files` per frame, then `PUT /stories/{id}` to link them.

Issue tracker
Reel #29 · webhook

Trello

Markdown description + one multipart attachment per frame. Key + token auth.

Issue tracker
Reel #30 · webhook

PostHog

One `peepshow_run` event per run, optional `peepshow_frame` events per frame.

Product analytics
Reel #31 · webhook

Plausible

`peepshow_run` event on your Plausible site — props include codec, duration, director, studio.

Product analytics
Reel #32 · webhook

Datadog

`/api/v1/events` with an aggregation key so repeat runs cluster under one event.

Observability
Reel #33 · webhook

Honeycomb

`POST /1/events/<dataset>` with a flat wide event — dotted keys, no schema.

Observability
Reel #34 · webhook

New Relic

`/v1/accounts/<id>/events` with camelCase attributes; one `PeepshowRun` event per run, queryable via NRQL.

Observability
Reel #35 · webhook

PagerDuty

`trigger` payload with peepshow metadata and optional frame images.

Observability
Reel #36 · webhook

Opsgenie

`POST /v2/alerts` with run metadata, priority, tags, and the full frame list.

Observability
Reel #37 · webhook

Grafana OnCall

POST a formatted-webhook JSON body with frames, metadata, and transcript snippet.

Observability
Reel #38 · webhook

Event Track

Provider selected by `EVENT_TRACK_PROVIDER`; same properties, three wire formats.

Product analytics
Reel #39 · webhook

Telegram

One `sendMessage` summary + auto-chunked `sendMediaGroup` albums of up to 10 photos.

Messaging
Reel #40 · webhook

WhatsApp

POST /media uploads per frame, one text summary, one image message per frame.

Messaging
Reel #41 · webhook

Microsoft Teams

FactSet with Strategy / Frames / Codec / Duration / Resolution / Director / Studio.

Team chat
Reel #42 · webhook

Mattermost

Slack-compatible body: coloured attachment with fields, optional image attachments.

Team chat
Reel #43 · webhook

Rocket.Chat

Slack-compatible attachment + optional image attachments when a base URL is served.

Team chat
Reel #44 · webhook

Zulip

Markdown message via `/api/v1/messages` — stream + topic or private DM.

Team chat
Reel #45 · webhook

Matrix

Upload each frame to the homeserver media repo, then send an m.text + per-frame m.image.

Messaging
Reel #46 · webhook

Miro

One `POST /v2/boards/{id}/images` per frame; frames lay out in ordinal-driven columns / rows.

Whiteboard
Reel #47 · webhook

Figma

File-level comment with metadata + frame list, optionally linked to hosted images.

Design
Reel #48 · webhook

Outline

Markdown doc in a collection — metadata section plus a numbered frames list.

Wiki
Reel #49 · webhook

Confluence

Confluence Cloud v2 page with metadata list + numbered frames list in storage-format XHTML.

Wiki
Reel #50 · filesystem

Logseq

Markdown page with `key:: value` properties, block tree, and embedded frame images.

Local knowledge
Reel #51 · filesystem

Google Cloud Storage

Native `@google-cloud/storage` SDK with ADC — workload identity, user auth, or SA keys.

Object storage
Reel #52 · filesystem

Firebase Storage

REST-only — Firebase `v0` upload endpoint with pre-issued token or service-account JWT.

Object storage
Reel #53 · filesystem

Azure Blob Storage

Native Azure REST via `@azure/storage-blob` — connection string or account + key.

Object storage
Reel #54 · filesystem

Supabase Storage

REST-only — no SDK, works against hosted or self-hosted Supabase out of the box.

Object storage
Reel #55 · filesystem

Dropbox

`/2/files/upload` per frame under a timestamped per-run prefix.

Object storage
Reel #56 · filesystem

Google Drive

Drive v3 multipart upload — raw fetch + Bearer token, no `googleapis` SDK.

Object storage
Reel #57 · filesystem

Box

`POST /2.0/files/content` simple upload per frame under a per-run subfolder.

Object storage
Reel #58 · tracker

Height

REST `POST /tasks` with a markdown description covering strategy, codec, duration, resolution, and every frame path.

Issue tracker
Reel #59 · integration

Aider

Drops a `## peepshow run —` block into `.aider.chat.history.md` with frame refs and an `mm:ss` transcript inline.

Agent transcript
Reel #60 · integration

Pipedream

Drop-in low-code automation: fire a Pipedream workflow on every extracted video, with signed requests and automatic retry on 429/5xx.

Low-code workflow
Reel #61 · integration

Continue

Drop frames, `manifest.json`, and (optionally) `transcript.md` into `.continue/context/` so the next Continue prompt has the whole clip as context.

Editor integration
Reel #62 · integration

Cody

Drop frames, `manifest.json`, and (optionally) `transcript.md` into `.cody/context/` so the next Cody prompt has the whole clip as context.

Editor integration
Reel #63 · integration

Raycast

Drop a per-run JSON manifest + a sibling frame folder into Raycast's script-commands directory, plus a one-time companion script — "Show last peepshow run" — that opens the newest run in Finder.

macOS launcher
Reel #64 · integration

iMessage

One summary bubble + up to `IMESSAGE_MAX_FRAMES` frame attachments sent through `osascript -` to Messages.app — iMessage or SMS.

macOS messaging
Reel #65 · integration

Apple Notes

Build an HTML body (title, metadata, inline frames, transcript), pipe an AppleScript program into `osascript -`, land a new note in Notes.app under the folder of your choice.

macOS knowledge
Reel #66 · integration

Bear

Build a markdown body (metadata, tags, frame links, transcript), encode it into a `bear://x-callback-url/create` URL, dispatch via `open` so Bear's URL handler picks it up.

macOS / iOS markdown
Reel #67 · integration

OpenAI Files

Multipart POST every frame to `/v1/files` with `purpose=vision`, then upload a stitched `manifest.json` with `purpose=assistants`. File IDs are ready to hand to a Responses API call, a Custom GPT Project, or an Assistants vector store.

LLM file bucket
Reel #68 · integration

macOS Shortcuts

Invoke the macOS `shortcuts` CLI with a named Shortcut, passing either the full peepshow JSON payload or each frame image via `--input-path`.

macOS automation
Reel #69 · integration

Zapier

Drop-in no-code automation: fire a Zap on every extracted video. Flat top-level fields so Zapier's variable picker auto-discovers every key — no Code step needed.

No-code workflow
Reel #70 · integration

Apple Reminders

Build a plain-text body (run summary, frame paths, transcript snippet), pipe an AppleScript program into `osascript -`, land a new reminder in the list of your choice — optionally with a due date.

macOS task tracker
Reel #71 · integration

Things 3

Build a `things:///add?title=...&notes=...&tags=...&list=...&when=...` x-callback-url and dispatch it via macOS `open`. Things 3 picks the URL up automatically — no AppleScript, no REST, no auth.

macOS task tracker
Reel #72 · chat

ntfy

Simple HTTP POST to a topic. Phones, desktops, and CLI clients subscribed to the topic get the alert instantly.

Push notifications
Reel #73 · chat

Apprise

One sink, every notification channel. Apprise normalises Slack, Discord, Telegram, email, SMS, ntfy, Pushover, and dozens more.

Notification fan-out
Reel #74 · integration

Airtable

Auto-creates a row with Run ID, Title, Frames, Duration, Transcript, Thumbnail URL, Created At. Pair with Airtable views, automations, and interfaces.

Spreadsheet database
Reel #75 · database

ClickHouse

Insert each peepshow run into a ClickHouse table via the HTTP interface. Auto-creates the schema on first write; designed for high-cardinality run archives + ad-hoc analytics.

OLAP archive
Reel #76 · database

DuckDB

Append each peepshow run as one row in a local DuckDB file via the `duckdb` CLI. Sibling to the SQLite sink — same single-file simplicity, columnar query speed.

Embedded analytics
Reel #77 · search

Elasticsearch

POST one JSON document per peepshow run to an Elasticsearch (or OpenSearch — same API) index. Full-text search transcripts, titles, container tags out of the box.

Full-text + search
Reel #78 · knowledge

Granola

Write a self-contained markdown bundle (note + frames) into a Granola import directory. Granola's public API is read-only, so peepshow uses a file-drop path the user drags into Granola — no upload, no clipboard juggling.

Meeting notes import
Reel #79 · search

Meilisearch

Index one document per peepshow run into a Meilisearch index. Hybrid full-text + auto-embedding search; self-hosted in one Docker container.

Hybrid search
Reel #80 · search

Typesense

Soft-creates the collection on first write and upserts one document per peepshow run keyed on `id == run_id`.

Hybrid search
Reel #81 · vector

Redis Vector

Spawns the `redis-cli` binary to issue `FT.CREATE` (idempotent) + `HSET`. Soft-fails when the RediSearch module isn't loaded; still writes the hash.

In-memory search
Reel #82 · chat

Pushover

Posts a form-encoded message to `https://api.pushover.net/1/messages.json`. Title, body, priority, optional click-through URL — all the standard Pushover fields are wired up.

Push notifications
Reel #83 · chat

Bluesky

Opens a session against the configured PDS with an app password, then writes a `app.bsky.feed.post` record. Title + summary, capped at 300 chars to fit Bluesky's post limit.

Social posting
Reel #84 · knowledge

Coda

Auto-creates a row with Run ID, Title, Frames, Duration, Transcript, Thumbnail URL, Created At. Pair with Coda automations, packs, and dashboards.

No-code docs platform
Reel #85 · database

Snowflake

POST one row per peepshow run into a Snowflake table via the SQL API v2. Auto-creates the table on first write; subsequent runs append. Works against any Snowflake account — AWS, Azure, or GCP.

Cloud data warehouse
Reel #86 · database

BigQuery

Stream one row per peepshow run into a Google BigQuery table via the `tabledata.insertAll` REST endpoint. Uses an OAuth2 access token (Bearer) — service-account or user credentials both work.

Cloud data warehouse
Reel #87 · chat

Fireflies.ai

POSTs the `uploadAudio` GraphQL mutation against `https://api.fireflies.ai/graphql` with a publicly reachable audio URL. Pair with `s3` / `gcs` to mirror peepshow's extracted audio.

AI meeting assistant
Reel #88 · chat

Zoom

POSTs `/v2/chat/users/me/messages` with the summary text. Use server-to-server OAuth to mint short-lived access tokens, then DM a teammate or post to a channel JID.

Zoom Team Chat
Reel #89 · integration

Plane

POST one issue per peepshow run to a [Plane](https://plane.so) workspace project via the REST API. Cloud or self-hosted — same endpoint shape, same Bearer auth, same JSON body.

Open-source tracker
Reel #90 · chat

Mastodon

POST a status to `https://<instance>/api/v1/statuses` with form-encoded `status` + `visibility`. Works against the canonical mastodon.social or any self-hosted instance.

Fediverse social
Reel #91 · knowledge

Anytype

POST one object per peepshow run into a local [Anytype](https://anytype.io) space via the desktop app's HTTP API on localhost:31009. Notion-shaped but fully local; data lives in your own encrypted vault.

Local-first knowledge
Reel #92 · index

Algolia

POST one record per peepshow run to `https://<appId>-dsn.algolia.net/1/indexes/<index>` with the standard run schema. `objectID` is pinned to the run id so re-runs upsert in place.

Hosted search
Reel #93 · integration

Otter.ai

Otter.ai has no public write API as of 2026 — this sink ships the `peepshow → webhook` half of `peepshow → webhook → (Zapier / Make / n8n) → Otter`. POSTs a flat note + transcript JSON body.

Meeting transcript
Reel #94 · database

Databricks

POST one row per peepshow run into a Databricks SQL warehouse via `POST /api/2.0/sql/statements/`. Auto-creates the Delta table on first write; subsequent runs append. Works against AWS, Azure, and GCP workspaces.

Lakehouse warehouse
Reel #95 · database

Cassandra / Astra

POST one row per peepshow run as JSON to `<baseUrl>/v2/keyspaces/<keyspace>/<table>`. Works against [DataStax Astra](https://www.datastax.com/products/datastax-astra) (managed Cassandra) and self-hosted [Stargate](https://stargate.io) gateways.

Wide-column store