Releases

User-facing changes to peepshow, newest first — new sinks, new features, fixes, and opt-in behaviour changes. This page is generated from the changelog shipped with the npm package, so it tracks the release it describes. Internal tooling and build churn are omitted. Full notes for each tag, including install commands, live on GitHub Releases.

Unreleased

Added — agent distribution surfaces + llms.txt

Audited peepshow's agent-facing surfaces against a comparable project and

closed the gaps. Each of these is a file some agent keys off; a missing one

doesn't error, the agent simply never learns peepshow exists.

The .agents marketplace entry never resolved. It pointed at

./plugins/peepshow, which did not exist — the scanner resolves that path from

the repo root while the real directory was nested at

.agents/plugins/plugins/peepshow. The entry was silently skipped

("local plugin manifest not found") and the repo's trust score was 0.0/100

even though the overall scan passed. The directory now sits at the root with

its own manifest, README, LICENSE and SECURITY.md.

Measured against the pinned scanner: score 85 → 87, trust 0 → 72.37,

verify_pass false → true, nothing skipped. Switching the entry to a url

source — which is what some projects do — was tried and rejected: it scores 76,

below the 80 the listing gate requires.

Added — llms.txt

peepshow.dev/llms.txt was a 404. The site has ~130 generated pages, so there

was no machine-readable index for the thing whose whole audience is LLMs. Now

generated from the same catalogues as the pages — all 95 sinks by category,

every agent, model, how-to and comparison — so it can't drift.

Added — "powered with peepshow" badge + star history

Added — --version

v0.9.3 — 2026-10-06

npm i -g peepshow@0.9.3

Fixed — peepshow was unusable on native Windows

Reported from outside in issue #3:

peepshow.CMD --version exited 1 with `The system cannot find the path

specified.before the CLI started, whilenode dist/cli.js` worked fine on

the same install. Two independent faults, each sufficient on its own, and

neither visible from a macOS or Linux CI run.

Also in this area:

Verified by packing the tarball, installing it into a clean directory, and

running through node_modules/.bin/ — the symlink layer where the 0.4.1 bug

lived — including a real extraction end to end.

extensions, executable bits, bin-map parity, and the guard's behaviour through

symlinks and percent-encoded paths. They run on every platform, because that

is the only way a Mac notices a Windows packaging bug.

Changed — published docs and security policy

v0.9.2 — 2026-09-16

npm i -g peepshow@0.9.2

Added — peepshow is a real Gemini CLI extension

Previously Gemini CLI support was a four-field manifest and a context file

that imported AGENTS.md. The manifest had also drifted to 0.1.2 while the

package was on 0.9.1, so gemini extensions update had nothing to compare

against.

Verified against Gemini CLI 0.60.0: the extension loads as

✓ peepshow (0.9.2) with its context file resolved, and both command files

parse as valid TOML v1 to the documented command names.

Site: /agents/gemini/ rewritten around the real install flow with a new

"Slash commands" section (the agent-page template gained an optional

commands block), and Gemini CLI promoted on the homepage feature slide and

agent table.

Fixed — YouTube input was broken end to end

Three separate faults, each of which alone blocked every yt-dlp input

(local paths were never affected).

node:child_process with require() inside defaultSpawn(). Under

--experimental-strip-types the loader can't classify a .ts file that

contains both require and top-level await, so it refused the module on

evaluation — before the YouTube path was reached. The same require

survived into the esbuild ESM bundle, where dist/cli.js threw

Dynamic require of "node:child_process" is not supported. Replaced with a

static import; node:child_process is a builtin, so the lazy-load was

buying nothing. Test seams still inject through deps.spawn.

already flagged the original call, but it was silenced inline, which is how

it shipped.

v0.9.0 — 2026-05-30

npm i -g peepshow@0.9.0

Added — Granola sink (now 78 sinks)

v0.8.1 — 2026-05-01

npm i -g peepshow@0.8.1

Added — sink replay (closes the v0.8.0 sink-log loop)

v0.8.0 — 2026-04-28

npm i -g peepshow@0.8.0

Added — peepshow serve (phase 2 of the report system)

Site

Telemetry & privacy

Deferred to v0.8.1

v0.7.6 — 2026-04-27

npm i -g peepshow@0.7.6

Changed

v0.7.5 — 2026-04-27

npm i -g peepshow@0.7.5

Changed

v0.7.4 — 2026-04-27

npm i -g peepshow@0.7.4

Added — Perceptual frame dedup

Tests

Why we shipped this now

External feedback: *"Keyframes + transcript is a clean approach — most

'video understanding' demos cheat by relying purely on transcript.

Does it dedupe similar frames or just sample at fixed intervals?"*

Honest pre-fix answer was "scene mode kind of, fps fallback no."

Honest post-fix answer is "yes, perceptual dedup default-on for both

modes." Same pitch, no caveat.

Added — --gpu auto is now duration-aware

Added — Motion signal + adaptive density (high-motion answer)

Fixed — Scene-mode dedup was silently skipping

Tests

v0.7.3 — 2026-04-26

npm i -g peepshow@0.7.3

Added

Changed

v0.7.2 — 2026-04-26

npm i -g peepshow@0.7.2

Added — peepshow config + first-run wizard + cross-platform browser opener

Tests

schemaVersion validation, browser resolution per platform, env

overrides).

Docs

v0.7.1 — 2026-04-26

npm i -g peepshow@0.7.1

Added

Fixed

v0.7.0 — 2026-04-26

npm i -g peepshow@0.7.0

Added — HTML reports + run history + LLM analysis loop

