Pixel-perfect template generator for e-ink devices like Supernote, reMarkable, and Boox
Project description
Table of Contents
- Badges
- About
- Why This Tool?
- What this tool is NOT
- Features
- Installation
- Full Documentation
- Supported Devices
- Configuration
- Usage Examples
- Output
- Contributing
- License
- Credits
Badges
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) |
|---|---|
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) |
|---|---|
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) |
|---|---|
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) |
|---|---|
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
- 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
Full Documentation
For detailed guides, feature deep-dives, and advanced examples, please see the docs/ directory:
- Features
- Guides
- Examples
- Reference
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.
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)
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eink_template_gen-0.3.1.tar.gz.
File metadata
- Download URL: eink_template_gen-0.3.1.tar.gz
- Upload date:
- Size: 78.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f459adeade3c8cef88eada9a495ab408efb29b8de74569cf6ae2264e74d379ec
|
|
| MD5 |
665b2abe96fbf038796d1f08ac978fe6
|
|
| BLAKE2b-256 |
aca19860da58053c042ea7a7bf014a4f0bb439e1900316703b274c91912cc9b0
|
File details
Details for the file eink_template_gen-0.3.1-py3-none-any.whl.
File metadata
- Download URL: eink_template_gen-0.3.1-py3-none-any.whl
- Upload date:
- Size: 76.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5970470978bef6c6188dc32fb8c57ea573028bbace30e2e86318b946e9b44f15
|
|
| MD5 |
ac18d980ad263d22f0102cd877abea22
|
|
| BLAKE2b-256 |
e29e89a89812e653f775aea3d0ee18b0c78c650cd45b807580b1c3c7b4982075
|