# lindarzhang/seefretboard architecture

> Architecture diagram of the GitHub repository lindarzhang/seefretboard, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lindarzhang/seefretboard
- Repository: https://github.com/lindarzhang/seefretboard

## Overview

seeFretboard is a Python library for visualizing guitar fretboards and producing video and audio-visual teaching or research materials. Users configure a fretboard, select theory content or note positions, and render the result; they can also generate animated sequences and combine video with audio. The README documents prediction-versus-ground-truth displays and standalone or website integration. Source excerpts show the central rendering and video-manager responsibilities, but not every API call, so uncertain internal handoffs are omitted.

Main entry points: [`seeFretboard/SeeFretboard.py`](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/SeeFretboard.py) (Fretboard API), [`seeFretboard/Videos/VideoManager.py`](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/VideoManager.py) (Media rendering), [`seeFretboard/Videos/TabSequence.py`](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/TabSequence.py) (Tab sequence), [`seeFretboard/Utilities/Functions.py`](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Utilities/Functions.py) (Theory utilities)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_theory["Music theory"]
  node_pitch["Pitch collection<br/>[PitchCollection.py]"]
  node_theory_utils["Theory utilities<br/>[Functions.py]"]
  node_positions["Note positions<br/>[NotePosition.py]"]
  node_constants["Theory data<br/>[Constants.py]"]
end

subgraph group_display["Fretboard display"]
  node_api["Fretboard API<br/>[SeeFretboard.py]"]
  node_theme["Style and tuning<br/>[FretboardStyle.py]"]
  node_note_design["Note design<br/>[CirlceNote.py]"]
  node_figure["Fretboard figure<br/>[FretboardFigure.py]"]
end

subgraph group_media["Video and audio"]
  node_sequence["Tab sequence<br/>[TabSequence.py]"]
  node_frame["Frame timing<br/>[Frame.py]"]
  node_video_note["Video notes<br/>[VideoNote.py]"]
  node_video["Video settings<br/>[Video.py]"]
  node_audio["Audio settings<br/>[Audio.py]"]
  node_images["Image output<br/>[Images.py]"]
  node_manager["Media rendering<br/>[VideoManager.py]"]
end

subgraph group_delivery["Output and research"]
  node_prediction["Prediction comparison"]
  node_embed["Web and standalone"]
  node_outputs["Generated outputs"]
end

node_user(("Library user"))

node_user -->|"configures and displays"| node_api
node_api -->|"uses pitches"| node_pitch
node_api -->|"uses styling"| node_theme
node_api -->|"draws fretboard"| node_figure
node_api -->|"draws notes"| node_note_design
node_api -->|"uses positions"| node_positions
node_api -->|"uses theory helpers"| node_theory_utils
node_theory_utils -->|"uses theory data"| node_constants
node_figure -->|"uses constants"| node_constants
node_theme -->|"configures notes"| node_note_design
node_sequence -->|"extends timing"| node_frame
node_sequence -->|"uses note model"| node_video_note
node_sequence -->|"converts MIDI"| node_theory_utils
node_user -->|"creates animations"| node_sequence
node_user -->|"provides audio"| node_audio
node_user -->|"compares annotations"| node_prediction
node_user -->|"integrates library"| node_embed
node_user -->|"renders media"| node_manager
node_manager -->|"updates fretboard"| node_api
node_manager -->|"reads video settings"| node_video
node_manager -->|"writes frame images"| node_images
node_manager -->|"combines audio"| node_audio
node_manager -.->|"writes media"| node_outputs

