Skip to content

Paper Forge Download [Release]

Latest

Choose a tag to compare

@matheuslaidler matheuslaidler released this 10 May 20:14
· 2 commits to main since this release

PaperForge — How to use

One desktop app to turn Markdown into publication-ready PDFs, PowerPoint
decks and scientific charts. No LaTeX, no Pandoc, no installation.

This folder ships two self-contained binaries:

  • paperforge.exe — Windows x64 (~89 MB)
  • paperforge-linux-x64 — Linux x64 (~116 MB)

Both bundle Python, Qt 6 and matplotlib. The only external requirement is a
Chromium-family browser (Edge, Chrome, Chromium or Brave) somewhere on the
machine — used to render the PDF.


Run it

Linux

chmod +x paperforge-linux-x64
./paperforge-linux-x64

Windows

  1. Double-click paperforge.exe. The first launch may take a couple of
    seconds while Windows unpacks the bundle.
  2. The PaperForge window opens with the Chart tab pre-loaded with a
    working example so you can see it work immediately.

image

The 3 tabs at a glance

When you open the app you see three tabs at the top: PDF, PowerPoint,
Chart.

1. PDF tab — Markdown → A4 report

Drag a .md file onto the Source Markdown field (or click Browse…).
Pick a style and click Build PDF:

  • default — academic blue accent, ABNT-style references hanging indent.
  • minimal — Georgia serif, no colors, plain printable.
  • academic — strict ABNT (Times New Roman 12pt, 1.5 line height).

LaTeX formulas ($E = mc^2$ or $$\sum x_i$$) are rendered via MathJax.

The references section is detected automatically when its heading matches
References, Bibliography or Referências bibliográficas.

2. PowerPoint tab — Markdown → .pptx

Each slide is one block in your Markdown:

---
title: My Talk
subtitle: A short subtitle
author: First Last
event: Conference 2026
---

## Slide 1 — Introduction

- First bullet
- **Bold bullet 2**

## Slide 2 — Data

| Metric | Before | After |
|--------|--------|-------|
| Yield  | 60.3   | 69.3  |

The optional YAML frontmatter (title, subtitle, author, event)
drives the auto-generated cover slide. Add --no-cover flavours via the
Generate cover slide checkbox.

Including charts in slides

Generate a chart in the Chart tab → click Save figure… to export PNG
→ reference it in your slide:

## Slide 5 — Results

- The treated group shows +14.9% yield
- ROS levels decreased 2.6× compared to control

![biomass vs ethanol](biomassa_etanol_log.png)

The image lands in the right column of that slide; bullets/text stay on
the left. Only one image per slide is rendered (the first one found).

Pick a theme: default, dark, minimal, or nature. Aspect ratio
16:9 (default) or 4:3.

3. Chart tab — five scientific templates

Open the tab and the canvas is already populated. Pick a template from
the Template combo and the example data switches automatically:

Template Example shipped
line Two simple kinetic curves
bar Ethanol yield with vs without antioxidant (4 conditions × 2 series)
log-scale Yeast biomass × ethanol fermentation (6 series + 3 Ghose-Tyagi envelopes + industrial VHG band + inhibition vline)
scatter Dose–response correlation with two replicates
dose-response Ethanol-tolerance curves across four yeast strains

The left side has 4 sections (top to bottom): Template & metadata,
Data, Annotations (log-scale only), Style. The right side is
a live matplotlib preview that updates 150 ms after each edit.

Click Save figure… to write the chart. If you tick PNG + SVG + PDF
under Style, all three formats are written in a single click.

Editing data

The Data section shows a list of series on the left (with their colour
swatches) and an editable XY table on the right. Click a row in the list
to edit that series.

  • + Series — add an empty series with the next palette color.
  • Import CSV… — load tabular data, choose X / Y / series columns.
  • Duplicate — clone the highlighted series (great for "before / after"
    variants).

The colour swatch button opens a system colour picker. Markers
(o, s, ^, v, D, …) and line styles (-, --, :) live next
to the label field.

Annotations (log-scale only)

Three editable tables for:

  • Vertical lines(x, label, color, linestyle, alpha).
  • Bands(x_start, x_end, label, color, alpha) (used by the
    industrial VHG zone in the bundled fermentation example).
  • Theoretical envelopes — Python expressions evaluated in a sandbox
    with NumPy and x available. Examples:
    • 10 * (1 - x / 90) ** 1 (Levenspiel-style ethanol inhibition)
    • np.exp(-x / 40) (exponential decay)
    • 5 + 0.1 * x (linear)

If a formula raises (zero division, syntax error) the envelope is
silently skipped — the rest of the chart still renders.

Building a publication-grade chart in 30 seconds

  1. Open paperforge.exe (or ./paperforge-linux-x64).
  2. Switch to the Chart tab.
  3. Pick log-scale in the Template combo. Done — the canvas now
    shows a complete biomass × ethanol fermentation study with 6 series,
    3 theoretical envelopes, the inhibition vline at x=50 and the
    industrial VHG band at 60–75.
  4. Click Save figure… → name the output → done.

