Power Plugins835 downloadsRead the text inside images so other plugins can search it. Uses the OCR built into Windows, so nothing is downloaded and no image ever leaves your device.
Reads the text inside your images so you can search it. No downloads, no accounts, no uploads: it uses the recognizer already built into Windows, and every image is read on your own machine.
A vault full of screenshots is a vault full of text you cannot search. Paste a screenshot of an error message, a receipt, or a slide, and to Obsidian it is a file with a name and nothing else.
Power Extract works quietly in the background. It adds no view and changes nothing about how your vault looks. It reads images and hands the text to whatever asks for it: Power Explorer makes screenshots turn up in search, and Power Assistant reads a receipt or a bill before filing it.
You can use it directly too. Right-click any image and choose Copy text from image.
Windows has shipped a text recognizer since Windows 10, the same one behind Snipping Tool. Power Extract uses it, which is why nothing needs installing.
Reaching it takes a short PowerShell script, because it is a Windows API that Obsidian cannot call on its own. So this plugin starts powershell.exe, which is worth stating plainly:
You can read the whole script: src/worker.ts here, and on disk once it has run.
The community catalog's scan reports what a plugin is capable of, not what it does with it. Power Extract reaches for three things.
| What the scan reports | What it is | Where |
|---|---|---|
Shell execution via child_process |
Starting the recognizer described above. One call, no input from anywhere, and the only way to reach it from a plugin. | src/main.ts, spawnWorker |
| Vault enumeration | Listing files, twice: to offer images in the picker, and to find cached text for images the vault no longer has so Tidy up can drop it. Only paths and extensions, and the list never leaves Obsidian. | src/main.ts, prune and ImagePickerModal |
| Clipboard access | Writing, never reading. One line, reached only from the menu item or command you just chose. The plugin never asks what was on your clipboard before. | src/main.ts, copyTextToClipboard |
There is no network code in this plugin at all: no fetch, no XMLHttpRequest, no requestUrl. Images are read on your machine and the text stays there.
Power Extract exposes the same API shape as the Text Extractor plugin, so supporting both is a matter of trying both ids:
const api =
app.plugins.plugins["powerextract"]?.api ??
app.plugins.plugins["text-extractor"]?.api;
if (api) {
const text = await api.extractText(file); // file: TFile
}
Also on the API: canExtract(file) and isAvailable() return booleans, and language() returns the recognizer's language tag. Two callers asking for the same image at once wait on a single read rather than starting two.
Each one works on its own, and they fit together when you have more than one.
pnpm install
npm test
npm run build
MIT
Power Extract is built and maintained by one person. If it earns a place in your daily vault, you can buy me a coffee. Nothing in the plugin is held back either way.