Skip to main content

Generate HTML catalogs from music notation files with git-based version tracking

Project description

GenList Butler

Tests PyPI version Python versions

A command-line tool for generating HTML music archives from ChordPro files, PDFs, and other music notation files. Originally created for the Tuesday Ukulele Group, this tool scans a directory tree of music files and generates a searchable, filterable HTML catalog.

Features

  • 📁 Smart File Discovery: Automatically finds ChordPro (.chopro, .cho), PDF, MuseScore, and other music files
  • 🔍 Version Control Integration: Uses git timestamps to identify the newest version of duplicate files
  • 🎯 Filtering Options: Hide older versions, mark easy songs, exclude specific files
  • 📄 PDF Generation: Optional automatic PDF generation from ChordPro files
  • 🌐 Interactive HTML: Generates searchable, filterable HTML catalogs with modern UI
  • 🧠 Metadata-Aware Search: Parses {title:}, {subtitle:}, {keywords:} (and optional lyrics) so the catalog can be filtered beyond filenames
  • 🎨 Beautiful Styling: Includes Tuesday Ukes' professional HTML template - no configuration needed!
  • Fast: Optimized git operations for quick catalog generation

Requirements

  • Python 3.9 or later
  • Git (for version tracking features)

Installation

Install using pipx (recommended):

pipx install genlist-butler

Or using pip:

pip install genlist-butler

Usage

Basic usage:

genlist <music_folder> <output_file>

Examples

Generate a catalog with default settings (newest versions only):

genlist ./music index.html

Show all file versions:

genlist ./music index.html --filter none

Hide only files marked with .hide extension:

genlist ./music index.html --filter hidden

Generate PDFs from ChordPro files before cataloging:

genlist ./music index.html --genPDF

Options

  • musicFolder - Path to the directory containing music files
  • outputFile - Path where the HTML catalog will be written
  • --filter [none|hidden|timestamp] - Filtering method (default: timestamp)
    • none: Show all files
    • hidden: Hide files with .hide extension
    • timestamp: Show only newest versions based on git history
  • --intro / --no-intro - Include/exclude introduction section (default: include)
  • --genPDF / --no-genPDF - Generate PDFs from ChordPro files (default: no)
  • --forcePDF / --no-forcePDF - Regenerate all PDFs even if they exist (default: no)
  • --html / --no-html - Include/exclude .html files in the catalog (default: include)

Supported File Extensions

GenList Butler scans for these file types:

  • .chopro, .cho (ChordPro)
  • .pdf
  • .mscz (MuseScore)
  • .mp3, .m4a (audio)
  • .urltxt (two-line link files: label on line 1, URL on line 2)
  • .html (optional, controlled by --html)

Marker files (not listed as downloads):

  • .easy (marks a song as easy)
  • .hide (hides other files with the same base name)

About optional .html behavior: .html files are included by default when scanning, and appear as regular links in the downloads column. Use --no-html if you want to exclude existing HTML files (for example, old catalogs or web pages) from the list.

File Markers

GenList Butler uses special marker files:

  • .hide files: Create a file with .hide extension (e.g., song.hide) to hide all files with the same base name from the catalog
  • .easy files: Create a file with .easy extension (e.g., song.easy) to mark all files with the same base name as "easy songs" for filtering

Search Metadata & Lyrics

The search bar now understands more than filenames:

  • {title: ...} / {t: ...} and {subtitle: ...} / {st: ...} directives are indexed automatically.
  • {keywords: folk; jam; singalong} directives (or # keywords: inline comments) let you define search tags without changing filenames.
  • Full lyric text from .chopro files is indexed as well, and users can disable lyric-matching with the Include lyric search checkbox if they want faster filtering.

Add metadata directly in your ChordPro charts:

{title: Wagon Wheel}
{subtitle: Old Crow Medicine Show}
{keywords: campfire; beginner; singalong}

[G]Heading down south to the [D]land of the pines...

Those keywords/subtitles become instantly searchable in the generated HTML.

Custom HTML Styling

GenList-Butler includes a beautiful, professional HTML template out of the box (Tuesday Ukes' styling). However, you can customize it:

  1. Create your own HTMLheader.txt file in your working directory
  2. Run genlist from that directory
  3. Your custom header will be used instead of the default

The generated HTML will use your custom styling while maintaining all the interactive search/filter functionality.

Requirements

  • Python 3.9+
  • Git (for timestamp-based filtering)
  • ChordPro (optional, for PDF generation)

How It Works

  1. Scans the music folder recursively for supported file types
  2. Groups files by song title (normalized, ignoring articles)
  3. Filters based on the selected method:
    • Uses git history to find the newest version of each file
    • Respects .hide marker files
    • Processes .easy marker files for special highlighting
  4. Generates an interactive HTML page with:
    • Searchable song list
    • Download links for all file formats
    • Optional filtering for easy songs
    • Toggle for showing all versions

Development

To contribute or modify:

# Clone the repository
git clone https://github.com/TuesdayUkes/genlist-butler.git
cd genlist-butler

# Install in development mode
pip install -e ".[dev]"

# Run tests
pytest

License

MIT License - see LICENSE file for details

Credits

Created for the Tuesday Ukulele Group (https://tuesdayukes.org/)

Maintained by the TUG community.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

genlist_butler-1.4.0.tar.gz (25.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

genlist_butler-1.4.0-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file genlist_butler-1.4.0.tar.gz.

File metadata

  • Download URL: genlist_butler-1.4.0.tar.gz
  • Upload date:
  • Size: 25.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for genlist_butler-1.4.0.tar.gz
Algorithm Hash digest
SHA256 fcf85e3f7ce5c638d696d5bc946b4f19fc1422ffb9efd765f907829cbf46843c
MD5 98e45082502c96e51fd444b4c4a519f1
BLAKE2b-256 d3f85f04982ef65da570630fc73d83fe5e227db6b988714768d05a8972daba4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for genlist_butler-1.4.0.tar.gz:

Publisher: release.yml on TuesdayUkes/genlist-butler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file genlist_butler-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: genlist_butler-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for genlist_butler-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8d763abd5fe4121367f2308e18d3a14792e16818135f793fb97626848352d925
MD5 e4e1444fd0620398e9dd0e63552c96e2
BLAKE2b-256 5641969ce3e52409967ec0b251500a4176a5d35aed12a2dd8eb36cc021bd4dca

See more details on using hashes here.

Provenance

The following attestation bundles were made for genlist_butler-1.4.0-py3-none-any.whl:

Publisher: release.yml on TuesdayUkes/genlist-butler

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page