Under the Hood

The Josquin Research Project combines three components:

  1. The website
  2. Digital score files and generated assets stored in Cloudflare R2
  3. A separate musical search service

Together these components provide public access to encoded musical scores, metadata, and derived analytical resources.


The Website

Source files for the client-side of the website can be viewed on GitHub. The website uses GitHub Pages and Jekyll, a static website generator. The following JavaScript libraries are used on the website:

  • Select2, a jQuery plugin. Form controls can now be styled in modern browsers, but cross-browser behavior is still inconsistent for some native elements, so the project uses Select2 for consistent dropdown UI and behavior.
  • ezMark, a jQuery plugin used to style check boxes and radio buttons.
  • qTip, a jQuery plugin used to manage tooltips.
  • Handlebars, which is used for content templating, such as for creating the Statistics section on the Repertoire page and other dynamic tables across the site.
  • D3, used to visualize analysis data, such as on the Ribbon plot page.

Digital Scores and Cloudflare R2

The authoritative musical sources are Humdrum files maintained in the JRP scores repository. A shared set of local tools, used by both the Josquin Research Project and The 1520s Project, generates the files used for display, playback, downloads, and analysis.

The generated assets include:

  • PDF scores, with and without editorial accidentals
  • MEI and MusicXML scores
  • MIDI and MP3 audio, with timemaps for synchronized playback
  • Score incipits, vocal-range plots, and activity plots

These files, together with published copies of the Humdrum sources, are stored in Cloudflare R2 and served through assets.1520s-project.org. The two projects share storage, with separate paths for their assets. The hostname serves individual files; it is not a browsable directory.

When a score or relevant publication metadata changes, the local build workflow generates its assets, validates them, and uploads them to R2. Successfully published files are recorded so unchanged scores can be skipped on subsequent runs. Visitors retrieve prepared files directly, rather than requesting conversions from the Humdrum data. Existing JRP PDFs are retained until a replacement is published.


Musical Search

Pitch, interval, and rhythm searches are handled by a separate service running on Google Cloud Run. The website sends search requests to this service and displays the results. Cloudflare Turnstile provides a human check before submission to help limit automated abuse.


File Naming and Example Data Object

Each musical work uses a structured identifier, consisting of a three-letter composer code, a four-digit work number, and an optional section letter, which typically corresponds to the movements of multi-section works (e.g., a for the Kyrie in the mass ordinary).

Example incipit file:

https://assets.1520s-project.org/jrp/score-assets/Agr1001a-incipit.svg

Filename interpretation:

  • Agr — composer Alexander Agricola
  • 1001 — work number
  • a — first section of the work

Master Metadata Index

Metadata is maintained in a master spreadsheet.

This spreadsheet catalogues information such as composers, work titles, manuscript sources, catalogue numbers, work scoring, and editorial metadata. The update workflow downloads its tabs directly as CSV and converts them into JSON data used by the website.

The update workflow retrieves this data and saves local JSON snapshots with the website. These snapshots power metadata search, composer browsing, work listings, and catalog navigation, while the spreadsheet remains the authoritative metadata source.