Skip to main content

notion-bg-gen

Mesh-gradient cover images for Notion pages, from a terminal UI or a one-line command.

CI PyPI Python Downloads License Ruff Stars

A dark mesh-gradient cover reading Engineering Wiki

Try it without installing anything

If you have uv:

uvx notion-bg-gen

That opens the terminal UI. Type a title, press s, and the cover lands in covers/.

Install it properly

macOS (recommended) brew install dj-skn/tap/notion-bg
Any platform, with uv uv tool install notion-bg-gen
Any platform, with pipx pipx install notion-bg-gen
Plain pip pip install notion-bg-gen
No Python at all Download a binary

Then run:

notion-bg

New to the terminal? The installation guide walks through it one step at a time, including what to do when macOS says the download "cannot be opened".


The terminal UI

Running notion-bg with no arguments opens an interactive app. Everything updates live, and the preview is the real renderer at a smaller size, so what you see is what gets written.

The notion-bg terminal UI, showing controls on the left and a live cover preview on the right
Key Action
s Save the cover at full resolution
r Shuffle - draw a new random layout
q Quit
Tab Move between fields

The command line

Every option in the UI is a flag, so covers can be generated in a script, a Makefile, or a CI job.

# One cover, default look
notion-bg generate "Engineering Wiki"

# Pick a palette and a style
notion-bg generate "Roadmap" --palette ocean --style aurora

# A batch, reproducibly
notion-bg generate --from-file titles.txt --seed 7 --out ./covers

# Five variations to choose from
notion-bg generate "Design System" --count 5

Commands

Command What it does
notion-bg Open the terminal UI
notion-bg generate [TEXT]... Generate one or more covers
notion-bg palettes List palettes (--json for machine output)
notion-bg styles List styles and sizes (--json too)
notion-bg config edit Add your own palettes and themes
notion-bg --help Full reference

Options

Flag Default Notes
--palette, -p classic See notion-bg palettes
--theme, -t dark dark or light
--style, -s mesh mesh, aurora, blobs, linear
--size cover@2x Named size or 2000x800
--count, -n 1 Covers per headline
--out, -o covers Output directory
--format, -f jpg jpg, png, webp
--quality, -q 92 JPEG and WebP quality
--grain, -g 0.35 Film grain, 0 to 1
--seed random Same seed, same image
--font bundled Inter Bold Any .ttf or .otf
--overwrite off Replace instead of numbering
--dry-run off Report paths, write nothing

Styles

Four gradient styles: mesh, aurora, blobs and linear
Style Look
mesh Overlapping radial blobs under a heavy blur. The original.
aurora Soft horizontal curtains with a sine warp.
blobs Fewer, tighter, higher-contrast orbs.
linear A clean multi-stop sweep. The restrained option.

Palettes

Eight built-in palettes shown across dark and light themes

classic, sunset, ocean, candy, forest, ember, lavender, mono - each usable on either theme. Add your own with notion-bg config edit.

Themes

The same palette rendered on the light and dark themes

The headline colour is chosen for legibility. If a palette puts a dark field behind dark text, the ink flips automatically so the title stays readable. Override it with --text-color when you want the last word.


Sizes

Name Pixels Use
cover 1500 x 600 Notion's documented minimum
cover@2x 3000 x 1200 Default. The same band on a HiDPI screen
wide 3840 x 1200 Very wide layouts
square 1200 x 1200 Social cards and thumbnails

Any WIDTHxHEIGHT works too, up to 10000px a side.


Using it from a script or an agent

generate is built to be driven by something other than a human:

  • --json puts a structured result on stdout and all progress on stderr
  • --seed makes output byte-for-byte reproducible
  • --dry-run reports the paths it would write
  • palettes --json and styles --json make the options discoverable
  • Exit codes are 0 success, 1 render failure, 2 bad input
  • A bare notion-bg in a pipe or a CI job prints help and exits 2 rather than trying to open a full-screen UI
notion-bg generate "Release Notes" --seed 42 --json
{
  "covers": [
    {
      "path": "covers/release-notes.jpg",
      "text": "Release Notes",
      "seed": 42,
      "palette": "classic",
      "theme": "dark",
      "style": "mesh",
      "width": 3000,
      "height": 1200,
      "format": "jpg",
      "written": true,
      "bytes": 1137482
    }
  ],
  "count": 1
}

More in the automation guide.


Your own palettes

notion-bg config edit
[palettes.brand]
name = "Brand"
description = "Our colours."
colors = ["#0F172A", "#1E40AF", "#3B82F6", "#93C5FD"]

[themes.midnight]
background = "#020617"
text = "#E2E8F0"
notion-bg generate "Internal Docs" --palette brand --theme midnight

Documentation

Contributing

Issues and pull requests are welcome. CONTRIBUTING.md covers the setup, which is uv sync and pytest.

License

MIT.

The bundled Inter typeface is used under the SIL Open Font License 1.1.

Metadata

Release files for notion-bg-gen 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for notion-bg-gen 1.0.0
File Size Uploaded
notion_bg_gen-1.0.0.tar.gz 207.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for notion-bg-gen 1.0.0
File Interpreter ABI Platform
notion_bg_gen-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 413.7 kB

Release files / notion_bg_gen-1.0.0.tar.gz

Download URL notion_bg_gen-1.0.0.tar.gz
Size 207.4 kB
Tags Source
SHA-256 checksum
How to use checksums
723bd9f96d5722a6bf43ebad6938a1309c75301c9825172bd61705e62e4d8b5b
BLAKE2b-256 checksum
How to use checksums
e056e6b942f398e485d291ac6f426fb8320d5521d5ec90023c68449c9b211b0a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / notion_bg_gen-1.0.0-py3-none-any.whl

Download URL notion_bg_gen-1.0.0-py3-none-any.whl
Size 206.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8995c77fe53ce74341f2d252b7299de41ae0ed9be7dd9c11d21c3e855967298e
BLAKE2b-256 checksum
How to use checksums
579236317caab26241e111aa1b76f88cc09bd5da4c9f1808776f495c51ea3bd4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release history Release notifications | RSS feed

1.0.1

2 release files

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page