Skip to main content

Pixel-perfect template generator for e-ink devices like Supernote, reMarkable, and Boox

Project description

Table of Contents

  1. Table of Contents
  2. Badges
  3. About
  4. Why This Tool?
  5. What this tool is NOT
  6. Features
  7. Installation
  8. Quick Start (Wizard)
  9. Full Documentation
  10. Supported Devices
  11. Configuration
  12. Usage Examples
    1. Basic Templates
  13. Output
  14. AI-Assisted Development (ai-wizard-prompt.org)
  15. Contributing
    1. Development Setup
  16. License
  17. Credits

Table of Contents

Badges

Python CI Python Version License

About

A device-agnostic command-line tool for generating mathematically balanced, pixel-perfect page templates for e-ink devices. Developed with the Supernote Manta, this tool supports millimeter or pixel specifications for human-readable, technically-precise, or true-scale template configurations.

Why This Tool?

This tool was born from the frustration of online generators that fail to handle "half-lines" or pixel alignment, resulting in uneven, blurry, or aliased lines on high-DPI e-ink screens. This generator calculates exact pixel-perfect margins and spacing based on your device's specific resolution and DPI, ensuring every line is crisp and uniform.

Problem: Blurry Lines (Fractional Pixels) "The image on the left (using --true-scale) shows blurry, aliased lines caused by fractional pixels. The image on the right (default) shows the tool's pixel-perfect rounding, which ensures every line is crisp."

"Before" (Blurry) "After" (Pixel-Perfect)
before_pixel_perfect.png after_pixel_perfect.png

Problem: Toolbar/Overlay The image on the left (built-in template) shows the file name and page count overlays displaying over the template. The image on the right shows the lines being automatically adjusted to render within the margins.

"Before" (OEM Template) "After" (Pixel-Perfect)
built-in_9mm.png pixel_perfect_9mm.png

Problem: Half-Spaced Lines and Cells The image on the left (using --enforce-margins) shows lines and cells being cut off abruptly at the exact margin. The image on the right (default) shows the tool's smart grid-centering, which automatically pads the margins to prevent 'half-cells' and create a cleaner, more balanced page.

"Before" (cut-off cells) "After" (Pixel-Perfect)
before_half_cells.png after_adjusted_margins.png

Problem: Grid Misalignment The image on the left (default) shows a grid being awkwardly cut off. The image on the right (--force-major-alignment) shows the margins being automatically adjusted to end perfectly on a major grid line.

"Before" (Misaligned) "After" (Force-Aligned)
problem_before_grid_alignment.png problem_after_grid_alignment.png

What this tool is NOT

  • Calendar/Schedule Generator
  • Task/To Do list Generator
  • Color e-ink Template Generator (yet)
  • Real-Time GUI Editor
  • Monetized or Paywalled Tool

Features

  • Interactive Wizard: A guided, step-by-step terminal wizard to create complex templates without needing to memorize flags. Just run eink-template-gen --wizard.
  • Pixel-Perfect Alignment: Automatically adjusts margins and spacing to eliminate blurry lines and aliasing artifacts.
  • Multiple Template Types: Generate lined, dotgrid, grid, manuscript, french ruled, music staff, isometric, hexgrid, and hybrid pages.
  • Flexible Layouts: Create single pages, uniform N x M grids, mixed-type grids, and complex, ratio-based layouts using JSON.
  • Decorative Title Pages: Generate artistic cover pages using Truchet tiles, L-System fractals, noise fields, and more.
  • Powerful Customization: Add major/minor lines, decorative separators, line numbers, and axis labels.
  • Flexible Spacing: Define layouts using millimeters (default), exact pixels, or by fitting an exact line count.

Installation

pip install eink-template-gen

Quick Start (Wizard)

