Skip to content

2.1.0 New Functions!

Choose a tag to compare

@djenttleman djenttleman released this 15 Mar 15:03
· 92 commits to main since this release
93997af

v2.1 — Display, Loop & Command System Overhaul

March 2026

New Features

  • Real-time Display Filters — New "Display Filters" section in the sidebar with independent sliders to adjust Luminance (50–150%), Contrast (50–150%), and Saturation (0–200%) of the setlist. Values ​​are saved automatically and recalled upon restarting the app.

  • Fractional Loop Counter — When a section has +LOOP:N active, a badge with the current loop count in fractional format (e.g., 2/4) appears to the left of the song's action buttons, in the row of the corresponding nested section, and in Live View next to the section name.

  • Context Menu in Nested Sections — Nested section rows now have their own 3-dot menu (to the left of the name) with access to Notes and Color selection, using the same ID-based override system as songs.

  • Next Section Indicator in Live — The Live view displays the next nested section to the right of the active name, separated by a → arrow. If there is no active section but one is coming up, it is also shown as a preview.

  • Secondary Progress Bar in Live — A second, thinner, and shorter progress bar reflects the progress within the active nested section. The fill color matches the color assigned to that section in the setlist.

  • Command System in Region Names — Region and marker names in REAPER now support a full inline command system to control behavior, appearance, and duration directly from the project, without opening the app. See the command reference below.

Interface Improvements

  • Increased Visual Contrast — All text, borders, badges, and card backgrounds in the setlist body have had their luminance and opacity increased by 20%. The global variables --text-secondary and --text-subdued have been updated accordingly. The transport bar and app background remain unchanged.

  • Progress Bar in Live View Now White — The fill color of the main progress bar in Live View has changed from green to pure white for improved readability.

  • Redesigned Drag Handle and 3-Dot Button — The handle now has greater weight and contrast. The 3-dot button is now vertical (three SVG dots), without a circular background, and with a vertical separator between the two elements.

  • SVG Icons in the Context Menu — The icons in the song options menu (Stop, Timer, Notes, Color) have been replaced with SVGs consistent with the dark theme.

Bug Fixes

  • Context menu not closing on outside click — The removeEventListener listener was firing unconditionally on every click, preventing the menu from closing after the first external interaction. Fixed.

  • +LOOP:N playing N+1 times — Multiple updatePlaybackUI ticks within the 200ms window before REAPER responded to SET/POS were causing a duplicate increment of the loop counter. Resolved with a _lastLoopFireKey deduplication guard keyed by sectionId:endPos.

  • Real-time loop changes not applying — The _loopInit flag was permanently blocking the re-application of the loop's default state upon detecting changes to the region name. Replaced with _loopDefault, which tracks the last parsed value and applies the change immediately.

  • Setlists not isolated per project — Overrides and setlist data in localStorage were shared between different REAPER projects. Implemented a per-project fingerprint (DJB2 hash of sorted region IDs) as a suffix to all storage keys.

  • Keyboard shortcuts blocked writing in notes — Letter keys associated with app functions intercepted input while focus was on a <textarea>. Fixed with guard for tagName. Additionally, Enter saves and removes focus, and Escape only removes focus.

  • Secondary progress bar color in Live did not match setlist — The bar used the region's raw color; it now goes through the same getClosestPaletteColor() pipeline as the body, ensuring both colors are identical.


Command Reference v2.1

Commands are written directly into the region or marker name in REAPER. They can be combined in any order. The clean name that remains after parsing all the commands is the one displayed in the app.

Combined Example:

Chorus {dense pre-chorus} +LOOP:4 [green] [.bold] [1:20]

+ Commands — Playback Behavior

| Command | Description |

|---|---|

+PAUSE | Pauses playback at the end of the section. |

+SKIP | Marks the section as skipped by default. It appears crossed out and with reduced opacity. |

+LOOP | Activates an infinite loop for the section. |

+LOOP:N | Repeats the section exactly N v

Repeats and then continues. The X/N badge is displayed in real time. |

+LOOPFULL | Loop with absolute priority: If there is a song in the queue, wait for the loop to finish before jumping. |


Square brackets [] — Appearance and duration

| Command | Description |

---|---|

[color] | Assigns a color from the palette to the card. See available colors below. |

[mm:ss] | Overrides the displayed duration of the section (minutes:seconds format). |

[nosong] | Excludes the element from the numbering and total song count. Appears with reduced opacity. |

[.class] | Applies a custom CSS class to the name. See available classes below. |

Available Colors:
gray · red · orange · amber · yellow · lime · green · emerald · teal · cyan · sky · blue · indigo · violet · purple · fuchsia · pink · rose

Available CSS Classes:
| Class | Effect |

---|---|

.bold | Extra bold name (900) with adjusted tracking. |

.dim | Name at 42% opacity. |

.italic | Italic name. |

.loud | Uppercase name with increased spacing and maximum weight. |


Braces {} — Informative Text

| Command | Description |

|---|---|

{text} | Displays auxiliary text in italics next to the section name. Not shown in Live View or Canvas. Useful for production notes visible in the setlist. |


Special Prefixes — Markers

| Command | Description |

|---|---|

> | Turns the marker into a section marker (sub-region of the active song). |

* | Ignores the marker completely; it does not appear in the app. |

>>> DestinationName | When the section ends, automatically jumps to the region whose name matches DestinationName. |


Reserved Words

| Name | Description |

|---|---|

STOP | Stop marker. Playback ends when it reaches this point. |

SONG END | Also known as STOP. |