> For the complete documentation index, see [llms.txt](https://getsquish.gitbook.io/squish/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://getsquish.gitbook.io/squish/resources/changelog.md).

# Changelog

User-facing changes per published version of [`@getsquish/squish`](https://www.npmjs.com/package/@getsquish/squish), newest first. Dates are the npm publish dates. Release notes also live on [GitHub Releases](https://github.com/getsquish/squish/releases).

## 0.3.1 — 2026-07-18

Audio activity now preserves high-frequency energy when building its low-rate timeline.

* Fixed a resampling error in 0.3.0 that could make continuous tones above 500 Hz appear nearly silent. Squish now builds a full-band activity envelope before reducing it to the compact 1 kHz representation used by sheets and JSON.
* No contract or command changes: `audio.samples[]`, `clip_peak`, CLI, and local MCP retain the 0.3.0 shapes. Videos without audio and videos with silent tracks retain their distinct results.

{% hint style="success" %}
**Try 0.3.1 on a video you know:**

```bash
npx -y @getsquish/squish@0.3.1 clip.mov --json
```

The JPEG contact sheet includes frames, absolute timecodes, and an audio-activity band. Ask an AI to find one specific moment, then run Squish again with that range—for example, `--start 12 --end 18`—to inspect it more closely. The CLI requires Node.js 20+ and ffmpeg; video processing stays on your machine.
{% endhint %}

## 0.3.0 — 2026-07-18

Audio activity becomes a navigation channel on the local mouths.

* Every CLI/local-MCP sheet now carries a thin **audio-activity band** above the visual grid, aligned to the same absolute source timeline. High-energy peaks are marked so an agent can choose a range to inspect even when adjacent frames look alike.
* JSON adds an `audio` object without removing or renaming any v0 field: `present`, `normalization`, absolute `window`, and `samples[]` (`time`, `level`). Local MCP returns the same object alongside `timecodes[][]`.
* Levels use `normalization: clip_peak` across the full source clip, including windowed calls. A quiet zoom therefore stays quiet relative to the overview instead of being independently normalized until every interval looks loud.
* The activity envelope keeps short transients during overview downsampling. Videos with a silent track return zero levels; videos with no audio track still produce sheets and report `present: false`.
* Scope boundary: activity answers *when audio energy changed*, not what was said or what made the sound. No transcription, diarization, audio-event classification, or emotion inference. The web app, hosted API, and remote MCP remain visual-only until separately released.
* README and `video-navigation` skill now include a five-minute test protocol: bring a video whose answer you know, ask for one specific moment, navigate overview → zoom, and verify the cited time against the source.

## 0.2.3 — 2026-07-14

The discoverable release: agents can now find Squish on their own.

* Listed in the official **MCP Registry** as [`io.github.getsquish/squish`](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.getsquish/squish): `package.json` carries `mcpName` (the registry's npm ownership marker), `server.json` describes both ways in (this npm package over stdio + the hosted endpoint), and a tag-triggered OIDC workflow publishes the listing on every release.
* **`video-navigation` agent skill** in the repo's `skills/` dir — `npx skills add getsquish/squish` teaches an agent when to reach for a contact sheet, the zoom loop, and the citation discipline. Listed on skills.sh.
* stdio MCP truthfulness: `serverInfo` now reports the real package version (it had sat at a hardcoded `0.2.0` through two releases), and `squish_video` carries behavior annotations — writes sheets to your disk, nothing leaves the machine (closed world), reruns overwrite the same outputs (idempotent).
* New docs: [For AI agents](/squish/getting-started/for-ai-agents.md) (pick-your-surface decision table + behavior rules) and [Support](/squish/resources/support.md).
* Hosted endpoint (same engine, **not in this package**): Apps SDK scan metadata (`outputSchema` + `structuredContent`, attachment `fileParams`), a subject-keyed free lane, and a commerce-free quota voice for ChatGPT traffic — the ChatGPT app was submitted for review 2026-07-12.
* Engine unchanged: the `squish-cli-v0` and `squish-mcp-v0` contracts are identical to 0.2.0.

## 0.2.2 — 2026-07-10

The lens README, and the remote mouth grew auth.

* README rebuilt around the lens canon — *AI sees through lenses, not answers: Squish adjusts the lens; the model interprets* — with a new cover ("Random access to video") and the official-app path (add `https://api.getsquish.app/mcp` as a connector, zero install).
* `squish_video` tool description tuned from field evidence: the one-call economy line ("one call replaces a whole download → ffmpeg → extract → montage pipeline"), density-vs-window guidance, and the `timecodes[][]` mirror note — agents pick the tool and drive the loop better with no prompting changes.
* Hosted endpoint (same engine, **not in this package**): `api.getsquish.app/mcp` gained optional `Authorization: Bearer` API keys (same credits as the hosted API, deduct-before-extract with auto-refund) alongside a small anonymous free lane; quota exhaustion answers with a structured error an agent can relay. **The local CLI and MCP server in this package stay ungated forever.**
* Engine unchanged: the `squish-cli-v0` and `squish-mcp-v0` contracts are identical to 0.2.0.

## 0.2.1 — 2026-07-08

First open-source release: the engine behind `@getsquish/squish` went public at [github.com/getsquish/squish](https://github.com/getsquish/squish) (Apache-2.0, curated mirror of the founding monorepo — history starts there).

* README rebuilt around the primitive: video as an addressable representation, the navigation loop (overview → zoom → cite), and the meta-demo — a 76-second explainer video shown next to the same video as one contact sheet.
* `package.json` `repository` now points at the public repo, so npm's "Repository" link works.
* Added `SECURITY.md` (private vulnerability reports via GitHub security advisories) and npm / CI / license badges.
* Engine unchanged: the `squish-cli-v0` and `squish-mcp-v0` contracts are identical to 0.2.0.

## 0.2.0 — 2026-07-07

Windowed sheets — the release that turns a sheet into a navigable address space.

* `--start` / `--end` on the CLI and `start` / `end` on the `squish_video` MCP tool window a run to a range. Both accept seconds (`90`) or a timecode exactly as stamped on a sheet (`1:30`, `1:07.3`).
* Timecodes stay **absolute to the source video at every zoom depth** — a windowed run never re-bases them, so you can drill repeatedly: overview → range → moment.
* Adaptive timecode precision: short windows stamp sub-second timecodes (`1:07.3`) so adjacent cells stay distinguishable.
* Addressable floor: a window narrower than 2 ms per cell is rejected with a teaching error (zoom out or lower the density) instead of producing indistinct cells.
* A windowed `--json` run echoes the resolved bounds as `"window": { "start": …, "end": … }`.

## 0.1.1 — 2026-07-06

README rewrite for the npm package page. No engine or contract changes.

## 0.1.0 — 2026-07-06

First publish of `@getsquish/squish`: the CLI and the MCP server in one package.

* CLI: `squish <video>` → timestamped contact sheets beside the input (`<basename>.sheet-N.jpg`), `--density 3x3|4x4|5x5|6x6`, `--out <dir>`, and `--json` with the frozen `squish-cli-v0` stdout contract.
* MCP server: `squish mcp` (stdio) exposing one tool, `squish_video`, returning the CLI contract plus per-cell `timecodes[][]`, stamped `squish-mcp-v0`.
* ffmpeg/ffprobe preflight that fails fast with per-OS install hints instead of a mid-run error.
* Apache-2.0 license + NOTICE.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://getsquish.gitbook.io/squish/resources/changelog.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
