Skip to content

Releases: Baebu/lineup_builder

Lineup Builder v1.3

16 Mar 07:35

Choose a tag to compare

Lineup Builder v1.3 — Release Notes

Visual Preview & UI Enhancements

  • Visual Preview Tab — Added a real-time "VISUAL PREVIEW" tab alongside the text output. It generates an accurate DearPyGui mockup of the final Discord embed, rendering markdown formatting, relative timestamps (<t:UNIX:R>), and image attachments exactly as they will appear in Discord.
  • Toast Notifications — Introduced a non-blocking toast notification system in the bottom-right corner. It provides unobtrusive, color-coded feedback for actions like saving, syncing, and bot connection statuses without interrupting your workflow.
  • Collapsible Sections — The left panel now uses collapsible sections (Details, Genres, Links, Image, Discord) to save screen space. The app remembers your open/closed preferences across sessions.
  • In-App Image Preview — The Image section now displays a properly scaled thumbnail preview of your selected embed image directly within the editor.

Editor & Roster Improvements

  • DJ Autocomplete — Slot name inputs now feature a smart autocomplete dropdown that suggests DJs from your saved roster as you type.
  • Inline DJ Editing — Added a dedicated edit button directly on lineup slots, allowing you to update a DJ's stream links or details on the fly without having to switch to the Roster tab.
  • Smart Genre Packing — Genre tags now use an intelligent bin-packing algorithm to maximize horizontal space efficiency, keeping the UI clean and compact even with many tags.

Event Management Fixes & Improvements

  • Fixed Race Condition in Event Duplication — Resolved a race condition where auto-save could bump the duplicated event's volume after it was saved, causing duplicate volume numbers. Volume calculation is now atomic with the save operation.
  • Clean Slate on Event Deletion — When you delete a saved event, the editor now resets to a fresh "new event" state (blank title, single empty slot, current date at 20:00). This prevents accidentally saving remnants of the deleted event.

Discord Bot Upgrades

  • Server (Guild) Selection — The bot integration now fetches all visible servers and allows you to select a specific server, which intelligently filters the channel list.
  • Role Pinging — Added the ability to fetch server roles and select a specific "Role to Ping" (e.g., @EventNotify) when posting or scheduling a lineup.

Internal

  • Added toast.py for the global notification overlay system.
  • Added preview.py to handle the parsing and rendering of Discord embed visual mockups.
  • Added sections.py mixin for collapsible layout state management.
  • Added DiscordOAuth service to handle the local callback server and secure token management.
  • Added EventBus integration for real-time reactivity across the new UI components.

Full Changelog: v1.2...v1.3

Lineup Builder 1.2

07 Mar 11:14

Choose a tag to compare

Lineup Builder v1.2 — Release Notes

Discord Bot Integration

  • Discord Bot — Connect a Discord bot directly from the app. Configure your bot token, client ID, and invite link via a compact settings popup.
  • Rich Embed Posting — Lineup posts are sent as styled Discord embeds with event title, start timestamp, genre tags, full lineup with times, and social links. Embed color matches your current theme accent.
  • Embed Image — Attach a poster image to your Discord embed by pasting a URL or browsing for a local file. Inline controls (text input + Browse + Clear) keep the workflow compact.
  • Channel Picker — Fetches your server's text channels via the bot API so you can post to Events, Popup, or Signups channels by name.
  • Scheduled Posting — Schedule posts for future delivery. Pick a date/time, select a channel, and the app will automatically send the embed when the time arrives. Scheduled posts persist across restarts.
  • .env Support — Bot token, client ID, and client secret can be loaded from a .env file in the app directory for secure credential management.

Social Links & Output

  • Social Links — Add social media / streaming links (Twitch, SoundCloud, etc.) that appear at the bottom of your lineup output and Discord embeds.
  • GitHub Footer — Discord embeds now include a footer linking back to the project repo.

Themes & UI

  • 8 Built-in Theme Presets — Slate (default), Midnight Blue, OLED Black, Crimson, Amber, Forest, Ocean, Violet.
  • User Presets — Save and manage your own custom theme presets.
  • Title Bar Theming — The window title bar color follows your active theme.
  • Button Color Fix — Button colors now update correctly when switching themes.

Stability & Data

  • Autosave & Crash Recovery — Automatic periodic saves with a restore-from-autosave modal on startup if unsaved work is detected.
  • Improved YAML/JSON Persistence — Fixed social links parsing, autosave reliability, and modal restore flows.
  • Slot Placeholder — Empty slots show a placeholder prompt instead of blank space.

Internal

  • Renamed DJRosterMixinRosterMixin and dj_roster.pyroster.py.
  • Added discord_service.py and discord_oauth.py backend modules (GUI-free).
  • Updated PyInstaller spec with new hidden imports.

Full Changelog: v1.1...v1.2

Lineup Builder 1.1

06 Mar 16:52

Choose a tag to compare

Lineup Builder v1.1 — "Dear PyGui Rework"

Released: March 6 2026

Overview

