A taste of what Ctrl+Grid makes — one A4 example per generator, plus a
multi-page document, the calibration cover sheet, a whole linked calendar, a
notebook of sections, a calligraphy guide, a box net to cut out and a sheet with
a printed ruler along its edges.
Each is an ordinary definition file: open the .yaml, change it, regenerate.
The .pdf is the real output (measured, to scale); the image is just a preview.
Only the calendar ships without its PDF — 405 pages is too much to carry in a
repository, and the one command below rebuilds it in about a second.
Try one without installing anything:
uvx --from git+https://github.com/DocAtPrompt/ctrlgrid.git \
ctrlgrid -d examples/01-lines-squared.yaml -o out.pdfThe preview images are rasterised from the PDFs with one command, recorded here so the gallery can be rebuilt the same way every time — the tool was not written down before 0.12.0, and that is why bumping a version used to leave the previews looking slightly different from each other:
pdftoppm -png -scale-to-x 600 -scale-to-y 849 -f 1 -l 1 example.pdf previews/nameThe calendar has no committed PDF, so its two previews come from a fresh render — page 6 for the month view and page 18 for the day view, which is where they fall once the title page is counted.
Everything here is A4. Add --format a5, --format letter or a
--device remarkable-paper-pro to the same command and it re-fits the new
medium — the examples using %w/%h/%s (polar, mandala) fill it
proportionally.
| Preview | What it is |
|---|---|
![]() |
lines — 5 mm squared paper filling the whole page from the top-left (align: top-left): heavy lines start top-left, cells run to the edges, and the incomplete block falls to the bottom.01-lines-squared.yaml · PDF |
![]() |
lines (complete blocks) — the same, but snap: cycle keeps only whole 25 mm blocks, so every edge is a heavy major line and the leftover stays blank margin.01b-lines-squared-blocks.yaml · PDF |
![]() |
dots — a 5 mm dot grid, every fifth dot larger and darker.02-dots-grid.yaml · PDF |
![]() |
grid — a 12 × 12 labelled board (A…, 1…) with a checker fill.03-grid-battleship.yaml · PDF |
![]() |
staves — treble-clef manuscript paper; the clef is a glyph from the bundled music font.04-staves-treble.yaml · PDF |
![]() |
maze — multi-page — a booklet of three mazes, each with its solution on the next sheet: six sheets from one command.05-maze-booklet.yaml · PDF |
![]() |
polar — a concentric target whose radii are a share of the shorter side (%s), so it fills any format.06-polar-target.yaml · PDF |
![]() |
tiling — a flat-top hexagon honeycomb with a three-colour fill.07-tiling-hex.yaml · PDF |
![]() |
form — a weekly planner: seven day rows with a done-box, then a notes block.08-form-weekly.yaml · PDF |
![]() |
perspective — a two-point drawing grid: a horizon, two vanishing points off the sheet, and true verticals.09-perspective-2pt.yaml · PDF |
![]() |
mandala — a twelve-fold template: guide rings and spokes, a flower-of-life rosette, a double ring of lotus petals, two bead rings and a twelve-sided frame.10-mandala.yaml · PDF |
![]() |
mandala (variant) — the same blade, a different character: a scalloped outer border, a pinwheel of tilted squares, an inward-turned scalloped ring and a flower-of-life centre.10b-mandala-scallops.yaml · PDF |
![]() |
--cover — the calibration cover sheet (§ 8.8): a 50 mm square and 100 mm rule to catch a scaling print driver, a ladder of stroke weights so you see how each one prints, and a settings summary. The preview is the cover; the grid it precedes is page two.11-cover-calibration.yaml · PDF |
![]() |
lines (slanted) — an italic calligraphy guide: a ruled cycle of ascender, body, descender and air, crossed by a family at 55°. A slanted family is spaced perpendicular and clipped to the pattern area (§ 7.1).14-calligraphy-italic.yaml · PDF |
![]() |
calendar — a whole document — a linked, write-on year planner: a cover, the year on one sheet, two half-year tables, twelve months, every day and three note pads, all cross-linked — tap a date and land on that day. The previews are a day page (schedule with half hours, tick boxes, squared notes) and January. 405 pages and ~1.6 MB, so this one ships without its PDF: ctrlgrid -d examples/12-calendar-year.yaml -o calendar.pdf builds it in about a second.12-calendar-year.yaml · preset calendar-a4 |
![]() |
notebook — several papers in one linked document: a cover, a contents page that links to each section, dividers, and sections filled by dots, lines and staves. The header names the section, the footer counts the pages. The previews are the contents and a journal page.15-notebook.yaml · PDF · preset notebook-a4 |
![]() |
net — an 80 × 50 × 30 mm tray: base, four walls, four glue tabs, cut lines solid and creases dashed. Print at 100 %, cut, fold — if it closes, nothing scaled it. Dimensions are the inner ones.16-net-tray.yaml · PDF · preset box-tuck-a4 |
![]() |
ruler — the promise, on the sheet: a centimetre scale along the bottom and left edges, zeroed on the pattern area so the numbers agree with the grid. Print at 100 % and lay a real ruler against it.13-ruler-edge.yaml · PDF |
The maze booklet uses a fixed seed for a reproducible set — regenerate it with:
ctrlgrid -d examples/05-maze-booklet.yaml --seed 4711 -o out.pdf

