Press Load example any time to revert to the canonical example for
the current template after experimenting.


image

Markdown cheatsheets

For PDF (paperforge pdf)

  • Tables: GitHub-flavoured (|---|---|).
  • Fenced code: triple backticks with language hint.
  • Math: $inline$ and $$display$$ (MathJax).
  • Blockquotes: > ... (rendered with green left border).
  • Bibliography section: heading containing "References" or "Referências
    bibliográficas". The paragraphs that follow get hanging indent.

For PowerPoint (paperforge slides)

  • Slide separator: ## Slide N — Title here (or ## Slide N: Title).
  • Cover via frontmatter: title:, subtitle:, author:, event:.
  • Bullets: - or *.
  • Tables: GitHub-flavoured.
  • Code blocks: triple backticks (rendered in Consolas).
  • One image per slide via ![alt](path.png).

Where settings live

~/.paperforge/config.yaml (created on first launch):

lang: en                  # en | pt_br
default_pdf_style: default
default_slide_theme: default
browser: ""               # empty = auto-detect
references_style: abnt
mathjax_engine: cdn       # cdn | katex-local
mathjax_timeout: 8

Toggle the language at the bottom-right of the main window. The change
persists across sessions.


CLI mode (advanced)

The same binary works as a CLI. Pass any subcommand and the GUI is
bypassed:

paperforge.exe pdf paper.md
paperforge.exe slides talk.md
paperforge.exe chart                  # interactive Rich wizard
paperforge.exe config --set lang=pt_br
paperforge.exe --help

Author / License

Built by Matheus Laidler
github.com/matheuslaidler.
Released under the MIT License.

For source code, full documentation and bug reports, visit
github.com/matheuslaidler/paperforge.


PaperForge — Changelog

v0.2.0 — 2026-05-10

First public release. PaperForge is a single-binary desktop app that turns
Markdown into PDFs, PowerPoint decks and scientific charts.

Highlights

  • Native PySide6 GUI with three tabs (PDF / PowerPoint / Chart).
  • Dual mode: double-click → GUI; paperforge SUBCOMMAND → CLI.
  • Chart wizard with five scientific templates (line, bar, log-scale,
    scatter, dose-response). Live matplotlib preview, editable data table,
    CSV import.
  • Annotations panel for the log-scale template — vertical lines,
    shaded bands and theoretical envelopes evaluated in a NumPy sandbox.
  • Pre-loaded examples in every template — the Chart tab works the
    moment you open it. The log-scale template ships the published
    yeast biomass × ethanol fermentation study (6 series + 3 Ghose-Tyagi envelopes
    • industrial VHG band + inhibition vline).
  • Custom application icon with proper Windows taskbar registration
    (AppUserModelID).
  • Bilingual UI: English (default) and Brazilian Portuguese, switchable
    from the status bar.
  • Persistent settings in ~/.paperforge/config.yaml.

Binaries shipped in this release

File Platform Size SHA-256
paperforge.exe Windows x64 88.16 MB (92,443,241 bytes) 989da6cf3466a8e16cf8c5b2fbeefdac3886a7f2f463d86260b70883594e2b30
paperforge-linux-x64 Linux x64 (glibc) 115.69 MB (121,307,056 bytes) 644ff3049380cb4264cc57f201e9348c4abfc6ec41645ca9ce8a25642b3e7ede

Verify on the command line:

# Windows (PowerShell)
Get-FileHash paperforge.exe -Algorithm SHA256

# Linux
sha256sum paperforge-linux-x64

Build environment

  • Python 3.11+ at build time (3.13 used for the shipped Linux binary).
  • PySide6 6.6+, matplotlib 3.8+, python-pptx 0.6.23+, markdown 3.6+.
  • PyInstaller 6.6+ with surgical collect_data_files for PySide6
    (cuts ~150 MB of unused Qt modules).

Release workflow

The Linux + Windows binaries that ship in this folder are built manually
on the maintainer's machine (Linux via WSL2 Kali). The repository keeps a
ci.yml workflow that runs ruff + pytest on every push/PR, but no
automated PyInstaller release pipeline — for a one-developer project it
proved easier to upload binaries by hand than to maintain a PySide6 + Qt
plugin matrix on GitHub-hosted runners.

Tested platforms

  • Windows 11 Pro 24H2 (build 26100) — Microsoft Edge for PDF rendering.
  • Kali Linux on WSL2 (kernel 5.15+, x86_64) — PyInstaller bootloader 6.20.

Runtime requirements

  • Any Chromium-family browser installed: Microsoft Edge, Google Chrome,
    Chromium, or Brave. The PDF tab calls one of them in headless mode.
  • For Linux, the bundled Qt 6 libraries depend on libxcb-cursor0,
    libegl1 and libxkbcommon0 — usually pre-installed on Ubuntu /
    Debian / Fedora desktops. If the binary fails to start with a "could
    not find Qt platform plugin 'xcb'" message, install:
    sudo apt-get install libxcb-cursor0 libegl1 libxkbcommon0