miniChord is an early PyQt6 prototype for a page-oriented WYSIWYG ChordPro editor and worship songbook layout tool.
- A main window with File actions
- A visible A4 page editing surface
- Basic text editing through Qt
- Page margins in the editor surface
- Named margin presets for normal, narrow, moderate, wide, and mirrored layouts
- Mirror margins, gutter margin, and header/footer spacing geometry
- Page-based document/page model abstraction for future layout engine work
- A4, Letter, Legal, portrait/landscape, and custom page geometry support
- Dynamic page and writable-frame resizing when layout or zoom changes
- View menu and toolbar zoom controls for zoom in/out, actual size, fit page, and fit width
- Physical page background, border, and shadow rendering
- Multi-page vertical view with continuous scrolling and mixed orientations
- Single-page and two-page view modes for scanning multiple pages side by side
- Loaded source text is split across physical pages instead of scrolling inside an individual page
- Printer safe-area geometry with non-printable margin visualization
- Page-geometry-derived row capacity for orientation-aware pagination
- Internal semantic document DOM with song and paragraph blocks
- Save/load support for the initial text-based
.mchordformat - PDF export through Qt printing
- System/light/dark application theme selection
- Preferences dialog with live manual language selection
- Crash-safe autosave drafts for modified documents
- Automatic backup snapshots before overwriting saved documents
- Document recovery discovery for autosaved drafts
- Songbook recovery discovery for
.mchordbookautosave drafts - Startup crash recovery dialog for autosaved document drafts
- Document version snapshots for restorable
.mchordhistory - Songbook version snapshots for restorable
.mchordbookhistory - Snapshot restore helpers for
.mchordand.mchordbookfiles - Plain-Python ChordPro parser foundation for metadata, directives, inline chords, and traditional chord-over-lyrics text
- Monospaced chord-over-lyrics renderer with basic chord collision avoidance
- Chord-aware renderer wrapping for narrow columns and future pagination
- Structured ChordPro render rows for future page, column, and paint layout
- Semantic song sections for explicit verse, chorus, and bridge markers
- Lyric syllable ranges with chord attachment for future music-aware layout
- Row-based pagination that flows render rows through one or more columns while keeping chord/lyric segments together
- Manual page and column break directives in the structured layout engine
- Qt Linguist translation loading with initial English and Spanish catalogs
miniChord is currently an early source-run prototype. Packaged installers are not available yet, so install the platform dependencies, clone the repository, and run the application from the checkout.
Clone the project on every platform:
git clone https://github.com/wachin/minichord.git
cd minichord
git submodule update --init --recursiveThe submodule step prepares bundled dictionary resources for future Windows and macOS spellcheck support.
Primary development target:
- MX Linux 23 / Debian 12
- Python 3.11
- PyQt6
Install the known development packages:
sudo apt install \
python3-pytest \
python3-pytest-qt \
python3-pyqt6 \
qt6-translations-l10n \
python3-pyqt6.qtsvg \
python3-docx \
pyqt6-dev-tools \
qt6-l10n-tools \
ripgrep \
fd-find \
python3-devDependency reference files:
If development needs another Debian package, pause and install it with the system package manager before continuing.
Run miniChord from the repository root:
python3 -m minichordRun the test suite:
pytest -qInstall Python 3.11 or newer and Git, then create a virtual environment from the repository root:
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install PyQt6 pytest
python -m pip install -e .Run miniChord:
python -m minichordRun the test suite:
pytest -qInstall Python 3.11 or newer and Git, then create a virtual environment from the repository root:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install PyQt6 pytest
python -m pip install -e .Run miniChord:
python -m minichordRun the test suite:
pytest -qpython3 -m minichordpytest -qminiChord keeps Qt Linguist source and compiled translation files under
translations/. Runtime startup loads minichord_<locale>.qm with
QTranslator, detects the default locale with QLocale, and also loads Qt's
native dialog translations from the Qt translations directory when available.
On Debian/MX Linux, native Qt dialog translations come from
qt6-translations-l10n.
Update translation source files after changing user-visible strings:
pylupdate6 minichord/ --ts translations/minichord_es.ts
pylupdate6 minichord/ --ts translations/minichord_en.tsEdit translations with Qt Linguist, then compile .qm files:
linguist-qt6 translations/minichord_es.ts
lrelease translations/minichord_es.ts -qm translations/minichord_es.qm
lrelease translations/minichord_en.ts -qm translations/minichord_en.qm