AI

PwrSnap doesn’t ship an AI of its own. Every AI job goes to one of three kinds of backend that you already have or set up yourself, and you pick the backend per job:

What that means in practice:

How AI powers PwrSnap

Three jobs:

Search is plain text over titles, descriptions, accepted tags, the captured text, source app and window title. PwrSnap does no semantic or vector search.

Where the AI runs

Providers live under Settings → AI Providers, one screen each. Which provider does which job is set under Settings → AI Features → Default agents.

Codex

PwrSnap finds the Codex installs on your machine, lets you use the newest or pin a specific path, tests the connection, and shows which Codex sign-in it will use. Requests ride your existing Codex account. Field by field: Settings → Codex.

ACP agents

Gemini CLI, Grok, Kimi Code CLI and Qwen Code are agent CLIs that speak the Agent Client Protocol. Each has its own screen under AI Providers that finds installed copies (or takes a path you type), with an Enable checkbox. An enabled agent shows up in every job’s provider picker. Requests ride whatever account that CLI is signed in with. See Settings → ACP agents.

Direct API connections

Settings → AI Providers → Add connection sets up an endpoint PwrSnap calls itself, with no agent in between. It takes four steps: Where, Sign in, Models, Use it for.

Settings, AI Providers, New connection (Direct API). A stepper reads 1 Where, 2 Sign in, 3 Models, 4 Use it for. Under Start from are six templates: Anthropic API, OpenAI API, OpenRouter, Local server, Other compatible API, and OAuth endpoint. The form below has Name set to Local server; Protocol, a choice of Chat Completions, OpenAI Responses, or Anthropic Messages; Base URL http://127.0.0.1:8080/v1; and Parallel enrichments with the hint Default: 2. A preview line reads POST …/chat/completions, what PwrSnap will call. A Continue button finishes the step.
Step one of a new connection, started from the Local server template. The preview line shows the exact URL PwrSnap will call.

A direct connection is plain inference, with no tools. As an enrichment backend it gets the same bounded copy of the picture an agent would and returns text. As a chat backend it can talk about a capture but can’t draw, redact or edit anything, and the job picker says so: “Direct API · no tools, reasoning controls or pricing estimate”. PwrSnap never falls back from a direct connection to Codex or an agent.

Agents on your machine

Separately from the AI inside PwrSnap, PwrSnap can expose your Library to agents: an opt-in local MCP server that lets PwrAgent, Claude Code, Codex CLI and other MCP clients search captures, read pixels, request edits, cut recordings, make copies and build reels. It sits behind a native approval window, named revocable sessions and per-permission roles, and has its own page: Agents.

Library Chat and the agent-facing image-edit tool share the same editing commands, so an edit an outside agent asks for lands as the same kind of undoable layer as one you drew by hand.

Enrichment is gated behind a one-time consent prompt. It appears the first time you turn enrichment on, whether from Settings → AI Features → Enrichment, the float-over’s Enable button, or the Library status bar’s enrich switch.

The Settings window on AI Features, dimmed behind a dialog. The dialog's eyebrow reads AI enrichment and its title Enable AI enrichment for new snaps? The text says PwrSnap will send a downsampled copy of each new screenshot or sampled video frames to your configured AI provider to generate titles, descriptions, tags, and OCR text, and that existing captures are not sent automatically and this can be turned off from the Library status bar at any time. Buttons: Cancel and Enable AI enrichment. Behind it, the sidebar lists AI Providers (Codex marked missing; Grok, Kimi Code CLI, Qwen Code, and Gemini CLI off; OpenAI voiceover with no key; Direct API, Add connection) and AI Features with Default agents, Enrichment, Usage, and Guidance.
The consent prompt. Cancel has focus first, and Escape answers Cancel.

It says, in so many words:

PwrSnap will send a downsampled copy of each new screenshot or sampled video frames to your configured AI provider to generate titles, descriptions, tags, and OCR text.

Existing captures are not sent automatically. You can turn this off from the Library status bar at any time.

Until you choose Enable AI enrichment, no capture is enriched, automatically or by Regenerate. Capture, copy, annotation and export all work the same without it.

Chat isn’t behind this prompt because it never runs on its own. An agent sees a capture only when you open a chat about it and send a message.

Capture enrichment

The switch for this is Settings → AI Features → Enrichment → Enrich new captures, next to the budget. The agent that does the work is picked under Default agents (Capture captions, tags & OCR).

Drafts and Auto-apply

