I am so glad I read the OP. To me, the big news here is "FlatCV", the author's computer vision library.
Why it interests me:
1. A practical and elegant approach to scanning real-world documents like receipts, invoices, and letters. These usually have folds, curvature, and wrinkles, and general-purpose scanning tools do a poor job.
2. It's written in C.
3. It takes output quality seriously, finding color thresholds suitable for printed matter carefully and building PNG images instead of throwing you into a generic jpg pipeline.
Thank you for writing this software and also the introduction! Will definitely read further.
speerer 1 days ago [-]
Exciting! I needed this last week, and now here it is. Thanks.
I share the annoyance about phone detection previees over-promising. But I'm pleased this comes with perspective correction and lighting correction together.
Gualdrapo 1 days ago [-]
Last time I used Gimp it had a plugin that let you correct perspective, wonder how they both compare
dmwood 1 days ago [-]
Crashes on launch
macOS: macos-26_arm version installs (with intervention to permit running), but crashes on launch.
-------------------------------------
Translated Report (Full Report Below)
-------------------------------------
Process: perspec [94673]
Path: /Users/USER//Perspec.app/Contents/Resources/perspec
Identifier: perspec
Version: ???
Code Type: ARM-64 (Native)
Role: Unspecified
Parent Process: Exited process [94672]
Coalition: com.adriansieber.Perspec [86355]
Responsible Process: Perspec [94671]
User ID: 501
Date/Time: 2026-08-04 12:50:37.5848 -0600
Launch Time: 2026-08-04 12:50:37.5821 -0600
Hardware Model: Mac13,1
OS Version: macOS 26.6 (25G72)
Release Type: User
Termination Reason: Namespace DYLD, Code 1, Library missing
Library not loaded: /opt/homebrew//libwebp.7.dylib
Referenced from: <47F30FA1-4AB9-310F-8988-5CABFEF76F5E> /Users/USER//Perspec.app/Contents/Resources/perspec
Reason: tried: '/opt/homebrew//libwebp.7.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew//libwebp.7.dylib' (no such file), '/opt/homebrew//libwebp.7.dylib' (no such file)
(terminated at launch; ignore backtrace)
Dyld Error Message:
1
adius 1 days ago [-]
Thanks for the report. I'm looking into it!
adius 1 days ago [-]
Fixed this on main.
The macOS build linked against Homebrew's libwebp by absolute path but never bundled it, so it only ran on machines that happened to have it installed. The build now copies all non-system dylibs into the app and rewrites the install names, and fails if any absolute reference survives.
giancarlostoro 1 days ago [-]
Be fully aware it is AGPL licensed before you try to use any of this code for something "at work" without realizing it. That said, looks neat!
OutOfHere 1 days ago [-]
It is nagware:
> Before an image is saved, a "Buy License" banner is shown for 10 seconds.
nerdsniper 1 days ago [-]
That seems pretty reasonable! It's also AGPL licensed and the source code is available on GitHub. 20 minutes with an LLM would likely yield you a nagware-free version if you value your time at less than $21/hour. Otherwise it costs just $7 to pay Adrian for their good work!
OutOfHere 1 days ago [-]
Why, when I could use an AI to both detect the corners and write+run a completely free ad-hoc script to fix the perspective.
cvadict 16 hours ago [-]
meh, every single license key ever issued is stored in the binary.... also you can just compile your own copy from scratch.
-or- just pay the author the $7 or whatevs if you use it.
OutOfHere 14 hours ago [-]
> just pay the author the $7
It's not about the $7. I can even pay $20. It's about the principle of being against nagware. If the author had asked for a donation in a non-obstructive way, that would've worked.
pjmlp 10 hours ago [-]
Isn't so nice that the 1980-2000's distribution models are back, as there doesn't seem to be any other way to get folks to pay for tools?
It is either that, or a SaaS wall.
whateveracct 23 hours ago [-]
haskell :)
esafak 1 days ago [-]
The Google Camera app already does this (much). I look into this problem during a receipt scanning project. If you want development ideas look up "metric rectification" and 'manifold dewarping'; e.g. https://openaccess.thecvf.com/content/WACV2025/papers/Hertle...
stronglikedan 1 days ago [-]
Samsung Galaxy camera as well. Just hit "scan" when it pops up and you get the same results.
adius 1 days ago [-]
The "Initial Motivation" section in the article explains why existing mobile apps aren't good enough.
virtualritz 22 hours ago [-]
I build a tool like this with Claude in 2hs, uses Rust with OpenCV crate, egui GUI, PDF output.
Basically it steps through a folder with images, finds corners, user presses Space if ok, or adjusts corner if not (about 1 in 20 pages has a corner wrong).
Undistort, contrast correct based on histogram, etc. happens automatically.
On the last page pressing Space creates a PDF.
My brother and I were digitizing medical bills for our mother and everything we tried to do this with out there was meh, cost money or both! It seems as soon as you need PDF anything it's $$$.
This is a throwaway tool as we're now more and more getting bills as digital files anyway.
My only input was specs, otherwise it's "vibe coded" if you want.
But consider that the Rust crate ecosystem is mature and my prof. background is computer graphics.
Oh, and I have an image manipulation crate that I wrote for work (closed source for now, unfortunately) that has corner pin with area filtering as a primitive.
I was just surprised how possible this is now.
This was earlier this year (Opus 4.8 was just out) and while we were photographing the pages with our smartphones Claude wrote the tool.
Rendered at 20:59:16 GMT+0000 (Coordinated Universal Time) with Vercel.
Why it interests me:
1. A practical and elegant approach to scanning real-world documents like receipts, invoices, and letters. These usually have folds, curvature, and wrinkles, and general-purpose scanning tools do a poor job.
2. It's written in C.
3. It takes output quality seriously, finding color thresholds suitable for printed matter carefully and building PNG images instead of throwing you into a generic jpg pipeline.
Thank you for writing this software and also the introduction! Will definitely read further.
I share the annoyance about phone detection previees over-promising. But I'm pleased this comes with perspective correction and lighting correction together.
macOS: macos-26_arm version installs (with intervention to permit running), but crashes on launch. ------------------------------------- Translated Report (Full Report Below) ------------------------------------- Process: perspec [94673] Path: /Users/USER//Perspec.app/Contents/Resources/perspec Identifier: perspec Version: ??? Code Type: ARM-64 (Native) Role: Unspecified Parent Process: Exited process [94672] Coalition: com.adriansieber.Perspec [86355] Responsible Process: Perspec [94671] User ID: 501
Date/Time: 2026-08-04 12:50:37.5848 -0600 Launch Time: 2026-08-04 12:50:37.5821 -0600 Hardware Model: Mac13,1 OS Version: macOS 26.6 (25G72) Release Type: User
Crash Reporter Key: 9FD40ACB-279F-0F79-41E1-8B4D3B663EA7 Incident Identifier: 207F9047-B786-4C8C-8263-BA9C4DB370EB
Time Awake Since Boot: 320000 seconds
System Integrity Protection: enabled
Triggered by Thread: 0
Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: Namespace DYLD, Code 1, Library missing Library not loaded: /opt/homebrew//libwebp.7.dylib Referenced from: <47F30FA1-4AB9-310F-8988-5CABFEF76F5E> /Users/USER//Perspec.app/Contents/Resources/perspec Reason: tried: '/opt/homebrew//libwebp.7.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew//libwebp.7.dylib' (no such file), '/opt/homebrew//libwebp.7.dylib' (no such file) (terminated at launch; ignore backtrace)
Dyld Error Message: 1
> Before an image is saved, a "Buy License" banner is shown for 10 seconds.
-or- just pay the author the $7 or whatevs if you use it.
It's not about the $7. I can even pay $20. It's about the principle of being against nagware. If the author had asked for a donation in a non-obstructive way, that would've worked.
It is either that, or a SaaS wall.
Basically it steps through a folder with images, finds corners, user presses Space if ok, or adjusts corner if not (about 1 in 20 pages has a corner wrong). Undistort, contrast correct based on histogram, etc. happens automatically.
On the last page pressing Space creates a PDF.
My brother and I were digitizing medical bills for our mother and everything we tried to do this with out there was meh, cost money or both! It seems as soon as you need PDF anything it's $$$.
This is a throwaway tool as we're now more and more getting bills as digital files anyway.
My only input was specs, otherwise it's "vibe coded" if you want.
But consider that the Rust crate ecosystem is mature and my prof. background is computer graphics.
Oh, and I have an image manipulation crate that I wrote for work (closed source for now, unfortunately) that has corner pin with area filtering as a primitive.
I was just surprised how possible this is now.
This was earlier this year (Opus 4.8 was just out) and while we were photographing the pages with our smartphones Claude wrote the tool.