No description
  • C++ 93.2%
  • TypeScript 3.4%
  • CMake 1.5%
  • Shell 0.7%
  • CSS 0.5%
  • Other 0.5%
Find a file
NullFragment f357b80a83
All checks were successful
Notify Infra — Rebuild Public Sites / dispatch (push) Successful in 0s
Render Mermaid diagrams on the docs site
Workspace setup:
- pnpm-workspace.yaml at repo root listing docs-site +
  packages/*
- Top-level package.json holds pnpm config + workspace
  scripts
- .gitignore moves node_modules / pnpm-lock.yaml rules
  out of docs-site/ scope to cover the whole workspace

@nullified/mermaid-viewer (new package at packages/mermaid-viewer):
- Seeded from a curated upstream library, then optimized:
  - Native pointer-events pan/zoom replaces the
    svg-pan-zoom runtime dep (-38KB; supports wheel
    zoom, click-drag, two-finger pinch, keyboard
    pan/zoom)
  - Bootstrap uses per-target MutationObservers
    instead of a 500ms x 30 polling loop, so the viewer
    attaches the moment Mermaid drops in the SVG
  - Source capture from each container's textContent
    before the host renderer replaces it with SVG, so
    orientation-swap and fullscreen re-render have a
    source to work with regardless of whether the host
    sets data-mermaid-source
  - Inline JS styles moved to src/styles.css with
    package-owned --mermaid-viewer-* CSS custom
    properties for theming overrides; buttons declare
    `all: unset` + explicit inline-flex + line-height: 0
    so high-specificity host content rules can't push
    them off-baseline
  - Frame tokens split into dark defaults +
    prefers-color-scheme fallback + explicit
    [data-mermaid-viewer-theme="light"] override; the
    package owns its own attribute name so the CSS
    doesn't need to know about Starlight's data-theme,
    Tailwind's .dark, etc.
  - Theme observer propagates the resolved host theme
    onto each wrapper as data-mermaid-viewer-theme;
    fullscreen overlay picks up the same attribute at
    construction
  - Toolbar buttons get aria-label + focus-visible;
    fullscreen overlay traps Tab focus and closes on
    Esc
  - Compound .mermaid-viewer-overlay__content.mermaid-viewer
    selector overrides the standalone height cap in
    the fullscreen path (the box and the viewer are the
    same element there)
- New `wrapperClass` option on enhanceAll lets consumers
  add framework-specific opt-out classes to each wrapper
  without polluting the package with framework
  knowledge
- Vitest + jsdom test suite for the source-transformation
  utilities (38 tests across pastel-swap idempotency,
  orientation swaps, and theme-observer behaviour)
- Source-only consumption: package.json main points at
  src/index.ts, no tsup build, Vite compiles TS during
  the consumer build
- Fully framework-agnostic: no host-framework defaults
  bundled in; consumers override visuals via the CSS
  custom properties

docs-site integration:
- astro-mermaid registered first in integrations with
  pastel adaptive themeVariables so the existing
  architecture/overview diagrams render in our palette
- MermaidEnhanceHead.astro overrides Starlight's Head,
  loads the viewer stylesheet, and runs enhanceAll on
  every page with wrapperClass: "not-content" so
  Starlight's sibling-margin rules leave the toolbar
  layout alone
- docs-site/package.json adds astro-mermaid, mermaid,
  and the workspace dep on @nullified/mermaid-viewer

Build infra:
- scripts/preview-docs-site.sh now installs at the
  workspace root and runs `pnpm --filter
  guitar-prometheus-docs-site build`
- (Sibling change pending in
  fragmented-infra/public-sites/Dockerfile to mirror the
  new install layout)

Wishlist:
- Remove the "Mermaid rendering on the docs site" entry
  per the shipped-equals-remove policy; the
  implementation plan at
  documentation/agentic-context/implementation-plans/
  2026-05-29-mermaid-rendering.md is the permanent
  record

New Files:
- packages/mermaid-viewer/{src,tests}/* (full package)
- docs-site/src/components/MermaidEnhanceHead.astro
- pnpm-workspace.yaml, package.json
- documentation/agentic-context/implementation-plans/
  2026-05-29-mermaid-rendering.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 00:36:29 -07:00
.forgejo/workflows Dispatch fragmented-infra on docs-affecting pushes 2026-05-20 02:47:23 -07:00
docs-site Render Mermaid diagrams on the docs site 2026-05-29 00:36:29 -07:00
documentation Render Mermaid diagrams on the docs site 2026-05-29 00:36:29 -07:00
packages/mermaid-viewer Render Mermaid diagrams on the docs site 2026-05-29 00:36:29 -07:00
resources Parser refactor, humanizer, technique enrichment 2026-05-19 20:38:35 -07:00
scripts Render Mermaid diagrams on the docs site 2026-05-29 00:36:29 -07:00
src Drum profile editor: GM overrides + custom names 2026-05-21 23:55:05 -07:00
tests Drum profile editor: GM overrides + custom names 2026-05-21 23:55:05 -07:00
.clang-format Phase 4: profile subsystem 2026-04-23 02:31:41 -07:00
.gitignore Render Mermaid diagrams on the docs site 2026-05-29 00:36:29 -07:00
CMakeLists.txt Gate score viewer behind GP_ENABLE_SCORE_VIEWER 2026-05-21 23:47:43 -07:00
Doxyfile Unblock publish-docs CI: doxybook2 + GCC warnings 2026-05-20 00:53:54 -07:00
LICENSE Phase 15: UI polish + build warnings + per-profile prefs 2026-05-05 01:25:19 -07:00
package.json Render Mermaid diagrams on the docs site 2026-05-29 00:36:29 -07:00
pnpm-workspace.yaml Render Mermaid diagrams on the docs site 2026-05-29 00:36:29 -07:00
README.md Drop wiki pipeline; aim docs at Starlight 2026-05-20 02:40:53 -07:00

Guitar Prometheus

License: CC BY-NC-ND 4.0

Desktop application that imports Guitar Pro scores and converts them to MIDI files with keyswitches injected so VST instruments (Shreddage, Ample, Odin III, …) render guitar techniques — palm mute, let ring, hammer-on, slide, bend, vibrato, tap, pick scrape — realistically.

Guitar Pro's own MIDI export strips all technique data, producing a flat note-on / note-off stream. Guitar Prometheus recovers that data from the source and re-injects it as the keyswitch notes the VSTs expect.

Input formats:

  • MusicXML (.musicxml, .xml) — Guitar Pro 8 exports
  • Guitar Pro 7 / 8 native (.gp) — ZIP-wrapped GPIF XML, parsed directly
  • Guitar Pro 6 native (.gpx) — BCFZ-compressed BCFS sector filesystem, decoded directly

Status

Pre-alpha. Phases 124 are complete (parsers, profile editor, technique injection, humanizer, cross-platform release tooling, test infrastructure refresh, AutoSlide / BendCurve / inferred-octave technique enrichment, .gpproj round-trip across all source formats, XML depth guard, and JUCE 8.0.13). See documentation/agentic-context/implementation-plans/ for the per-phase plans.

Tech Stack

  • C++17 with CMake (≥ 3.22)
  • JUCE 8.0.13 for cross-platform GUI + audio plumbing
  • pugixml for XML parsing
  • nlohmann_json for profile persistence
  • Catch2 v3.5.4 for tests

Quick Start

Requirements: macOS 11+ or Windows 10/11, CMake 3.22+, and (on macOS) Xcode Command Line Tools or (on Windows) Visual Studio 2022 with the C++ workload.

# macOS / Linux
./scripts/build-release.sh

# Windows (PowerShell)
./scripts/build-release.ps1

The build produces a portable .app bundle (macOS) or extracted folder (Windows). On Windows the executable looks for profiles/ next to itself; on macOS it uses ~/Library/Application Support/Guitar Prometheus/profiles.

For a first-run walkthrough — opening a project, binding a profile, exporting MIDI — see Getting Started. The native GP / GPx import flow is covered in Native Import.

Documentation

Full project documentation lives under documentation/.

Section Audience
Architecture Maintainers — system design, component layout
Development Contributors — building, testing, coding rules
Customer Users — getting started, profile binding, import
Agentic Context AI agents — project context, design + phase plans
API Reference Auto-generated from Doxygen on every push

The customer-facing sections (architecture, development, customer) are published as a rendered docs site at guitar-prometheus.nullfragment.dev on every push to mainline. The agentic-context/ tree stays repo-local.

License

This project is licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International. A custom licence will replace CC BY-NC-ND in a future revision.

This project depends on JUCE, which is licensed separately. Public releases require a JUCE Personal (free, splash screen required, revenue cap) or Indie / Pro licence — see juce.com/get-juce.