Enrichment results arrive as drafts. The float-over and the Library’s right rail say “Drafted a title + description” with the model’s name, and each field is marked AI draft with its own Use button. Use draft takes the title and description in one click. Suggested tags show as + chips you accept one at a time. Regenerate runs enrichment again for that capture.

A form capture open in the PwrSnap Library. The right rail reads Drafted a title + description · GPT-6-Luna, with Use draft, Regenerate, and an Auto-apply checkbox. The Title, Description, and Export filename fields are each marked AI draft with a Use button. Below, Tags reads 3 suggested, with the chips + settings, + form-validation, and + shipping.
Drafts waiting. Nothing is applied until you click Use, or turn on Auto-apply.

Auto-apply (off by default) applies drafts as they arrive: the title and description, unless you’ve already set your own, and the top two suggested tags. The checkbox in the float-over and the one in the Library are the same setting.

Drafted titles and descriptions are searchable straight away, before you accept them. Tags count for search once they’re accepted.

Title

A one-line headline, at most 120 characters, shown above the picture in the float-over and the Library. Titles also caption frames in the Sizzle Reels composer.

Description

One to three sentences on what’s visible and why the capture might matter later, written to work as alt text when you paste the picture somewhere. It also feeds the Sizzle Reels composer.

Tag

Two to four short, lowercase, reusable tags per capture. The model is shown the tags you already use and prefers them, so “deploy” and “deploys” don’t split your Library.

Filename

A lowercase, dash-separated filename stem with no extension, the kind that’s easy to paste anywhere. It names the files you export, and PwrSnap names the capture’s own file on disk after it too.

OCR text

Enrichment also returns the visible text that identifies the capture: a few short snippets, not a full transcript. The OCR tab in the Library’s right rail shows it, and it’s searchable, so you can find a screenshot by the error string in it.

How enrichment is contained

A screenshot is untrusted input. It can contain text written to talk a model into doing something, and enrichment runs unattended in the background, so PwrSnap limits what the model can do rather than relying on the prompt asking nicely.

In every case the picture travels as a downsampled image, never as a file path the model could open for itself.

Sensitive-data review

What ships: redaction on request, sharpened by your patterns. Ask Library Chat to “redact any email address you see”, or account numbers, or API keys, and the agent finds them and covers them. For anything secret it defaults to an opaque blackout, because blur and pixelation can sometimes be reversed.

Two controls in Settings → AI Features → Guidance tune it:

Settings, AI Features, Guidance. A note headed Where your chats live gives the chat folder as ~/Documents/PwrSnap/Chats. Below it, a User Guidance text area holds example instructions, and a Sensitive-data patterns section has an Add pattern button.
User Guidance goes into every chat; patterns teach the agent the shapes of your secrets.

Nothing scans captures for secrets automatically, and nothing holds back the clipboard. What you copy is what you annotated.

Library Chat

Select a capture and open the Chat tab in the right rail, in the Library or the editor (see Library → right sidebar). The agent works on that capture, and it acts rather than describes:

A storefront performance dashboard open in the PwrSnap Library with the Chat panel on the right. The request reads Point an arrow at the average basket drop, and put a box around Pacific Northwest in the top regions list. The agent's steps are listed: Read capture details, Looked at the canvas, Drew an arrow, Drew a rectangle, Looked at the canvas, followed by its reply. On the capture, a red arrow points at the Avg. basket drop and a blue box surrounds 1. Pacific Northwest. Chips under the thread read Codex · gpt-6.1-sol · Medium.
One request, five steps. The agent looks at the canvas again after drawing to check its work.

Everything the agent draws is an ordinary layer, named as AI work in the Layers panel, and you can move, restyle or delete it by hand. Command+Z undoes it; the agent groups a set of annotations so one undo takes back the whole set.

The PwrSnap editor on the storefront dashboard, with the Layers panel open at the right listing AI rectangle, AI arrow, and Source. The canvas shows the red arrow and the blue box the chat agent drew.
The same edit in the editor. The agent's arrow and box are layers like any other.

On a direct API connection the chat has no tools, so it can answer questions but can’t edit.

Sizzle-reel composer

A Sizzle Reel is a narrated video built from your captures. Open the composer from New Sizzle Reel in the Library sidebar, from Library → Sizzle Reels… in the menu bar, or from a selection in the Project Asset Cart with Create New Sizzle Reel (cart order is kept). The finished MP4 lands in your Movies folder (Videos on Windows) under PwrSnap/, and a Reveal button shows it in Finder or File Explorer when the render is done.

