A desktop invoice generator focused on speed, repeatability, and clean PDF output for solo professionals and small service businesses.
✅ Status: v1.0 is now generated successfully.
- Windows (latest): Download Windows build
- macOS (latest): Download macOS build
- Linux (latest): Download Linux build
- All release assets: Latest release page
- CI runs/artifacts: GitHub Actions
Tip: Use Latest release links for stable downloads. Use Actions artifacts for testing/preview builds.
Invoice_gen is designed for people who need to create professional invoices quickly without maintaining complicated accounting software.
It emphasizes:
- reusable profile data,
- fast invoice form entry,
- practical date controls,
- and a straightforward output/history workflow.
- Provider, recipient, and payment profiles stored locally.
- Add, edit, delete, and set defaults for common selections.
- Form-level “Set default” actions for repeat invoice fields.
- Relative and absolute invoice date modes.
- Relative picker includes quick offsets from -7 to +7.
- Relative display style is semantic + explicit date (example:
yesterday (2026-02-22)). - Absolute mode displays a fixed
YYYY-MM-DDdate.
- Calendar picker plus explicit HH:MM selection.
- Quick “Use selected” flow for clean date confirmation.
- Clean invoice layout with sender/recipient, metadata, line items, totals, and payment details.
- Non-billed preparation line is automatically omitted if extra/prep hours are
0. - Files are saved under recipient/year folders for organization.
- Recent invoices shown as actionable cards.
- Card actions: Open, Delete file, Remove from list.
- Refresh resyncs against filesystem changes.
- History is constrained to:
- last 14 days, and
- maximum 15 entries displayed.
- Dark-friendly input styling.
- Clear tooltips throughout primary form and profile dialogs.
- Optional auto-open PDF after generation.
- Optional donation panel with QR and website link.
app.py— main desktop UI and workflow orchestration.pdf_generator.py— invoice PDF layout and render logic.storage.py— local data read/write for profiles/history/defaults.invoice_generator_template.py— invoice templating support file.data/seed_profiles.jsonl— versioned seed profile examples.%APPDATA%/Invoice_gen/*(Windows) or platform-equivalent app-data dir — user-local runtime data (profiles/history/defaults).invoices/— generated PDF output tree.
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python app.pyDependencies include customtkinter, reportlab, Pillow, and tkcalendar.
data/seed_profiles.jsonl
Stored in the per-user app data folder (not the EXE temp extraction path):
profiles.local.jsonlhistory.local.jsonldefaults.local.json
~/Documents/Invoice_gen/invoices/<recipient>/<year>/<invoice-number>.pdf
This software is free to use.
If it helps you, optional support is welcome:
- place
QR.pngin one of these locations (first match wins):- user app-data folder (
.../Invoice_gen/QR.png) - next to the executable
- bundled in the EXE via PyInstaller
--add-data
- user app-data folder (
- use the in-app website link (
https://moorearcanum.com/).
This repository uses a custom license (see LICENSE).
In plain language:
- You may use, copy, and modify this software for free.
- Donations are optional.
- If you want to sell this software, bundle it into paid software/services, or use it in a commercial paid offering, you must obtain prior written permission and agree royalty terms with the author.
For exact terms, read the full license text.
pip install pyinstaller
pyinstaller --name InvoiceApp --onefile --windowed \
--splash "Loading.png" \
--add-data "data/seed_profiles.jsonl;data" \
--add-data "QR.png;." \
app.pypip install pyinstaller
pyinstaller --name InvoiceApp --windowed \
--add-data "data/seed_profiles.jsonl:data" \
--add-data "QR.png:." \
app.pyNote: PyInstaller splash support is primarily used for onefile startup UX on Windows.
Outputs appear under dist/. For reproducible builds, use InvoiceApp.spec.
- Open the app.
- Add at least one Provider profile.
- Add at least one Recipient profile.
- Add at least one Payment profile (Domestic/International/PayPal).
- Select Provider, Recipient, and Payment profile.
- Fill service details (category/title/hours/rate).
- Choose session date/time.
- Choose invoice date mode:
- Relative (today ± offset), or
- Absolute (fixed date).
- Click Generate Invoice PDF.
- PDFs are saved under:
~/Documents/Invoice_gen/invoices/<recipient>/<year>/...
- Use Open to view PDF.
- Use Delete file to delete disk file + remove from list.
- Use Remove from list to keep disk file but remove history entry.
- Use Refresh to resync with filesystem.
- “Set default” buttons save your preferred values.
- Profiles/history/defaults persist in platform app-data (not temp extraction folders).
QR.png is resolved in this order:
- user app-data folder
- next to executable
- bundled asset
- project root (source mode)