MCPInstall

pdf-look-scanned

Make PDF documents look like they were scanned on a physical scanner. Applies realistic effects: grayscale conversion, Gaussian noise, slight rotation, blur, edge shadows, and random offset. Optionally extract real handwritten signatures from a source PDF (or user-provided images) and replace digital signatures on specific pages. Use when the user asks to: make a PDF look scanned, give a PDF a scanned appearance, replace digital signatures with real/handwritten ones, fake a scan, add scan effects to a document, or make a document look printed and scanned.

Installs
49
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/vladmdgolam/agent-skills --skill pdf-look-scanned
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads pdf-look-scanned automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

PDF Look Scanned

Make PDFs look like physical scans with optional signature replacement.

Dependencies

pip3 install pillow pdf2image img2pdf numpy

Also requires poppler (provides pdftoppm):

  • macOS: brew install poppler
  • Ubuntu/Debian: apt install poppler-utils
  • Fedora/RHEL: dnf install poppler-utils
  • Arch: pacman -S poppler
  • Windows: conda install -c conda-forge poppler or download from poppler releases

Quick Start

Run scripts/make_scanned.py for the core functionality. Read the script's --help for all options.

Simple scan effect

python3 scripts/make_scanned.py document.pdf

Adjust scan quality

Lower DPI and quality = grittier, more realistic cheap-scanner look:

python3 scripts/make_scanned.py document.pdf --dpi 150 --quality 75 --noise 7

Higher DPI = cleaner scan, larger file:

python3 scripts/make_scanned.py document.pdf --dpi 300 --quality 92

Signature Replacement

Finding signature coordinates

Before replacing signatures, determine crop and placement coordinates. All coordinates are fractions of page dimensions (0.0-1.0).

  1. Convert the source PDF to images and visually inspect to find the signature region
  2. Iteratively crop to isolate just the signature ink (no text, no table lines)
  3. On the target PDF, find the area to clear (old digital signature) and where to paste

Use this Python snippet to explore coordinates interactively:

from pdf2image import convert_from_path
from PIL import Image

pages = convert_from_path("document.pdf", dpi=200)
page = pages[0]  # 0-indexed
w, h = page.size

# Crop a region and save for inspection
crop = page.crop((int(w*0.5), int(h*0.4), int(w*0.8), int(h*0.6)))
import tempfile, os
crop.save(os.path.join(tempfile.gettempdir(), "crop_test.png"))

Replace one signature

python3 scripts/make_scanned.py contract.pdf \
  --sig-pdf signatures.pdf \
  --sig-page 1 --sig-crop 0.41,0.33,0.62,0.42 \
  --sig-target 25 --sig-clear 0.61,0.41,0.85,0.52 --sig-place 0.62,0.415

Replace multiple different signatures

Each set of --sig-page, --sig-crop, --sig-target, --sig-clear, --sig-place adds one replacement. They are matched positionally:

python3 scripts/make_scanned.py contract.pdf \
  --sig-pdf signatures.pdf \
  --sig-page 1 --sig-crop 0.41,0.33,0.62,0.42 \
  --sig-target 25 --sig-clear 0.61,0.41,0.85,0.52 --sig-place 0.62,0.415 \
  --sig-page 2 --sig-crop 0.40,0.335,0.62,0.39 \
  --sig-target 27 --sig-clear 0.61,0.635,0.85,0.72 --sig-place 0.60,0.655

Signature parameters

ParameterDescription
--sig-pdfSource PDF containing real signatures
--sig-page NPage number in source PDF (1-indexed)
--sig-crop L,T,R,BCrop box to extract signature (fractions)
--sig-target NTarget page to replace signature on (1-indexed)
--sig-clear L,T,R,BArea to white-out old signature (fractions)
--sig-place X,YTop-left position to paste new signature (fractions)
--sig-size FSignature width as fraction of page width (default: 0.11)
--sig-dpi NDPI for rendering source signature PDF (default: 350)

Scan effect parameters

ParameterDefaultEffect
--dpi200Render resolution. Lower = grittier
--quality85JPEG compression. Lower = more artifacts
--noise5.0Gaussian noise stddev. Higher = noisier
--blur0.6Gaussian blur radius. Higher = softer
--rotation0.7Max rotation in degrees
--contrast-min0.88Min contrast (lower = more washed out)
--contrast-max0.95Max contrast

Workflow for signature replacement

When the user provides a PDF and a separate signature source:

  1. Check dependencies are installed (pillow, pdf2image, img2pdf, numpy, poppler)
  2. Examine the source signature PDF — convert to images, identify which pages have signatures
  3. Extract signatures — iteratively crop to isolate the ink, verify no text bleeds in
  4. Examine the target PDF — find pages with digital signatures, note the "Подпись:" or "Signature:" label positions
  5. Determine coordinates — clear area must cover old signature without eating into labels; place position should be right after the label
  6. Run the script with all parameters
  7. Verify output — check signature pages visually, adjust coordinates if needed
  8. Check metadata — run exiftool on the output to ensure no software traces remain

Common pitfalls:

  • Crop box too tight: signature strokes get clipped on edges
  • Clear area too wide: eats into "Подпись:"/"Signature:" labels or surrounding text
  • Signature too large/small: adjust --sig-size (0.11 is typical for contracts)
  • Source PDF is a phone photo: use higher --sig-dpi (350+) and higher ink threshold

FAQ

What does the pdf-look-scanned skill do?