For the easiest experience, use the interactive wizard.

  1. Install the tool (if you haven't already):

    pip install eink-template-gen
    
  2. Run the wizard:

    eink-template-gen --wizard
    

This will guide you step-by-step through selecting a device, template, and all the relevant options, then generate the file for you.

Full Documentation

For detailed guides, feature deep-dives, and advanced examples, please see the docs/ directory:

Supported Devices

Built-in device profiles:

  • Supernote Manta (10.7", 1920x2560, 300 DPI)
  • Supernote A5 X (10.3", 1404x1872, 226 DPI)
  • Supernote A6 X (7.8", 1404x1872, 300 DPI)
  • Supernote Nomad (7.8", 1404x1872, 300 DPI)

Configuration

Set a default device to avoid specifying --device every time:

eink-template-gen util set-default-device manta
eink-template-gen util set-default-margin 10

Configuration is stored locally in config.json.

Usage Examples

Basic Templates

# Simple lined paper
eink-template-gen lined --spacing 7mm

# Dot grid with major crosshairs
eink-template-gen dotgrid --spacing 5mm --major_every 5

# Graph paper with axis labels
eink-template-gen grid --spacing 5mm --major_every 5 --axis-labels

# Manuscript paper for handwriting practice
eink-template-gen manuscript --spacing 8mm

For more complex examples, including multi, layout, and title commands, see the Advanced Usage Examples documentation.

Output

Templates are saved to out/<device_id>/ by default:

out/
├── manta/
│   ├── lined_7mm_0_5px.png
│   ├── grid_5mm_0_5px_h-wavy.png
│   └── title_truchet_10mm_seed42.png
└── a5x/
    └── lined_6mm_71px.png

Use --output-dir and --filename to customize output location.

AI-Assisted Development (ai-wizard-prompt.org)

This project includes a file named ai-wizard-prompt.org (and .md). This file is not used by the Python code.

It is a comprehensive "system prompt" or context file that defines the entire logic of the wizard as a persona for a Large Language Model (AI).

When to use it:

  • Prototyping: Quickly test new or complex feature combinations without writing Python code for the wizard.
  • Assistance: If you are unsure of the flags, you can have an AI act as the complete wizard to guide you and generate the final command or JSON file.

How to use it:

  1. Open ai-wizard-prompt.org or ai-wizard-prompt.md.
  2. Copy the entire contents of the file.
  3. Paste the contents into a new chat session with a capable LLM (like Gemini, Claude, or ChatGPT).
  4. On a new line after the pasted text, type: Okay, you are the eink-template-gen Wizard. Start.
  5. The AI will then take on the persona of the wizard and begin asking you questions, one at a time, to build your template.

Contributing

Contributions are welcome! This project uses:

  • Cairo for high-quality 2D graphics rendering
  • Python 3.8+
  • Pure Python implementation (no external dependencies for noise/fractals)

Development Setup

To set up a development environment:

# Clone the repo
git clone https://github.com/calebc42/eink-template-gen.git
cd eink-template-gen

# Install in editable mode with dev/test dependencies
pip install -e .[dev,test]

License

This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.

Credits

Developed for the Supernote community with love for pixel-perfect templates.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eink_template_gen-0.5.1.tar.gz (102.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eink_template_gen-0.5.1-py3-none-any.whl (98.6 kB view details)

Uploaded Python 3

File details

Details for the file eink_template_gen-0.5.1.tar.gz.

File metadata

  • Download URL: eink_template_gen-0.5.1.tar.gz
  • Upload date:
  • Size: 102.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for eink_template_gen-0.5.1.tar.gz
Algorithm Hash digest
SHA256 9314ebc51976ad8c818b9c66d0f5ae7e790ed76a288ea08e7f6164a100c14dc2
MD5 762c733943ea76250f18de128d2aab2b
BLAKE2b-256 90d1af2dfca4fe04a85db559cc023e7d35fe9b67d368af98401faf09f621a36b

See more details on using hashes here.

File details

Details for the file eink_template_gen-0.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for eink_template_gen-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 86b3b7091a5a30df96a7ccd37eb7f717cb75dd65cc96c11d01421f08fd0715f7
MD5 6a9c177a59b953ba744f3d2310db4dd4
BLAKE2b-256 beb6fd43a4048516e16f88bb834763b4dc2562940ea9159ce8ca66da7a9f407f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page