Skip to main content

qparameterize

Parameterize Quarto documents for batch rendering with multiple parameter sets for the jupyter engine.

The default uses papermill.

However, when rendering to HTML with Quarto's Jupyter engine, each execution overwrites output files (figures, cell outputs) because filenames like cell-output-1 are only unique within a single file, not across parameterized runs.

This tool solves that by generating separate .qmd files with unique labels, so Quarto can render them all without conflicts.

Why an alternative to quarto's default parameterizing?

The default is excellent for parameterizing Jupyter notebooks when generating single-file outputs e.g. notebooks, PDFs or contained HTML pages.

See Quarto documentation on parameters for more context.

The Jupyter engine generates output filenames with prefixes like cell-output-1, cell-output-2 for figures and other artifacts. These prefixes are the automatic labels of the cells. Even when cells are labelled, those labels are only unique within the file. When you render multiple parameterized versions, the last run overwrites all previous outputs.

e.g. If you render a file map.qmd with parameters to html

quarto render map.qmd -P country:afghanistan -o afghanistan.html
...
quarto render map.qmd -P country:zimbabwe -o zimbabwe.html

The artifacts for all renderings will be stored in _site/map/. If the first cell of map.qmd has an image output it will be saved as _site/map/figure-html/cell-output-1.png for all the renderings. All the HTML files will show display images from the last rendering!

Solution

This package addresses the issue by:

  1. Substituting parameter values in the parameters block
  2. Adding unique labels to all code blocks based on parameter values
  3. Outputs a parameterized qmd file

With this approach, the parameterizing is separated from the rendering. When rendering, Quarto will know of all the qmd source files.

Workflow

  1. Create a .qmd with a parameters block
  2. Run qparameterize for each parameter set → generates input--param-values.qmd
  3. Run quarto render on all generated files

Installation

Requires Python 3.11+.

# With uv
uv pip install qparameterize

# With pip
pip install qparameterize

Usage

Define a parameters block

In your .qmd file, mark a code block with the parameters tag:

```{python}
#| tags: [parameters]
animal = "cat"
count = 5
```

Run the tool

# Using key:value pairs
uv run qparameterize input.qmd -P animal:dog -P count:10

# Using a YAML file
uv run qparameterize input.qmd --execute-params params.yaml

# With custom output filename
uv run qparameterize input.qmd -P animal:dog -P count:10 -o ten-dogs.qmd

Example YAML params file

animal: dog
count: 10

Output

A new file with parameter values in the filename:

input.qmd → input--dog-10.qmd

The output file has:

  • Substituted parameter values
  • Unique labels on all code blocks (e.g., #| label: dog-10--1)

Cleaning up

To delete all previously generated files:

uv run qparameterize --clean

The generated files are tracked in .quarto/qparameterize.txt.

In A Quarto Project

Parameterize in the pre-render step and clean up in the post-render.

project:
  type: website
  pre-render:
    - uv run qparameterize input.qmd -P animal:dog -P count:10
    - uv run qparameterize input.qmd -P animal:elephant -P count:7
  post-render:
    - uv run qparameterize --clean

Development

# Lint
uv run --group dev ruff check src/

# Test
uv run --group dev pytest

Metadata

Release files for qparameterize 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qparameterize 0.1.1
File Size Uploaded
qparameterize-0.1.1.tar.gz 23.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for qparameterize 0.1.1
File Interpreter ABI Platform
qparameterize-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 32.9 kB

Release files / qparameterize-0.1.1.tar.gz

Download URL qparameterize-0.1.1.tar.gz
Size 23.4 kB
Tags Source
SHA-256 checksum
How to use checksums
92b182b8a1017073b53c73dbd6345f3a628dbdecde713d143b9e2336993788ac
BLAKE2b-256 checksum
How to use checksums
3e0c22c130b3ccec74b6a3c70ac2ee040504b07c62307dcd7c28b532ac95d961
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 13, 2026.

Transparency log

Release files / qparameterize-0.1.1-py3-none-any.whl

Download URL qparameterize-0.1.1-py3-none-any.whl
Size 9.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a263a1468fdfec8f8fa0edfa953ea1f059c957772ca4c33215ca2640c2f11c7d
BLAKE2b-256 checksum
How to use checksums
8d83bd6d68cf336581c07c14de11ba51a2daecb8fe725e221550f2d8e4cc09e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page