Make PDF documents look like they were scanned on a physical scanner. Applies realistic effects: grayscale conversion, Gaussian noise, slight rotation, blur, edge shadows, and random offset. Optionally extract real handwritten signatures from a source PDF (or user-provided images) and replace digital signatures on specific pages. Use when the user asks to: make a PDF look scanned, give a PDF a scanned appearance, replace digital signatures with real/handwritten ones, fake a scan, add scan effects to a document, or make a document look printed and scanned.

How do I install pdf-look-scanned?

Run npx skills add https://github.com/vladmdgolam/agent-skills --skill pdf-look-scanned in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/pdf-look-scanned/ (personal) or .claude/skills/pdf-look-scanned/ (project).

Which AI agents can use pdf-look-scanned?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is pdf-look-scanned safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains pdf-look-scanned?

It is published by vladmdgolam in vladmdgolam/agent-skills. It has 49 recorded installs.

More from vladmdgolam/agent-skills

View all →

blender-mcp

vladmdgolam/agent-skills

Blender MCP expert for scene inspection, Python scripting, GLTF export, and material/animation extraction. Activate when: (1) using Blender MCP tools (getsceneinfo, executepython, screenshot, etc.), (2) writing Blender Python scripts for extraction or manipulation, (3) exporting scenes to GLTF/GLB for web (Three.js, R3F), (4) debugging material or texture export losses, (5) optimizing GLB files with gltf-transform, (6) using asset integrations (PolyHaven, Sketchfab, Hyper3D Rodin, Hunyuan3D). Covers critical export gotchas, material mapping survival, texture optimization pipeline, headless CLI patterns, and known failure modes.

AI & Agents2.4K installs

cinema4d-mcp

vladmdgolam/agent-skills

Cinema 4D MCP expert for extracting scene data, writing C4D Python scripts, and controlling Cinema 4D through MCP tools. Activate when: (1) using cinema4d MCP tools (getsceneinfo, listobjects, executepythonscript, addprimitive, etc.), (2) writing Python scripts for Cinema 4D extraction or manipulation, (3) working with MoGraph cloners/effectors/fields, (4) baking animation data from C4D scenes, (5) debugging C4D Python API errors, (6) extracting Redshift material or camera data. Covers critical gotchas, correct extraction patterns, MoGraph baking, timeline evaluation, API compatibility, and known failure modes.

AI & Agents92 installs

visual-feedback-loop

vladmdgolam/agent-skills

Open the skill to read its SKILL.md instructions.

AI & Agents51 installs

reverse-engineer-js

vladmdgolam/agent-skills

Reverse-engineer minified or obfuscated JavaScript bundles. Primary tool: humanify (humanifyjs) — uses an LLM to rename mangled identifiers back to meaningful names. Default model: gemini-3.8-flash. Use when the user says 'deobfuscate this bundle', 'humanify this', 'rename minified vars', 'reverse engineer this JS', 'what does bundle.js do', or is working in a project with a deobfuscated og/ or modules/ folder fed by humanify. Covers humanify CLI invocation, the pseudo-TTY workaround for cursorTo crashes, single-module extraction from a bundle, and chaining with beautifiers.

AI & Agents45 installs

time-lens

vladmdgolam/agent-skills

Analyze and visualize time spent on software projects by combining data from multiple sources: WakaTime coding time, git commit session detection, Claude Code usage, Codex CLI usage, and Cursor IDE usage. Produces both an interactive HTML dashboard (dark-themed, Chart.js) and a Markdown report with ASCII charts. Use when the user asks to: analyze work hours, calculate time spent on a project, generate a work hours report, visualize coding activity, create a project time breakdown, or summarize development effort across date ranges.

Docs & Writing45 installs

figma-context-mcp

vladmdgolam/agent-skills

Expert guide for using the Figma Context MCP (Framelink) efficiently while avoiding 429 rate-limit errors. Activate when: (1) using Framelink Figma MCP tools (getfigmadata, downloadfigmaimages), (2) fetching Figma designs for code generation, (3) user hits 429 rate limits from Figma API, (4) extracting design tokens or component data from Figma, (5) downloading Figma assets/images, (6) any design-to-code workflow involving Figma URLs. Covers metadata-first fetching, depth-limited node trees, batch image downloads, rate-limit diagnostics, and plan-tier awareness.

Popular docs & writing skills

View category →

grill-with-docs

mattpocock/skills

A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.

Docs & Writing1.2M installs

lark-markdown

open.feishu.cn

飞书 Markdown:查看、创建、上传、编辑和比较飞书中的原生 Markdown 文件。当用户要操作飞书 Markdown 文件,或比较其远端版本及本地草稿时使用。纯本地 Markdown 文件操作不触发本 skill。不负责将 Markdown 导入为飞书在线文档,也不负责文件搜索、权限、评论、移动、删除等云空间管理操作。

Docs & Writing778.7K installs

writing-beats

mattpocock/skills

Writing, exploit; assemble raw material into a journey of beats, grounding each term before a beat leans on it.

Docs & Writing490.7K installs

writing-shape

mattpocock/skills

Writing, exploit: shape raw material into an article, paragraph by paragraph.

Docs & Writing490.2K installs

writing-fragments

mattpocock/skills

Writing, explore: mine raw fragments, no structure yet.

Docs & Writing489.6K installs

writing-for-agents

mattpocock/skills

Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.

Docs & Writing479.3K installs