- C++ 93.2%
- TypeScript 3.4%
- CMake 1.5%
- Shell 0.7%
- CSS 0.5%
- Other 0.5%
|
All checks were successful
Notify Infra — Rebuild Public Sites / dispatch (push) Successful in 0s
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>
|
||
|---|---|---|
| .forgejo/workflows | ||
| docs-site | ||
| documentation | ||
| packages/mermaid-viewer | ||
| resources | ||
| scripts | ||
| src | ||
| tests | ||
| .clang-format | ||
| .gitignore | ||
| CMakeLists.txt | ||
| Doxyfile | ||
| LICENSE | ||
| package.json | ||
| pnpm-workspace.yaml | ||
| README.md | ||
Guitar Prometheus
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 1–24 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.