A static web app for creating fantasy-style handwritten letters and exporting them as PNG images.
- Plain HTML, CSS, and JavaScript
- Google Fonts for free handwritten/script fonts
- No build step and no backend
From this folder, run:
python -m http.server 4173 --bind 127.0.0.1Then open:
http://127.0.0.1:4173/
If your system Python is unavailable, use any static file server or open index.html directly in a browser.
If you are running into CORS issues with Chrome you can run the following command on Windows:
- Open Start window
- Search Run and open it or press Window+R
- Paste chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security and execute it
That should open a new Chrome window with Web Security disabled. Once you are done, close the window.
- 86 handwritten, runic, gothic, elven-style, infernal-style, and fantasy display font choices
- Previewable font picker that renders each font name in its own typeface
- 16 AI-generated parchment texture choices
- Multiple letter sizes
- Clean Cut as the default edge style
- Material-style deckled, torn, and singed edge masks
- Additional jagged deckle, ragged tear, charred ragged, and clean edge styles
- Editable letter body
- Basic WYSIWYG formatting: bold, italic, underline, and alignment
- Generic seal/stamp presets with blank wax, added fantasy symbols, wax, and ink stamp styles
- Optional embossed initials in the seal
- PNG export
assets/parchment-atlas.pngcontains the generated parchment texture atlas used by the paper selector.assets/edge-*-mask.pngcontains tuned alpha masks for deckled, torn, and singed paper edges.assets/edge-singed-scorch.pngcontains the contour-following burn overlay with patchy brown and black char variation.
tools/generate_deckled_edge.pyregenerates onlyedge-deckled-mask.png.tools/generate_torn_edge.pyregenerates onlyedge-torn-mask.png.tools/generate_singed_edge.pyregenerates onlyedge-singed-mask.png.tools/generate_singed_scorch.pyregenerates onlyedge-singed-scorch.png.tools/generate_edge_assets.pyis a convenience wrapper that runs all four scripts.