Skip to content

YellowFoxH4XOR/deckle

Repository files navigation

Deckle

Latest release Downloads License: MIT macOS 13+ Universal

projects.akshatkatiyar.com/projects/deckle

A free, open-source macOS menu bar app that lays a subtle paper-grain texture over your entire screen, making long reading and writing sessions feel like paper instead of glass. Inspired by Paperman.

Deckle toggling its paper texture over a web page

If Deckle makes your screen nicer, a star helps other people find it ⭐

A deckle is the wooden frame used in hand papermaking — it leaves behind the soft, feathered "deckle edge" that marks real handmade paper.

Not a blue-light filter — a matte texture overlay. The grain breaks up the perfectly uniform backlight glow that makes screens feel harsh, while every pixel of your work stays interactive: the overlay is fully click-through.

Features

Deckle's menu: texture picker, intensity slider, snooze, and settings

  • 18 paper textures in three families:
    • Papers — Soft Wove, Rice Paper, Laid Cotton, Newsprint, Cold Press, Artist Canvas, Felt Side, Frost Glassine
    • Warm & tinted — Foxed Amber, Bookcloth, Recycled Kraft, Plum Kozo, Rose Quartz, Sage Press, Nordic Sky
    • Dark — Ink Stone, Midnight Slate, Espresso
  • Intensity slider (5–45%), plus grain controls — size (Fine → Grainy) and strength, applied to any texture
  • Global hotkey — ⌥⌘P toggles the texture from any app
  • In-app updates — checks GitHub Releases daily; one-click update, or turn on automatic installs
  • Paper Mill — blend your own paper (tint, wash, weave, blotch) and save it; export as JSON, import others', or install shared recipes from the community papers repo
  • Per-app rules — hide the paper in chosen apps ("Except…") or show it only in chosen apps ("Only…")
  • Automationdeckle:// URL commands work from Shortcuts, Raycast, Alfred, cron, or Terminal
  • Capture privacy — optionally hide the texture from screenshots and screen recordings while it stays visible to you
  • Snooze for 15 min / 30 min / 1 h — auto-resumes
  • Multi-monitor support with per-display on/off
  • Launch at login
  • Click-through & lightweight — the texture is one small tiled image; ~0% CPU at rest
  • Menu-bar only: no Dock icon, no windows to manage. The paper-sheet glyph fills in when the texture is on and shows as an outline when it's off.

Install

Homebrew

brew tap yellowfoxh4xor/tap
brew trust yellowfoxh4xor/tap   # Homebrew 6+ asks once for third-party taps
brew install --cask deckle

Download

Grab the DMG from the latest release, open it, and drag Deckle into Applications. The app is signed with a Developer ID and notarized by Apple, so it launches without any Gatekeeper warning.

Build from source

Requires Xcode command line tools, macOS 13+:

git clone https://github.com/<you>/deckle.git
cd deckle
make install    # builds, copies Deckle.app to /Applications, and launches

Or make run to try it from dist/ without installing. Look for the paper-sheet icon in your menu bar.

How it works

  • One borderless, transparent NSWindow per display at .screenSaver window level (above the menu bar), with ignoresMouseEvents = true so all input passes through.
  • The paper grain replicates SVG's feTurbulence type="fractalNoise" baseFrequency="1.5" numOctaves="3": several octaves of seamlessly tileable value noise are summed, then mapped to translucent dark/light speckles. One 256×256 tile is generated per texture and tiled across the screen by the CoreAnimation render server, so memory stays flat no matter the resolution.
  • The intensity slider just drives the overlay window's alphaValue — the texture itself is rendered once and cached.
  • Energy design: the overlay is retained-mode — after setup, Deckle renders nothing per frame and idles at ~0 wakeups. Scheduled work (update checks) uses NSBackgroundActivityScheduler so macOS coalesces wakeups, and slider drags are throttled to ~30 regenerations/second. ~18 MB physical footprint regardless of display count.

Automation

Anything that can open a URL can drive Deckle — Shortcuts' "Open URL" action, open in Terminal, Raycast, Alfred, cron:

deckle://on | off | toggle
deckle://snooze?minutes=30      deckle://resume
deckle://texture?name=Ink%20Stone
deckle://intensity?percent=25
deckle://grain?size=2&strength=1.2

Examples: a Shortcuts personal automation "At sunset → Open URL deckle://on" gives you circadian scheduling; "When Work Focus turns on → deckle://texture?name=Soft%20Wove" pairs papers with contexts.

Development

swift run            # run unbundled (dev)
make app             # build dist/Deckle.app
make clean

No dependencies; pure Swift + AppKit + SwiftUI.

Roadmap

  • Battery auto-disable & Low Power Mode awareness
  • Built-in sunset scheduling (today: use a Shortcuts automation with deckle://on)

Contributing

The easiest PR: share a paper recipe — 10 lines of JSON, no Swift needed. For code, see CONTRIBUTING.md and the good first issues. Questions and ideas → Discussions.

License

MIT

Releases

Packages

Contributors

Languages