Changed

v0.6.2 — 2026-04-25

npm i -g peepshow@0.6.2

Changed

v0.6.1 — 2026-04-25

npm i -g peepshow@0.6.1

Added — 3 macOS-only sinks (workflow + wiki)

The remaining AppleScript / x-callback-url backlog:

All three skip cleanly with exit 0 on non-darwin unless the

matching *_ALLOW_NON_DARWIN=1 is set.

Fixed

Tests

all passing.

v0.6.0 — 2026-04-24

npm i -g peepshow@0.6.0

Second sinks wave. Ten more (58 → 68) covering the rest of the

feasible backlog in docs/SINKS-MISSING.md.

Added — 10 new sinks

Workflow / agent tooling

Chat / messaging

Wiki / notes

Observability

All six macOS-specific sinks (apple-notes, imessage, shortcuts,

raycast) skip cleanly with exit 0 on non-darwin unless an explicit

*_ALLOW_NON_DARWIN=1 override is set.

Tests

Changed

Docs

v0.5.0 — 2026-04-24

npm i -g peepshow@0.5.0

The sinks wave. 7 new sinks (51 → 58), storage-mode toggle for the

database-shaped sinks, and per-sink launch videos + GIFs across

every site + doc page.

Added — 7 new sinks

Added — sink storage modes

Database-shaped sinks (sqlite, postgres, mongodb) now support two

record layouts, chosen per-sink or globally:

Precedence: PEEPSHOW_<SINK>_STORAGE_MODE env > PEEPSHOW_SINK_STORAGE_MODE

global env > a PEEPSHOW_SINK_CONFIG_FILE JSON file > the sink's own

fallback. Switching modes on an existing database is safe — the two

layouts live in parallel tables and nothing is migrated.

Full reference + query examples: [docs/SINK-STORAGE-MODES.md](./docs/SINK-STORAGE-MODES.md).

Added — per-sink launch videos + GIFs

Every sink page (/sinks/<slug>/) and every agent page

(/agents/<slug>/) now carries a branded 14-second demo video (drop

→ process → sink/agent action → outro). Sink videos fade to the

"peepshow · <Sink>" outro so loops don't snap. Same MP4 is available

as a GIF under docs/sink-gifs/<slug>.gif for the GitHub / npm

README surfaces. All 64 videos generated from a single template —

Changed

v0.4.2 — 2026-04-24

npm i -g peepshow@0.4.2

Changed

Added

v0.4.1 — 2026-04-24

npm i -g peepshow@0.4.1

Emergency hotfix over 0.4.0. Three bugs stopped the published package from

running at all when installed via npm; none of them showed up in local dev

because everything in this repo runs via real paths under /Users/....

Fixed

v0.4.0 — 2026-04-24

npm i -g peepshow@0.4.0

The big expansion. Thirty-two new built-in sinks (19 → 51), audio-track

extraction, and a use-case finder on the website. Nothing removed, nothing

renamed — drop-in upgrade.

Added — 32 new sinks

Chat & messaging

Issue trackers

Observability & analytics

Vector + AI memory

Whiteboards

Wiki & notes

Object + file storage

Added — audio extraction + transcription

When a video input has an audio stream (MP4 / MOV / WebM / MKV), peepshow

now runs a second ffmpeg pass that:

On top of that, peepshow **auto-enables transcription when

whisper.cpp is on

PATH** — no flag, no API key, nothing leaves the machine. The

base.en model downloads once to ~/.peepshow/whisper-models/ and is

reused forever after. Explicit --no-transcribe or

PEEPSHOW_TRANSCRIBE=off skips the step.

Five cloud / custom providers are selectable in one flag:

Each cloud provider only runs when its API key env var is set — without

it, peepshow logs a one-line note and keeps the rest of the run intact.

The transcript lands on audio.transcript with the same shape across

every provider (provider, model, language, durationSeconds,

segments: [{start, end, text}], text), so downstream sinks see the

spoken words regardless of which engine produced them.

Full setup, provider matrix, and privacy notes:

peepshow.dev/transcription/.

Animated GIF, APNG, and animated WebP inputs skip cleanly — those

formats can't carry audio. Opt out entirely with --no-audio or

PEEPSHOW_AUDIO_ENCODER=off.

Added — website use-case finder

peepshow.dev/sinks/find/ — pick

what you want to do with the frames (search · alert · archive · memory

· whiteboard · analytics · compliance · LLM pipeline · review · workflow)

and where your stack lives (cloud · self-hosted · LLM · local). The

finder ranks matching sinks and hands you the CLI command to wire each

one up.

The homepage #sinks section gets a mini-finder too. The /sinks/

index gets live text + chip filters. All three surfaces share a

hash-bang URL (#!use=memory,search&deploy=self-hosted) so a

selection is one-click-copyable between them.

Changed

v0.3.x — earlier releases

npm i -g peepshow@0.3.x

Baseline that this release builds on: 19 built-in sinks (SQLite ·

Postgres · pgvector · S3-compatible · Webhook · Slack · Discord ·

GraphQL · Notion · Obsidian · IDE attachments · MemPalace · Linear ·

GitHub Issues · Sentry · Chroma · Qdrant · Pinecone · MongoDB) plus

the core frame-extraction CLI, auto-sink persistence

(~/.peepshow/sinks.json), conditional sinks via --when, and agent

manifests for Claude Code, Cursor, Windsurf, Cline, Codex CLI,

Gemini CLI + the generic AGENTS.md convention.

See the git log for fine-grained history; this changelog only tracks

user-facing releases from 0.4.0 onward.