peepshow/ sinks
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 →
Category
Use case
Deployment
SQLite
One file, zero server, full SQL. Ships with auto-schema and upsert.
Local SQL archive Reel #02 · databasePostgres
Write every run + frame into Postgres. Idempotent upserts, transactional, cloud-friendly.
Team SQL archive Reel #03 · storageS3-compatible storage
AWS · MinIO · Cloudflare R2 · DigitalOcean Spaces · Backblaze B2 · Wasabi · GCS.
Object storage Reel #04 · integrationWebhook
The generic sink. If something speaks HTTP, this connects peepshow to it.
Generic HTTP Reel #05 · chatSlack
Incoming-webhook push. Title, thumbnail, deep link to the first frame.
Team chat Reel #06 · chatDiscord
Discord webhook. Thumbnails in the embed, full frames as attachments.
Community chat Reel #07 · integrationGraphQL
Typed ingestion into Hasura · Postgraphile · Apollo · Supabase · Contentful · anything.
Typed HTTP Reel #08 · knowledgeNotion
Creates a page with metadata properties, embedded thumbnails, and the full frame gallery.
Knowledge base Reel #09 · knowledgeObsidian
File a note, embed every frame, backlink from an index, all inside a local vault.
Local knowledge Reel #10 · integrationIDE attachments
Drop frames directly into Cursor · Windsurf · Zed · VS Code / Copilot attachments.
Editor integration Reel #11 · trackerLinear
GraphQL + uploads. One issue per run, with frames inline, team/label configurable.
Issue tracker Reel #12 · trackerGitHub Issues
REST v3. Repo / labels / assignees configurable. Frames attached via image URLs.
Issue tracker Reel #13 · observabilitySentry
Frames as attachments, metadata as tags, peepshow run ID as fingerprint.
Observability Reel #14 · vectorChroma
Text embeddings over the metadata + caption. Frame paths as IDs.
Vector DB Reel #15 · vectorQdrant
Named vectors, payload metadata, filter-ready. Works with Qdrant Cloud or self-hosted.
Vector DB Reel #16 · vectorPinecone
Serverless. Auto-detects namespace. Embedding of metadata + caption per frame.
Vector DB Reel #17 · vectorpgvector
Keep runs + frames + embeddings in one Postgres. One database, full SQL over vectors.
Vector-in-SQL Reel #18 · databaseMongoDB
One document per run, frames as a subdocument array. Works with Atlas or self-hosted.
Document store Reel #19 · knowledgeMemPalace
Per-run markdown + frames into a directory MemPalace mines, optionally auto-mined on every run.
Local AI memory Reel #20 · sinkZep
One system message + one user message per frame, into a persistent Zep session graph.
Agent memory Reel #21 · sinkMem0
Mem0 turns the peepshow summary + frame list into retrievable, user-scoped memories.
Agent memory Reel #22 · databaseWeaviate
One object per frame, indexed by whatever vectorizer the class is configured with.
Vector DB Reel #23 · databaseMilvus
Zero-vector rows now, real embeddings wired in by your own pipeline later.
Vector DB Reel #24 · sinkLetta
Single user message; Letta's built-in memory pipeline distils it into recall memory.
Agent memory Reel #25 · webhookJira
ADF description (strategy, codec, duration, resolution, director) plus one attachment per frame.
Issue tracker Reel #26 · webhookAsana
Plain-text notes with the run summary plus one multipart attachment per extracted frame.
Issue tracker Reel #27 · webhookClickUp
Markdown description summarising the run, plus one multipart attachment per frame.
Issue tracker Reel #28 · webhookShortcut
Markdown description, `POST /files` per frame, then `PUT /stories/{id}` to link them.
Issue tracker Reel #29 · webhookTrello
Markdown description + one multipart attachment per frame. Key + token auth.
Issue tracker Reel #30 · webhookPostHog
One `peepshow_run` event per run, optional `peepshow_frame` events per frame.
Product analytics Reel #31 · webhookPlausible
`peepshow_run` event on your Plausible site — props include codec, duration, director, studio.
Product analytics Reel #32 · webhookDatadog
`/api/v1/events` with an aggregation key so repeat runs cluster under one event.
Observability Reel #33 · webhookHoneycomb
`POST /1/events/<dataset>` with a flat wide event — dotted keys, no schema.
Observability Reel #34 · webhookNew Relic
`/v1/accounts/<id>/events` with camelCase attributes; one `PeepshowRun` event per run, queryable via NRQL.
Observability Reel #35 · webhookPagerDuty
`trigger` payload with peepshow metadata and optional frame images.
Observability Reel #36 · webhookOpsgenie
`POST /v2/alerts` with run metadata, priority, tags, and the full frame list.
Observability Reel #37 · webhookGrafana OnCall
POST a formatted-webhook JSON body with frames, metadata, and transcript snippet.
Observability Reel #38 · webhookEvent Track
Provider selected by `EVENT_TRACK_PROVIDER`; same properties, three wire formats.
Product analytics Reel #39 · webhookTelegram
One `sendMessage` summary + auto-chunked `sendMediaGroup` albums of up to 10 photos.
Messaging Reel #40 · webhookPOST /media uploads per frame, one text summary, one image message per frame.
Messaging Reel #41 · webhookMicrosoft Teams
FactSet with Strategy / Frames / Codec / Duration / Resolution / Director / Studio.
Team chat Reel #42 · webhookMattermost
Slack-compatible body: coloured attachment with fields, optional image attachments.
Team chat Reel #43 · webhookRocket.Chat
Slack-compatible attachment + optional image attachments when a base URL is served.
Team chat Reel #44 · webhookZulip
Markdown message via `/api/v1/messages` — stream + topic or private DM.
Team chat Reel #45 · webhookMatrix
Upload each frame to the homeserver media repo, then send an m.text + per-frame m.image.
Messaging Reel #46 · webhookMiro
One `POST /v2/boards/{id}/images` per frame; frames lay out in ordinal-driven columns / rows.
Whiteboard Reel #47 · webhookFigma
File-level comment with metadata + frame list, optionally linked to hosted images.
Design Reel #48 · webhookOutline
Markdown doc in a collection — metadata section plus a numbered frames list.
Wiki Reel #49 · webhookConfluence
Confluence Cloud v2 page with metadata list + numbered frames list in storage-format XHTML.
Wiki Reel #50 · filesystemLogseq
Markdown page with `key:: value` properties, block tree, and embedded frame images.
Local knowledge Reel #51 · filesystemGoogle Cloud Storage
Native `@google-cloud/storage` SDK with ADC — workload identity, user auth, or SA keys.
Object storage Reel #52 · filesystemFirebase Storage
REST-only — Firebase `v0` upload endpoint with pre-issued token or service-account JWT.
Object storage Reel #53 · filesystemAzure Blob Storage
Native Azure REST via `@azure/storage-blob` — connection string or account + key.
Object storage Reel #54 · filesystemSupabase Storage
REST-only — no SDK, works against hosted or self-hosted Supabase out of the box.
Object storage Reel #55 · filesystemDropbox
`/2/files/upload` per frame under a timestamped per-run prefix.
Object storage Reel #56 · filesystemGoogle Drive
Drive v3 multipart upload — raw fetch + Bearer token, no `googleapis` SDK.
Object storage Reel #57 · filesystemBox
`POST /2.0/files/content` simple upload per frame under a per-run subfolder.
Object storage Reel #58 · trackerHeight
REST `POST /tasks` with a markdown description covering strategy, codec, duration, resolution, and every frame path.
Issue tracker Reel #59 · integrationAider
Drops a `## peepshow run —` block into `.aider.chat.history.md` with frame refs and an `mm:ss` transcript inline.
Agent transcript Reel #60 · integrationPipedream
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 · integrationContinue
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 · integrationCody
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 · integrationRaycast
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 · integrationiMessage
One summary bubble + up to `IMESSAGE_MAX_FRAMES` frame attachments sent through `osascript -` to Messages.app — iMessage or SMS.
macOS messaging Reel #65 · integrationApple 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 · integrationBear
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 · integrationOpenAI 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 · integrationmacOS 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 · integrationZapier
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 · integrationApple 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 · integrationThings 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 · chatntfy
Simple HTTP POST to a topic. Phones, desktops, and CLI clients subscribed to the topic get the alert instantly.
Push notifications Reel #73 · chatApprise
One sink, every notification channel. Apprise normalises Slack, Discord, Telegram, email, SMS, ntfy, Pushover, and dozens more.
Notification fan-out Reel #74 · integrationAirtable
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 · databaseClickHouse
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 · databaseDuckDB
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 · searchElasticsearch
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 · knowledgeGranola
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 · searchMeilisearch
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 · searchTypesense
Soft-creates the collection on first write and upserts one document per peepshow run keyed on `id == run_id`.
Hybrid search Reel #81 · vectorRedis 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 · chatPushover
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 · chatBluesky
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 · knowledgeCoda
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 · databaseSnowflake
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 · databaseBigQuery
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 · chatFireflies.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 · chatZoom
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 · integrationPlane
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 · chatMastodon
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 · knowledgeAnytype
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 · indexAlgolia
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 · integrationOtter.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 · databaseDatabricks
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 · databaseCassandra / 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 storeNo sinks match those filters. Try loosening a selection, or use the finder.