Documentation
PageFuse is a CLI tool for assembling pages from multiple documents into one output, or splitting one document into many — across any mix of formats.
Installation
Linux (recommended)
pipx install pagefuse
If you don't have pipx:
sudo apt install pipx && pipx ensurepath
macOS
pip install pagefuse
Windows
pip install pagefuse
Via Cargo
cargo install pagefuse
Requires Python 3.9+ on your PATH. The Python package is installed automatically.
LibreOffice (optional)
Required only for Office and OpenDocument formats (.docx, .pptx, .odt, etc.). PDF, image, Markdown, and HTML input/output work without it.
# Ubuntu / Debian
sudo apt install libreoffice
# macOS
brew install --cask libreoffice
# Windows — download from https://www.libreoffice.org/download
# then add soffice.exe to your PATH
Uninstall
pipx uninstall pagefuse # if installed via pipx
pip uninstall pagefuse # if installed via pip
Quick Start
Combine a cover page and a report into one PDF:
pagefuse assemble output.pdf cover.pdf:1 report.pdf:all
Include specific pages from multiple formats:
pagefuse assemble board_pack.pdf \
cover.pdf:1 \
financials.docx:all \
slides.pptx:2-5
Split a report into separate files:
pagefuse split report.pdf cover.pdf:1 body.pdf:2-10 appendix.docx:11-20
Check your version:
pagefuse --version
Global Options
These options apply to all subcommands and must be placed before the subcommand name.
pagefuse [OPTIONS] COMMAND [ARGS]...
| Option | Default | Description |
|---|---|---|
--lo-timeout SECS | 300 | LibreOffice conversion timeout in seconds. Increase for large or complex files — there is no hard limit. |
--version | — | Print version and exit. |
Example
pagefuse --lo-timeout 600 assemble output.docx big_report.pdf:all
assemble
Combine pages from multiple documents into one output. Pass a .fuse config file, or specify everything inline.
pagefuse assemble OUTPUT SOURCE [SOURCE ...]
pagefuse assemble CONFIG.fuse
| Option | Description |
|---|---|
--dry-run | Preview the assembly plan — shows input files, page selection, and resource estimates without writing any output. |
Inline usage
Output file first, then sources. Each source is file:pages — omit :pages to include all pages.
# PDF output
pagefuse assemble output.pdf cover.pdf:1 terms.docx:all pricing.pdf:1-3
# Word output
pagefuse assemble output.docx cover.pdf:1 report.pdf:all
# Self-contained HTML
pagefuse assemble output.html report.pdf:1-5
# Images — single page → file, multi-page → output.png.zip
pagefuse assemble output.png slides.pdf:1-3
# Preview without writing files
pagefuse assemble --dry-run output.pdf cover.pdf:1 report.docx:all
Config file usage
pagefuse assemble board_pack.fuse
pagefuse assemble --dry-run board_pack.fuse
See Config Format for the full .fuse syntax.
split
Extract pages from one document into multiple output files. Each output can be a different format. Pass a .fuse config file, or specify everything inline.
pagefuse split SOURCE OUTPUT [OUTPUT ...]
pagefuse split CONFIG.fuse
| Option | Description |
|---|---|
--dry-run | Preview what pages would be written to each output file without writing anything. |
Inline usage
Source file first, then outputs with page specs.
pagefuse split report.pdf cover.pdf:1 body.pdf:2-10 appendix.docx:11-20
# Each output can be a different format
pagefuse split report.pdf summary.pdf:1 full.docx:all preview.png:1
# Preview without writing files
pagefuse split --dry-run report.pdf cover.pdf:1 body.pdf:2-10
Config file usage
pagefuse split split.fuse
Example split.fuse:
source: annual_report.pdf
# Metadata (optional — defaults to source file metadata)
title: Annual Report
author: Finance Team
output: cover.pdf 1
output: executive_summary.pdf 2-5
output: financials.pdf 6-20
output: appendix.docx 21-30
output: cover_preview.png 1
Restrictions
Images (.png, .jpg, etc.) cannot be used as split sources. Run pagefuse info <file> to check what a file supports.
Format compatibility rules also apply to outputs — see Supported Formats.
info
Show page count, metadata, and format support for one or more files. Uses fast native reading — no LibreOffice required.
pagefuse info FILE [FILE ...]
Examples
pagefuse info report.pdf
pagefuse info report.pdf slides.pptx photo.png
Output
For each file, shows a file info table followed by a Format Support table listing which commands accept it as input and what output formats are available:
File slides.pptx
Format PPTX
Pages 12
Format Support
┌──────────┬───────────────┬─────────────────────────────────────┐
│ Command │ Input support │ Output support │
├──────────┼───────────────┼─────────────────────────────────────┤
│ assemble │ yes │ .html .jpg .jpeg .odp .pdf ... │
│ split │ yes │ .html .jpg .jpeg .odp .pdf ... │
└──────────┴───────────────┴─────────────────────────────────────┘
init
Generate a starter .fuse config file.
pagefuse init [OPTIONS]
| Option | Description |
|---|---|
--split | Generate a split config (with source: and output: lines) instead of the default assemble config. |
--output FILE | Output filename. Default: config.fuse. |
Examples
pagefuse init # assemble config → config.fuse
pagefuse init --split # split config → config.fuse
pagefuse init --output board_pack.fuse # custom filename
pagefuse init --split --output split.fuse # split config with custom name
activate / deactivate
Manage your PageFuse license on this machine.
pagefuse activate KEY
pagefuse deactivate
activate
Activate PageFuse with a license key. Each key allows up to 3 simultaneous machine activations. The license is lifetime — pay once, use forever, with 1 year of updates included. On success, the license is stored locally and re-validated automatically every 7 days.
pagefuse activate PF-XXXX-XXXX-XXXX-XXXX
deactivate
Remove the license from this machine, freeing up an activation slot so you can use it elsewhere.
pagefuse deactivate
Trial period
Without a license, PageFuse runs in trial mode for 30 days from first use — full access, no restrictions.
| Detail | Value |
|---|---|
| Trial length | 30 days from first run |
| License type | Lifetime — pay once, use forever |
| Activations per key | 3 machines |
| Updates included | 1 year from purchase |
| Re-validation interval | Every 7 days (online) |
| Offline use | Allowed; requires online check every 7 days |
Config Format (.fuse)
A plain-text config file for repeatable builds. Comments start with #. Pass the file directly to assemble or split.
Assemble config
# Output format is determined by the file extension.
# Add multiple output: lines to export to several formats in one run.
output: board_pack.pdf
output: board_pack.docx
# Metadata (all optional — title defaults to output filename)
title: Q4 Board Pack
author: Finance Team
subject: Board meeting materials
# Files are assembled in order. Same file may appear multiple times.
from: cover.pdf 1
from: reports/financials.docx all
from: slides/deck.pptx 1-4
from: reports/charts.pdf 3,5,7
Split config
source: annual_report.pdf
# Metadata (optional — defaults to source file metadata)
title: Annual Report
author: Finance Team
output: cover.pdf 1
output: executive_summary.pdf 2-5
output: financials.pdf 6-20
output: appendix.docx 21-30
Key rules
| Directive | Used in | Description |
|---|---|---|
output: | both | Output file path. Extension sets format. Multiple allowed in assemble. |
from: | assemble | Input file with optional page spec. Processed in order. |
source: | split | Single input file to split from. Exactly one required. |
title: | both | PDF metadata title. |
author: | both | PDF metadata author. |
subject: | both | PDF metadata subject. |
Page Spec Syntax
Page numbers are 1-based. Omitting the page spec defaults to all.
| Spec | Meaning | Example |
|---|---|---|
all | Every page | report.pdf:all |
5 | Page 5 only | report.pdf:5 |
1-3 | Pages 1 through 3 (inclusive) | report.pdf:1-3 |
1,3,5 | Pages 1, 3, and 5 | report.pdf:1,3,5 |
1-3,5,7-9 | Mixed ranges and singles | report.pdf:1-3,5,7-9 |
Supported Formats
Input
| Format | Extensions | LibreOffice | Split source |
|---|---|---|---|
.pdf | No | Yes | |
| Images | .png .jpg .jpeg .tiff .tif | No | No |
| Markdown | .md .markdown | No | Yes |
| Word | .docx .doc | Yes | Yes |
| PowerPoint | .pptx .ppt | Yes | Yes |
| OpenDocument | .odt .odp | Yes | Yes |
| Web / HTML | .html | Yes | Yes |
Output
| Format | Extension | LibreOffice | Notes |
|---|---|---|---|
.pdf | No | Default — fast, lossless | |
| HTML | .html | No | Self-contained; pages embedded as base64 images |
| Word | .docx | Yes | Not from presentation sources (.pptx, .ppt, .odp) |
| OpenDoc Text | .odt | Yes | Not from presentation sources |
| OpenDoc Pres | .odp | Yes | Not from word-processor sources (.docx, .doc, .odt) |
| Image | .png .jpg .tiff | No | Single page → file; multi-page → .ext.zip |
Format compatibility
Two restrictions apply when the source document type is known:
| Source type | Cannot output to |
|---|---|
| Presentation (.pptx, .ppt, .odp) | .docx, .odt |
| Word-processor (.docx, .doc, .odt) | .odp |
Run pagefuse info <file> to see exactly what is supported for any given file.
Error Messages
PageFuse validates all inputs before starting work and reports all errors at once.
File not found
Error: Error(s):
File not found: 'missing.pdf'
File not found: 'also_missing.docx'
Invalid page range
Error: Page specification errors:
range '2-50' is invalid in 'report.pdf' (12 pages total)
page 15 does not exist in 'cover.pdf' (3 pages total)
Unsupported format
Error: Error(s):
Unsupported input format '.xyz' for 'file.xyz'
Format incompatibility
Error: Error(s):
Presentation source 'deck.pptx' cannot produce word-processor output '.docx'
Run: pagefuse info deck.pptx
LibreOffice not installed
Error: LibreOffice is not installed or not on PATH.
Install with: sudo apt install libreoffice
Password-protected PDF
Error: 'secure.pdf' is password-protected. PageFuse cannot open encrypted PDFs.
Bug Reports & Feature Requests
Issues and feature requests are tracked publicly on GitHub. Search existing issues before opening a new one — someone may have already reported the same thing.
| Type | Where |
|---|---|
| Bug report | Open a bug report → |
| Feature request | Open a feature request → |
| License / billing | Contact support |