The layout is what actually gets drawn on top of the page canvas - a set of blocks (text, image, box, signature, QR, grid; see Block Types Reference), split across one or more JSON files called partials.

Partial files

How partials get combined

process.js's process(filename) calls (see Scripting & Processing) decide which partials are actually merged for a given generation run. If process.js doesn't exist at all, the app behaves as if it contained exactly process("overlay.json"); - so a project with nothing conditional doesn't need a process.js at all, just overlay.json.

Every block's id across everything actually included in one run must be unique - two partials both included in the same run can't define a block with the same id.

Backgrounds and multi-page

A block carries an optional page number (default 1). At generation time, blocks are grouped by page, and each page's background resolves from a backgrounds map (with a "default" fallback) - a single-page layout just sets backgrounds.default and omits page on every block, which is exactly what a project created via New Project starts with.

The Layout Editor only shows and edits page 1

Asset paths

Any asset path referenced from a layout file ("assets/dealer_logo.png", etc.) is relative to the project folder - see Assets & Fonts for adding images/fonts to a project.