Lyrio - Song Helper
approvedby whitte-h
This plugin has not been manually reviewed by Obsidian staff. Automatically synchronize song sections (Chorus, Verse, Bridge, etc.) across your note.
Lyrio — Song Helper for Obsidian
Lyrio keeps song sections in sync across your notes. Tag a block as ::Chorus, edit it anywhere, and every other ::Chorus block updates automatically.
Syntax
| Form | Meaning |
|---|---|
::Tag | Opens a section named Tag |
::Tag* | Local-only marker — changes here never propagate to other instances |
::Tag:: | Closes a section (only when Use closing tag is enabled) |
::Tag | Am C F G | | Marker with inline bar content (chords, key, notes…) |
Section names are case-sensitive: ::Chorus and ::chorus are treated as different sections.
Auto-sync
When you edit any section block, Lyrio updates every other instance of that section in the note.
::Chorus
La la la
::Verse
My own verse
::Chorus ← typing here also updates the block above, and vice versa
La la la
A 300 ms debounce prevents excessive updates while you type.
Auto-fill
Write a bare ::Tag with no body and Lyrio immediately fills it with the content of the nearest existing instance:
::Chorus
La la la la
::Chorus ← becomes "La la la la" automatically
Inline bar content
Append | … | to any marker to attach metadata (chords, key, capo, etc.) to that section tag:
::Chorus | Am C F G |
La la la
- Once defined on any instance, typing a bare
::Choruselsewhere auto-fills both the bar content and the lyrics. - Editing the bar content on one marker syncs it to all other
::Chorusmarkers.
Closing tags
Enable Use closing tag in settings to delimit sections explicitly instead of relying on blank lines:
::Chorus
La la la
::Chorus::
Some prose between sections without a blank line.
::Chorus
La la la
::Chorus::
Exception tags
Some tags should not replicate their body to other instances. By default Verse is an exception tag.
For exception tags:
- The color is applied normally.
- The bar content (
| … |) syncs across all instances of the same tag — so chords stay consistent. - The body lyrics are not synced — each instance can have its own unique content.
::Verse | G D Em C |
First verse lyrics, unique to this block.
::Verse | G D Em C | ← bar content synced, but lyrics are independent
Second verse, completely different words.
Configure which tags are exceptions in Settings → Exception tags (comma-separated).
Local markers (::Tag*)
Add * after the tag name to mark an instance as local. Edits to a local block are ignored by the sync engine and never propagate.
::Chorus
La la la
::Chorus*
A private scratch version — won't affect other instances.
Settings
| Setting | Default | Description |
|---|---|---|
| Auto-sync sections | On | Automatically sync all instances when any is edited |
| Use closing tag | Off | Use ::Tag:: to close sections instead of blank lines |
| Color section blocks | Off | Draw a colored left border on body lines matching the tag color |
| Exception tags | Verse | Tags that sync bar content but not body. Comma-separated. |
Commands
Show song sections in this note — logs all section markers found in the current note to the developer console.
Example
# My Song
::Verse | G D Em C |
First verse goes here.
Each line is its own lyric.
::PreChorus
Building up...
::Chorus | Am F C G |
This is the main chorus.
Everyone sings along.
::Verse | G D Em C |
Second verse — different words, same chords.
::PreChorus
Building up again...
::Chorus | Am F C G |
This is the main chorus.
Everyone sings along.
::Bridge
Something different here.
::Chorus | Am F C G |
This is the main chorus.
Everyone sings along.
The two ::Verse blocks have independent lyrics but share the same bar content. All three ::Chorus blocks stay fully in sync.
License
MIT
Support
If you find this plugin useful and want to support its development, you can buy me a coffee!
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.