gitwtfhub

wtf is make-look-scanned?

overflowy/make-look-scanned — explained in plain English

Analysis updated 2026-05-18

564GoAudience · developerComplexity · 2/5LicenseSetup · moderate

TL;DR

A command line tool and browser app that makes a normal PDF look like a scanned or photocopied paper document.

Mindmap

mindmap
  root((make-look-scanned))
    What it does
      Fakes a scanned PDF look
      Applies skew grain blur
      Runs as CLI or in browser
    Tech stack
      Go
      WebAssembly
      MuPDF
      PDF.js
    Use cases
      Simulate a photocopy
      Reproducible presets
      Browser based scanning look
    Audience
      Developers
      Document tinkerers

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Why would anyone build with this?

REASON 1

Make a digital PDF look like a photocopied or scanned paper document.

REASON 2

Use presets to consistently apply a specific scan style to many files.

REASON 3

Run the same effect pipeline in a browser without installing anything.

REASON 4

Get a deterministic, reproducible scan look for a given input file.

What's in the stack?

GoWebAssemblyMuPDFPDF.js

How it stacks up

overflowy/make-look-scannedwizenheimer/blazematinsenpai/senpaiscanner
Stars564534637
LanguageGoGoGo
Last pushed2025-10-14
MaintenanceQuiet
Setup difficultymoderateeasyeasy
Complexity2/53/52/5
Audiencedeveloperdevelopergeneral

Figures from each repo's GitHub metadata at analysis time.

How do you spin it up?

Difficulty · moderate Time to first run · 30min

Building the CLI needs Go and a C toolchain since it links MuPDF via cgo.

AGPL-3.0: you can use and modify it, but if you distribute the binary or run a modified version as a network service, you must make the source code available.

Wtf does this do

make-look-scanned is a command line tool, written in Go, that takes a normal digital PDF and makes it look like a photocopied or scanned paper printout. It applies a series of visual effects: slight skew, grayscale conversion, a warm paper tint, scanner grain, a bit of blur to simulate a camera or scanner out of focus, a darker shadow around the edges, and JPEG compression artifacts. It also runs directly in a web browser through WebAssembly, so people who do not want to install anything can use it from a web page. Under the hood, each page of the PDF is turned into an image, run through this chain of effects, and reassembled into a brand new PDF that only contains images. This means any selectable text in the original document is gone afterward, matching how a real scanner would behave, since a physical scan is just a picture of a page. The command line tool takes an input PDF and a set of optional flags controlling things like the output file path, the render resolution, how much the page is rotated, whether it is converted to grayscale, the strength of the paper tint, the amount of grain, the amount of blur, how strong the edge shadow is, and the JPEG quality used. Setting any of these numeric options to zero turns that particular effect off. Output is deterministic by default, meaning the same input file always produces the exact same result, because the random seed used for the effects is derived from the content of the file itself, though you can pass your own seed to get a different but still repeatable look. You can also save named presets of these settings in a configuration file and apply one with a single flag, with explicit command line flags always overriding a preset. Building the command line version requires Go and a C compiler toolchain, since it links against the MuPDF PDF library. The browser version instead uses the PDF.js library to read PDF pages, since the C-based library cannot be compiled to WebAssembly, but it reuses the same effect and reassembly code written in Go. The project is licensed under AGPL-3.0, largely because it statically links the AGPL-licensed MuPDF library, while the browser build avoids that requirement since it relies on the Apache-2.0 licensed PDF.js instead.

Yoink these prompts

Prompt 1
Help me build make-look-scanned from source with Go and a C toolchain.
Prompt 2
Show me how to create a custom preset in config.toml for this tool.
Prompt 3
Explain how the --seed flag affects the output of this scanner effect.
Prompt 4
Walk me through building the offline browser version of this tool.

Frequently asked questions

wtf is make-look-scanned?

A command line tool and browser app that makes a normal PDF look like a scanned or photocopied paper document.

What language is make-look-scanned written in?

Mainly Go. The stack also includes Go, WebAssembly, MuPDF.

What license does make-look-scanned use?

AGPL-3.0: you can use and modify it, but if you distribute the binary or run a modified version as a network service, you must make the source code available.

How hard is make-look-scanned to set up?

Setup difficulty is rated moderate, with roughly 30min to a first successful run.

Who is make-look-scanned for?

Mainly developer.

View the repo → Decode another repo

This repo across BitVibe Labs

Don't trust strangers blindly. Verify against the repo.