Overview
simple_ocr_capture captures a region of the screen, runs it through a local OCR model, and appends the text to a single file. Set the capture region once, then hit the hotkey after each page turn — the text accumulates in the order you captured it.
Given an advance button to click and a page indicator to read, it will do the turning itself and read a whole book unattended, stopping on its own when the page stops changing.
Everything runs locally. Nothing leaves the machine.
This is an application, not a library. It is a Windows GUI program you install and run. It belongs to the simple_* ecosystem because it is written in Eiffel on top of the simple_* libraries, not because you would add it to an ECF.
Install
Download
Grab the latest installer from
Releases
and run it. It is a per-user install: no UAC prompt, and the application
only ever writes to %APPDATA% and the output folder you choose.
Requirements
- Windows 10 or 11, 64-bit
- Ollama — installed only; the application starts and supervises it
- An OCR model — offered for download on first run
Nothing else. The application ships as a single executable and needs no runtime, no redistributable and no Python.
The default model is olmOCR-2 (about 9.5 GB). A discrete GPU with 12 GB or more of VRAM is strongly recommended; a full page takes roughly 25–45 seconds on an RTX 5070 Ti.
First run
- Launch it. You do not need to start Ollama yourself.
- If the model is missing it offers to download it — the window stays usable meanwhile.
- Set Region by Dragging... and drag over the area you want transcribed. Esc or right-click cancels.
- Set the output folder.
- Test Capture to confirm the region is right.
- Check Setup / Install Model for a full report on the chain.
Features
Capture
- Drag to set the region — no coordinate typing
- System-wide hotkey — Ctrl+Alt+G by default, works while the reader has focus
- Region outlines — all three rectangles drawn on the desktop, each with its own colour and dash pattern, and taken out of frame automatically at the shutter so they are never photographed into the capture
- Meaningful file names — images named from the page
indicator the reader itself displays
(
ocr_Page_90-92_of_139.png) rather than a counter that means nothing outside the program - PNG or BMP output
Unattended runs
- Auto-advance — clicks the page-turn button and keeps going
- Stops rather than guesses — a page that will not turn ends the run and says why, instead of clicking blindly on
- Duplicate suppression — text identical to the block just written is not appended again
- Focus-preserving clicks — the pointer and foreground window are put back as they were found
Video
- YouTube captions to transcript — paste one link or a whole list on the Video tab; each is looked up as it lands, then Fetch All writes every ready video to its own Markdown file, about a second each: no playback, no OCR, no browser. Pure Eiffel over WinHTTP
- The output prompt — every unattended run, a book or a video, first shows the folder, file name and resulting path, and starts only from that sheet
- Members-only videos, through your own sign-in — a WebView2 window carries your own YouTube login; sign in once and the gated caption tracks are fetched from your session, each transcript marked members-only. No cookie file is read; only YouTube's own requests leave the machine
Output and diagnostics
- One transcript file, appended to, with optional per-capture header lines
- Progress strip — scan rate, page rate and ETA once a run has two captures behind it
- Findings grid — problems the run noticed itself, each with its remedy
- Run log — the starting rectangles and decisions for every page, because a box aimed wrong is the usual failure and coordinates are unreconstructable after the fact
- No silent folder creation — a mistyped output path is confirmed before it becomes a directory
Building from source
Requires EiffelStudio 25.02 and, for the installer, Inno Setup 6.
git clone https://github.com/simple-eiffel/simple_ocr_capture.git
cd simple_ocr_capture
export SIMPLE_EIFFEL=/d/prod # where the simple_* libraries live
./build.sh -c # type-check only
./build.sh # finalize the GUI application
./build.sh -i # finalize, then build the installer
Binaries land in EIFGENs/<target>/F_code/.
Targets
ocr_capture— the shipped GUI applicationocr_cli— headless--worker(spawned per capture) and--shot(pipeline check)hotkey_spike— throwaway proof that the system-wide hotkey fires
Dependencies
base, time, vision2, plus
simple_json,
simple_base64 and
simple_process.
Deliberately not simple_http: it resolves
libcurl.dll at runtime from a path that is not on
PATH, so a finalized binary fails with a bare "cURL issue".
OCR_HTTP uses WinHTTP instead — present on every Windows,
with nothing to redistribute.
Known limitations
-
The model normalises visually ambiguous characters. A
lowercase
linside a hash or serial number can come back as a digit1, and prompting does not prevent it — it is inherent to a language model reading rather than a character classifier. Do not trust the output for checksums, licence keys, base64 or similar high-entropy strings without checking them. Prose, footnotes and tables are where it is strong. - Captures are sequential. Triggering during a cycle is ignored rather than queued, and the hotkey is ignored entirely while auto-advance is running.
- Auto-advance clicks a fixed point on the screen. Move or resize the reader window mid-run and the click lands elsewhere; the page then fails to turn, which stops the run, but the advance box needs re-dragging.
- The window opens at a size tuned for a 150% display and may look oversized at 100%. It is freely resizable; the chosen size is not yet remembered.
- Video captions come from YouTube's caption track only. A members-only or sign-in-gated video is refused, and a video with no CC button has nothing to fetch. Members-only videos are fetched through a signed-in WebView2 window (a one-time sign-in, then remembered); the screen-capture and audio routes are designed, not built.