The Sizzle Reels composer for a reel named Spring catalogue launch: 1 scene · 4 clips, Saved, with Duplicate and Delete. Reel settings reads onyx · OpenAI · 1080p, beside + Add scene. A preview of the first clip sits beside a transport reading 0:00.0 of ~0:19.1, scene 1, clip 1, no narration audio, and a Render · ~0:19 button. The timeline header reads 1 scene · 4 clips · ~0:19.1 · 43 px/s, with zoom-out and zoom-in buttons and Fit, 1×, 2×, 4×, 8×. Lanes show a ruler, the scene region, four clips (Google Chrome, Google Chrome, Safari marked smart-fit, Safari, each about 4.8 seconds), a flat waveform, and a word lane reading No transcript yet, Synthesize narration to anchor words. Below, the scene's narration script is in a text box, labelled Scene · one voiceover · 4 clips, with Split into scenes and + Clip. On the right, the Reel composer chat offers Provider Codex, Model GPT-6.1-Sol, and Reasoning Medium, above a message box reading Describe your reel or ask for changes.
One scene, one voiceover, four clips. The length carries a ~ until the narration is synthesized and its real length is known.

A reel is a sequence of scenes. A scene is one voiceover, the narration you write for it, over a single capture or a run of clips shown while that narration plays.

The render button reads Render · M:SS with the reel’s length in the label, and a ~ while the length is still an estimate. Progress shows in the status bar along the bottom.

The timeline

Under the preview is a horizontal timeline on one time axis. Five lanes stack up:

A playhead spans all five; scrub it and the preview follows. Drag a clip to move it or change how long it runs. The edit commits when you let go, and Escape mid-drag abandons it. Zoom with Command+= / Command+- through Fit · 1× · 2× · 4× · 8× and scroll past the fit width.

The word ribbon is what makes “cut to the next shot when she says latency” something you do by eye: find the word, drag the clip edge to it. Phrase anchors do the same job by text, and the two stay in sync. The timeline is a second way into the same timings.

Sizzle Composer Chat

The composer has its own chat (Hide chat tucks it away), with an agent scoped to the reel. It can search the Library; add, remove and reorder scenes and clips; write scripts; set transitions, audio and durations; and render:

It’s the same chat as Library Chat with a different toolset. Pick the provider, model and reasoning level before the first message.

Voiceover uses OpenAI directly

Narration is synthesized by OpenAI’s text-to-speech API, called directly; none of the chat backends do speech. It’s the one place PwrSnap holds a provider key for you. Paste an OpenAI API key into Settings → AI Providers → OpenAI voiceover; PwrSnap stores it encrypted through the operating system’s secure storage and uses it for every reel you render. It’s billed to that key like any other OpenAI API usage.

Without a key, nothing narrated renders. Previewing narration returns “Set your OpenAI API key in Settings → AI Providers”, and a scene whose audio is a voiceover can’t render. PwrSnap has no speech input, so you can’t record narration yourself. A reel whose clips all carry their own audio, or are muted, renders without a key.

Costs and budgets

Settings → AI Features → Usage covers the last 30 days:

The cost is what the tokens would cost at public list prices, not your invoice. A run on a model PwrSnap has no price for, which includes every direct API model, shows “No price estimate”. A backend that reports no token counts shows “Usage unavailable”. Neither is guessed.

Settings, AI Features, Usage, covering the last 30 days. Totals read list-price, input 127,199 tokens, and output 3,059 tokens. Below are rows for individual runs, including a Library chat turn and capture enrichment runs, each marked No price estimate.
Totals, then one row per run. Where PwrSnap has no list price for a model, it says so rather than guessing.

The budget breaker. Enrichment draws from a bucket of 20 budget tokens that refills at one token every 6 seconds; Settings → AI Features → Enrichment shows the live count. Run it dry and the badge reads Slow mode, with the time of the next token. Run it dry repeatedly and enrichment turns itself off (Safety off) until you turn it back on: Enrich new captures, the Library status bar’s switch, or the float-over’s Re-enable. The breaker governs background enrichment only; chat is never switched off.

Settings, AI Features, Enrichment. Enrich new captures is switched on. The Budget row reads 20/20 budget tokens; refill cadence is one token every 6s, with a Ready badge. The Usage card begins below.
A full budget. A burst of captures is fine; a sustained flood slows, then stops.

Turn Enrich new captures off and enrichment stops at once: no new runs, no background work. Chat stays available for when you ask.

Not yet

Voice describe

Holding a shortcut, talking, and having the transcription go to the AI the way a Library Chat message does is planned, not built. PwrSnap has no speech input today.

An automatic sensitive-data pass

The plan is a review after every capture that covers visible keys, credentials and IDs before the float-over’s copy shortcuts go live. Until then, redaction is on request.