laudo
Convert markdown files to docx or pdf using docxtpl templates.
Installation
pip install laudo
Requires Python 3.13+ and LibreOffice for PDF output.
Usage
CLI
laudo gen [--dir <folder>] [--debug] [--pdf] [--output <path>] [--template <path>]
laudo captions [--dir <folder>]
laudo template <name> [--dir <folder>]
laudo vars [--dir <folder>]
laudo init <name> [--dir <folder>]
laudo install
Python API
from laudo import convert
convert("my_project/", "output.docx")
convert("my_project/", "output.pdf")
Input Folder Structure
my_project/
├── template.docx # docxtpl template with Jinja2 placeholders
├── fotos/ # Images (captions edited via GUI)
│ ├── image1.png
│ └── events/
│ └── party.jpg
├── context.txt # (optional) Variables one per line: key = value
├── intro.md # One or more .md files
└── chapter-1.md
Template
A standard Word document using docxtpl syntax with Jinja2 placeholders like {{ variable }} or {{p intro|markdown }}.
To use a template from a shared folder, create .laudo/.template with the template name and set the LAUDOS_TEMPLATES_FOLDER environment variable.
context.txt
Optional file with variables in key = value format, one per line. Lines starting with # and empty lines are ignored. These variables are available for substitution inside .md files via {{ varname }}.
Markdown files
Every .md file is read and its content is injected as a template variable named after the filename (without extension, spaces → underscores):
| File | Template variable |
|---|---|
intro.md |
intro |
chapter 1.md |
chapter_1 |
Inside markdown files you can reference context variables with {{ varname }} and embed image groups with image_group(name, cols).
Images
All images in fotos/ (including subdirectories) are available as the pics variable in templates. Use pics.group("events") to get images from a subfolder, or pics.all for all images. Captions are edited via the laudo captions GUI.
Template helpers
{{p variable\|markdown }}— render markdown as formatted docx content{{p subdoc("file.docx", key=val) }}— embed a sub-template{{p image("fotos/logo.png", width=50) }}— inline image with size control
License
MIT
Metadata
Release files for laudo 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| laudo-0.2.1.tar.gz | 94.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| laudo-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 194.6 kB
Release files / laudo-0.2.1.tar.gz
| Download URL | laudo-0.2.1.tar.gz |
|---|---|
| Size | 94.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3332f92d77c11915ca80e1101d38b72770106206347af64f684d1ae47784643a
|
|
BLAKE2b-256 checksum How to use checksums |
e3426fe335875cd078c6b11e4ec518253bc68375ef9f808a717a2725fcaee1c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / laudo-0.2.1-py3-none-any.whl
| Download URL | laudo-0.2.1-py3-none-any.whl |
|---|---|
| Size | 100.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2e7a667820be858b101fd2425e467df408cb5a7ea8672d464453912737c1996b
|
|
BLAKE2b-256 checksum How to use checksums |
dd86f16412cb1aa6b67c1e7161223e5527794b999cffbfd88c5e16326ff6514e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|