click node_api "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/SeeFretboard.py"
click node_pitch "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/PitchCollection.py"
click node_theory_utils "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Utilities/Functions.py"
click node_positions "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/NotePosition.py"
click node_constants "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Utilities/Constants.py"
click node_theme "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Designs/FretboardStyle.py"
click node_note_design "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Designs/CirlceNote.py"
click node_figure "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Designs/FretboardFigure.py"
click node_sequence "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/TabSequence.py"
click node_frame "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/Frame.py"
click node_video_note "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/VideoNote.py"
click node_video "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/Video.py"
click node_audio "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/Audio.py"
click node_images "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/Images.py"
click node_manager "https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/VideoManager.py"
click node_prediction "https://github.com/lindarzhang/seefretboard/tree/main/seeFretboard"
click node_embed "https://github.com/lindarzhang/seefretboard/tree/main/seeFretboard"
click node_outputs "https://github.com/lindarzhang/seefretboard/tree/main/seeFretboard/Outputs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_pitch,node_theory_utils,node_positions,node_constants,node_user toneBlue
class node_api,node_theme,node_note_design,node_figure toneAmber
class node_sequence,node_frame,node_video_note,node_video,node_audio,node_images,node_manager toneMint
class node_prediction,node_embed,node_outputs toneRose
```

## Components

### Music theory

- [Pitch collection](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/PitchCollection.py): `seeFretboard/PitchCollection.py`
- [Theory utilities](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Utilities/Functions.py): `seeFretboard/Utilities/Functions.py`
- [Note positions](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/NotePosition.py): `seeFretboard/NotePosition.py`
- [Theory data](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Utilities/Constants.py): `seeFretboard/Utilities/Constants.py`

### Fretboard display

- [Fretboard API](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/SeeFretboard.py): `seeFretboard/SeeFretboard.py`
- [Style and tuning](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Designs/FretboardStyle.py): `seeFretboard/Designs/FretboardStyle.py`
- [Note design](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Designs/CirlceNote.py): `seeFretboard/Designs/CirlceNote.py`
- [Fretboard figure](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Designs/FretboardFigure.py): `seeFretboard/Designs/FretboardFigure.py`

### Video and audio

- [Tab sequence](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/TabSequence.py): `seeFretboard/Videos/TabSequence.py`
- [Frame timing](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/Frame.py): `seeFretboard/Videos/Frame.py`
- [Video notes](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/VideoNote.py): `seeFretboard/Videos/VideoNote.py`
- [Video settings](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/Video.py): `seeFretboard/Videos/Video.py`
- [Audio settings](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/Audio.py): `seeFretboard/Videos/Audio.py`
- [Image output](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/Images.py): `seeFretboard/Videos/Images.py`
- [Media rendering](https://github.com/lindarzhang/seefretboard/blob/main/seeFretboard/Videos/VideoManager.py): `seeFretboard/Videos/VideoManager.py`

### Output and research

- [Prediction comparison](https://github.com/lindarzhang/seefretboard/tree/main/seeFretboard): `seeFretboard`
- [Web and standalone](https://github.com/lindarzhang/seefretboard/tree/main/seeFretboard): `seeFretboard`
- [Generated outputs](https://github.com/lindarzhang/seefretboard/tree/main/seeFretboard/Outputs): `seeFretboard/Outputs`

### Other components

- **Library user**

## Connections

- Library user → Fretboard API: configures and displays (evidence: `README.md`)
- Fretboard API → Pitch collection: uses pitches (evidence: `seeFretboard/SeeFretboard.py`)
- Fretboard API → Style and tuning: uses styling (evidence: `seeFretboard/SeeFretboard.py`)
- Fretboard API → Fretboard figure: draws fretboard (evidence: `seeFretboard/SeeFretboard.py`)
- Fretboard API → Note design: draws notes (evidence: `seeFretboard/SeeFretboard.py`)
- Fretboard API → Note positions: uses positions (evidence: `seeFretboard/SeeFretboard.py`)
- Fretboard API → Theory utilities: uses theory helpers (evidence: `seeFretboard/SeeFretboard.py`)
- Theory utilities → Theory data: uses theory data (evidence: `seeFretboard/Utilities/Functions.py`)
- Fretboard figure → Theory data: uses constants (evidence: `seeFretboard/Designs/FretboardFigure.py`)
- Style and tuning → Note design: configures notes (evidence: `seeFretboard/Designs/FretboardStyle.py`)
- Tab sequence → Frame timing: extends timing (evidence: `seeFretboard/Videos/TabSequence.py`)
- Tab sequence → Video notes: uses note model (evidence: `seeFretboard/Videos/TabSequence.py`)
- Tab sequence → Theory utilities: converts MIDI (evidence: `seeFretboard/Videos/TabSequence.py`)
- Library user → Tab sequence: creates animations (evidence: `README.md`)
- Library user → Audio settings: provides audio (evidence: `README.md`)
- Library user → Prediction comparison: compares annotations (evidence: `README.md`)
- Library user → Web and standalone: integrates library (evidence: `README.md`)
- Library user → Media rendering: renders media (evidence: `README.md`)
- Media rendering → Fretboard API: updates fretboard (evidence: `seeFretboard/Videos/VideoManager.py`)
- Media rendering → Video settings: reads video settings (evidence: `seeFretboard/Videos/VideoManager.py`)
- Media rendering → Image output: writes frame images (evidence: `seeFretboard/Videos/VideoManager.py`)
- Media rendering → Audio settings: combines audio (evidence: `seeFretboard/Videos/VideoManager.py`)
- Media rendering → Generated outputs: writes media
