Quilt is a macOS app that takes scrolling screenshots. You point it at a window, tell it how many shots to take and how to advance between them, and it stitches everything into one tall image.
The idea sounds obvious once you hear it. Getting it right took considerably longer.
The frustration that started it
BibliU is a digital textbook platform used by a lot of universities. It has a clean reading view, good typography, and one glaring omission. You cannot download anything. You can read your textbook. You can highlight it. What you cannot do is get the pages onto your iPad for annotation in GoodNotes. The content exists on your screen. It just isn't yours to take anywhere.
D2L Brightspace, the learning management system most Canadian universities run, has the same problem with uploaded course notes. A professor posts a 40-page slide deck as a web view. There's no download button. Right-click is blocked. The PDF version either doesn't exist or requires emailing someone.
I spent a semester taking screenshots one screen at a time and manually dragging the pieces together in Preview. The result was misaligned, slow, and depressing. After doing it enough times I decided the tool I wanted had to exist and, if it didn't, I should build it.
What Quilt actually does
When you open Quilt, the first thing you see is every window currently open on your Mac, laid out as a grid of live thumbnails. You pick the one you want to capture, configure a few settings (how many shots, how long to wait between them, whether to simulate a keypress or scroll automatically) and hit start.
Quilt takes over from there. It captures the window frame by frame, advancing it between each shot, then aligns every frame and composites them into a single continuous image. At the end you get a PNG or PDF of the entire page, exactly as it appeared on screen, no matter how long it is.
That's the pitch in a paragraph. What makes it interesting is everything underneath.
How the window picker works
Getting live thumbnails of every open window sounds like something macOS should make easy. It doesn't. The standard ScreenCaptureKit API hands you a list of window objects with titles and bundle identifiers, but no image data. To show the user what each window actually looks like, Quilt calls a private CoreGraphics function, CGSHWCaptureWindowList, which produces hardware-accelerated snapshots directly from the GPU's composited output. It's the same data the Dock uses for its window hover previews.
Quilt generates these thumbnails up to four at a time and pushes each one onto the grid the moment it's ready, with a spring animation so the interface feels alive rather than loading. No spinner. No delay before you can interact. The grid is also filtered carefully. Quilt's own windows are excluded, as are the Dock, Control Center, and any window that isn't on your current Space. What you see is exactly what you'd see if you pressed Mission Control. Nothing more.
When you get back to Quilt after switching apps, the picker refreshes automatically. If you opened a new browser tab with the content you want to capture, it's already there.
Capturing the window
The capture loop itself is straightforward in concept. Quilt uses ScreenCaptureKit's screenshot API to grab the window at full resolution, fires the configured post-shot action (keypress, scroll, or mouse click), waits the configured delay, and repeats.
Worth noting: asking macOS to enumerate all available screen content is not cheap. Quilt caches that result and only refreshes it every ten shots, or when it detects that the screen layout changed mid-capture. On a long session, this keeps things snappy.
At any point during capture you can press Escape. The overlay, which sits in a transparent borderless panel above the source window, listens for that key and stops the current task immediately. Rather than losing everything, Quilt shows you a preview sheet with whatever was captured so far. You can keep it or discard it. Nothing is thrown away without your say.
The stitching problem
Here's the thing about naively stacking screenshots. Scroll distance isn't consistent. A web page scrolls differently from a PDF viewer. Content can lazy-load and repaint between frames. Trackpad scroll physics mean two identical scroll gestures travel slightly different distances. Stacking frames by pixel height gets you something close to correct and visibly wrong.
Quilt solves this with Apple's Vision framework. After each new frame is captured, Quilt runs a VNTranslationalImageRegistrationRequest to find the exact pixel offset between the previous frame and the new one. Vision compares the overlapping region of the two images and returns a transform, specifically a ty value that says "these two images are offset by this many pixels vertically."
let request = VNTranslationalImageRegistrationRequest(targetedCGImage: image2)
let handler = VNImageRequestHandler(cgImage: image1, options: [:])
try handler.perform([request])
let offset = request.results?.first?.alignmentTransform.tyWith that number in hand, Quilt composites the two frames into a CGContext with exact overlap. The seam disappears. The whole process runs in a background actor so the main thread never stalls while images are being processed.
The final result is pixel-accurate regardless of how the window scrolled between shots.
Making it searchable
Screenshots are images. Images aren't searchable. For students capturing lecture notes, that's a real limitation.
Quilt can optionally run OCR on the finished image and embed a hidden text layer into the exported PDF. Apple's Vision framework handles this too, using the same VNRecognizeTextRequest that powers Live Text in Photos. It detects the language automatically, respects your system's preferred languages for multilingual content, and runs entirely on-device. The PDF you export opens in GoodNotes as a readable, searchable document with text you can highlight and copy.
Who uses Quilt
Students use it for exactly what I originally built it for. Capturing locked course content from BibliU, D2L, and similar platforms and getting it into their note-taking app of choice. Professors use it to capture whiteboard-heavy Zoom recordings they want to archive as still images. Developers use it to capture long logs, documentation pages, and GitHub diffs that don't print well. Designers use it for full-height mockup exports.
The common thread is simple. The content is on screen. The application won't let you take it anywhere. Quilt doesn't negotiate with the application. It just watches the pixels.
Quilt is available at quiltformac.com. It runs on macOS Sequoia and requires only Screen Recording permission to work.