v1.1 is a full ground-up rework of the presentation layer. Every frontend widget, panel, popup, and callback has been migrated from CustomTkinter/Tkinter to DearPyGui (DPG). The backend remains pure Python with zero GUI imports; the mixin architecture is preserved and extended to 11 mixins.


GUI Framework Migration: CustomTkinter → DearPyGui

The most significant change in this release. Every piece of user interface was rebuilt from scratch using DearPyGui's retained-mode immediate-mode hybrid API.

  • App loop: app.mainloop()app.run() with a per-frame DPG render loop
  • Primary window fills the viewport automatically via dpg.set_primary_window() — no title bar chrome, no scroll, no resize handles
  • Two-column layout built with dpg.table() and dpg.child_window(), replacing the old CTkFrame grid. Left panel is fixed at 380 px; the right panel fills remaining space with a resizable column
  • All popup/modal windows are modal=True, autosize=True, no_resize=True — they inherit the global theme automatically with no per-window styling needed
  • Default viewport: 1050×768, minimum 800×600

New & Improved UI Features

  • Material Symbols Rounded icon font bundled as a full variable + static font family, used throughout the UI for crisp, scalable icons
  • Global theme systemapply_theme() builds a single DPG theme covering 30+ color slots and rounded-corner styles bound globally via dpg.bind_theme(). The old per-widget color-walk machinery (_recolor_widgets, _clean_list, COLOR_ATTRS) has been removed entirely
  • 3 built-in color presets: Slate (Default), Midnight, and OLED Black
  • User-defined presets — save, apply, and delete custom color schemes from the Settings tab
  • UI scale slider — a new ui_scale setting applies a global font/UI scale multiplier
  • Tabbed left panel — Event, DJ Roster, and Settings tabs replace the old layout. Settings are now a first-class panel, not a separate window
  • Redesigned date/time picker — removed dependency on tkcalendar. Date and time are now two inline inputs with a calendar-icon trigger that opens a DPG modal for visual date selection
  • Widget factory module (widgets.py) — add_icon_button(), add_primary_button(), add_danger_button(), add_styled_input(), add_styled_combo() all bind the correct theme automatically, keeping all call sites clean
  • Genre tag pills rendered as DPG toggle buttons with per-item theme binding for active/inactive visual state
  • DJ roster drag-and-drop ported to DPG's native drag/drop API with flash-highlight feedback on drop

Architecture & Code Changes

  • DPGVar / DPGBoolVar (in slot_ui.py / frontend/types.py) replace tkinter.StringVar / BooleanVar, exposing the same .get() / .set() API so the rest of the codebase required minimal changes
  • SlotState reduced to a pure data holder; the UI row is built separately by build_slot_row()
  • types.pySlotData, DJInfo, and EventSnapshot extracted into a dedicated pure-Python module with zero GUI imports
  • Debounce rewrittenthreading.Timer replaces all tkinter.after() / after_cancel() calls. A queue.SimpleQueue is drained each DPG frame by process_queue() to push timer callbacks back onto the main thread safely
  • Window geometry persistence updated to read/write via dpg.get_viewport_width() / dpg.get_viewport_height() instead of winfo_width() / winfo_height()
  • Intermediate refactor work prior to DPG migration included extracting theme.py as a standalone module, overhauling the UI builder, and fixing DJ roster drawer scroll and open/close animation bugs

Dependency Changes

Removed Added
customtkinter dearpygui
tkcalendar Pillow
iconipy

Build & Packaging

  • PyInstaller spec updated: datas now includes Material_Symbols_Rounded and icon files; hiddenimports updated for dearpygui
  • Application icon (icon.ico / icon.png) bundled for the DPG viewport

Removed

  • tests/test_architecture.py, tests/test_import.py — legacy tests that depended on CustomTkinter internals; removed pending a DPG-aware test suite
  • ARCHITECTURE.md — superseded by the inline copilot-instructions.md and updated README

Full Changelog: 1.0...1.1

Lineup Builder 1.0

02 Mar 16:59

Choose a tag to compare

Lineup Builder is a desktop app for building DJ event lineups and generating formatted output for Discord or plain text.

Features

Event Builder

  • Set event title, volume number, and start date/time
  • Add genre tags (saved for reuse across events)
  • Build a lineup of performer slots with DJ name, genre, and set duration
  • Drag and drop slots to reorder the lineup
  • Optional Open Decks section with configurable slot count and duration

DJ Roster

  • Persistent DJ roster with name and stream link (VRCDN supported)
  • Drag a DJ from the roster directly into the lineup
  • Search and filter the roster
  • Inline save/delete per DJ card

Output Formats

  • Discord — Unix timestamps (<t:...:t>), markdown headers, auto-suppressed embed links
  • Plain TextHH:MM times with local timezone, no markdown
  • Quest — VRCDN HTTPS stream URLs for Meta Quest
  • PC — VRCDN rtspt:// stream URLs for PCVR

Persistence

  • Saves lineups, DJ roster, genres, and event titles to local YAML files
  • Restore and reload past events; duplicate and increment volume number
  • Window size and position saved between sessions

Download

LineupBuilder.exe — standalone Windows executable, no installation required.