Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
168314e
feat: core backend - actor profiles, fades, Yamaha SCP, show control
johnqherman Jun 30, 2026
4969cfd
feat: Allen & Heath input-channel fader control via NRPN
johnqherman Jun 30, 2026
c05e5a6
feat: positions, Cue Zero, MTC timecode, channel monitoring
johnqherman Jun 30, 2026
ef9f984
chore: merge backend additions
johnqherman Jun 30, 2026
5102a11
feat: UI surfacing + service wiring
johnqherman Jun 30, 2026
96e6347
fix: X32 meter feed, exact WING fader law, build warning
johnqherman Jun 30, 2026
4d08ed8
fix: verify Allen & Heath SQ NRPN encoding against official spec
johnqherman Jun 30, 2026
dafed0b
chore: terse comments, drop external references
johnqherman Jun 30, 2026
d7f98fc
feat: console scribble strips and ensembles
johnqherman Jul 1, 2026
c6d0a4b
feat: cue fx mutes, snippets, L/R gang, color/skip, soundcheck mode
johnqherman Jul 1, 2026
aea662d
chore: merge cue-content features
johnqherman Jul 1, 2026
d64a91f
chore: use American spelling (color)
johnqherman Jul 1, 2026
040126f
feat: console-workflow refinements + Settings dialog (highlight, mute…
johnqherman Jul 1, 2026
c490060
feat: UI panels for positions, cue zero, and timecode triggers
johnqherman Jul 1, 2026
15cb176
feat: cue clone, copy/paste/merge/swap, fill down, jump, and edit lock
johnqherman Jul 1, 2026
8ab5a3f
feat: import .tmix show files
johnqherman Jul 1, 2026
8b4c20d
feat: edit history browser and cue-list CSV export
johnqherman Jul 1, 2026
5868816
feat: channel utilisation report
johnqherman Jul 1, 2026
b3d7466
feat: cue-table row size selector
johnqherman Jul 1, 2026
f369a02
feat: cue-table column visibility toggles
johnqherman Jul 1, 2026
ad04f18
feat: spare-backup mic allocation model
johnqherman Jul 1, 2026
46e8d36
feat: spare-backup switch dialog and mixer apply
johnqherman Jul 1, 2026
9f07b5c
feat: export cue notes to text file
johnqherman Jul 1, 2026
f3a76e6
feat: active cue info panel
johnqherman Jul 1, 2026
e6e491a
feat: clone level offsets between cues
johnqherman Jul 1, 2026
19c0fad
feat: FX unit registry and channel assignments
johnqherman Jul 1, 2026
fd39870
feat: FX setup dialog
johnqherman Jul 1, 2026
7345385
fix: scroll cue editor sections and declutter timecode add row
johnqherman Jul 1, 2026
0d61910
feat: startup welcome screen with recent shows
johnqherman Jul 1, 2026
1805805
chore: use repository description for app text and generic import labels
johnqherman Jul 1, 2026
0eaa8a4
feat: cpack packaging with desktop entry and app icon
johnqherman Jul 1, 2026
5b268b5
feat: quick start and feature guide help
johnqherman Jul 1, 2026
23980c2
chore: US spelling app-wide (utilization, center, behavior)
johnqherman Jul 1, 2026
5fd0a48
feat: record live console fader offsets into a cue
johnqherman Jul 1, 2026
5e3a53c
fix: replace welcome-screen blurb with a functional prompt
johnqherman Jul 1, 2026
749b315
refactor: remove unused programmer-mode gating
johnqherman Jul 1, 2026
747d51b
feat: QLab panic/stop/pause/resume transport verbs
johnqherman Jul 1, 2026
08dada3
feat: discard notes action
johnqherman Jul 1, 2026
7100ad4
feat: inline DCA, position, and FX cue-table columns
johnqherman Jul 1, 2026
d28c60b
feat: REAPER virtual-sound-check marker sync
johnqherman Jul 1, 2026
9a65e7a
feat: marker notes with HTML export
johnqherman Jul 1, 2026
38b34f5
feat: REAPER transport auto-detect via OSC feedback
johnqherman Jul 1, 2026
9002e4c
feat: console snippet/scene name cache
johnqherman Jul 1, 2026
2974b2d
feat: populate console name cache from X32 and show snippet names
johnqherman Jul 1, 2026
249b7c3
feat: record faders mode writes live moves into the current cue
johnqherman Jul 1, 2026
04c6935
feat: OSC remote stopall and pauseresumeall verbs
johnqherman Jul 1, 2026
fd83e8f
feat: Cue Player (cpsound) outbound OSC integration
johnqherman Jul 1, 2026
663832e
feat: DiGiCo SD-series console driver
johnqherman Jul 1, 2026
3603efa
feat: Show Cue System (SCS) outbound OSC integration
johnqherman Jul 1, 2026
aecbd08
feat: standby cue highlight, filter pinning, unified status colors
johnqherman Jul 1, 2026
c37ecc1
feat: type-to-jump box, cue context menu, type icons, fade column
johnqherman Jul 1, 2026
beb064a
feat: bigger live controls, grouped console list, persisted columns, …
johnqherman Jul 1, 2026
71437e7
feat: tabbed remote dialog with field gating, high-contrast booth theme
johnqherman Jul 1, 2026
9d03b70
feat: collapsible editor sections (collapsed by default), fix standby…
johnqherman Jul 1, 2026
088ee3a
feat: chevron collapsible sections (no frames), pad live-control buttons
johnqherman Jul 1, 2026
e475ad4
fix: reduce live-control button padding
johnqherman Jul 1, 2026
f0b4205
fix: icon-only GO/Stop transport buttons
johnqherman Jul 1, 2026
97ced62
feat: icon-only PANIC, distinct bubble-bar icons, wrap bubble bar to …
johnqherman Jul 1, 2026
1406ccf
fix: tighter tooltip padding and faster appearance
johnqherman Jul 1, 2026
34ca832
fix: fit bubble-bar icons on a single row
johnqherman Jul 1, 2026
7f3f9a6
feat: center bubble bar and tooltips horizontally
johnqherman Jul 1, 2026
97ff463
fix: center tooltips under widget incl action buttons, icon-only prev…
johnqherman Jul 1, 2026
053059b
fix: center tooltips on cursor position
johnqherman Jul 1, 2026
11b9724
fix: recenter tooltip on cursor via real width, shorten tooltip text
johnqherman Jul 1, 2026
444782a
revert: use default tooltip positioning
johnqherman Jul 1, 2026
5f5a286
fix: crash deleting the playing cue (model remove ordering + stale pl…
johnqherman Jul 1, 2026
4bf19a7
fix: multiple crash-class bugs (move/insert model ordering, GoTo/macr…
johnqherman Jul 1, 2026
ea3c309
fix: nested-macro state clobber (local state) and FadeEngine advance …
johnqherman Jul 1, 2026
00bf545
feat: empty-state hint for the cue list
johnqherman Jul 2, 2026
12fe002
fix: macro cue type data-loss, empty-state hint, tooltip/mnemonic/uni…
johnqherman Jul 2, 2026
bf67138
feat: TheatreMix-style layout - cue grid over channel strip, editor a…
johnqherman Jul 2, 2026
8c19b06
feat: match TheatreMix menus (Cue List menu), column names (Cue/Text)…
johnqherman Jul 2, 2026
611c229
feat: TheatreMix-style cue grid columns (dot, Cue, Text, FX, Snip, QL…
johnqherman Jul 2, 2026
89bcedf
feat: per-DCA triplet columns [DCA n | fx | pos] with FX/Pos column t…
johnqherman Jul 2, 2026
267d05b
feat: consolidate to TheatreMix 5-menu bar (File/Edit/View/Cue List/H…
johnqherman Jul 2, 2026
9bde199
feat: per-channel status strip (tiles colored by monitor state), mixe…
johnqherman Jul 2, 2026
0c1e60c
feat: add scenes + per-channel FX to cue model with persistence and S…
johnqherman Jul 2, 2026
a312a9b
feat: populate per-DCA fx/pos columns from channelFX/positions via DC…
johnqherman Jul 2, 2026
634f40e
feat: in-grid Assign prompts on double-click for DCA/Scene/Snip/QLab …
johnqherman Jul 2, 2026
19364c5
style: remove em-dashes from user-facing strings
johnqherman Jul 2, 2026
a42046b
feat: CPack installers in CI releases (deb/rpm/NSIS/dmg) + in-app upd…
johnqherman Jul 2, 2026
03d0d0f
feat: AutoUpdater with WinSparkle/Sparkle silent updates, Linux notif…
johnqherman Jul 2, 2026
296e863
feat: CI appcast publishing and macOS Sparkle bundle plist
johnqherman Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 101 additions & 26 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Install non-Qt dependencies
run: |
sudo apt-get update
sudo apt-get install -y libxkbcommon-dev liblo-dev libasound2-dev build-essential cmake
sudo apt-get install -y libxkbcommon-dev liblo-dev libasound2-dev build-essential cmake rpm file

- name: Install Qt
uses: jurplel/install-qt-action@v4
Expand All @@ -42,11 +42,17 @@ jobs:
env:
QT_QPA_PLATFORM: offscreen

- name: Upload artifact
- name: Package (deb/rpm/tarball)
run: cd build && cpack

- name: Upload installers
uses: actions/upload-artifact@v4
with:
name: OpenMix-linux
path: build/OpenMix
path: |
build/*.deb
build/*.rpm
build/*.tar.gz

build-windows:
runs-on: windows-latest
Expand All @@ -71,6 +77,9 @@ jobs:
- name: Install liblo via vcpkg
run: vcpkg install liblo:x64-windows

- name: Install NSIS
run: choco install nsis -y

- name: Set up MSVC
uses: ilammy/msvc-dev-cmd@v1
with:
Expand All @@ -94,17 +103,17 @@ jobs:
env:
QT_QPA_PLATFORM: offscreen

- name: Deploy Qt
- name: Package (NSIS installer)
run: |
mkdir build\deploy
copy build\OpenMix.exe build\deploy\
C:\Qt\6.11.0\msvc2022_64\bin\windeployqt --release build\deploy\OpenMix.exe
$env:PATH = "C:\Qt\6.11.0\msvc2022_64\bin;C:\Program Files (x86)\NSIS;$env:PATH"
cd build
cpack -G NSIS

- name: Upload artifact
- name: Upload installer
uses: actions/upload-artifact@v4
with:
name: OpenMix-windows
path: build/deploy/
path: build/*.exe

build-macos:
runs-on: macos-latest
Expand Down Expand Up @@ -134,19 +143,16 @@ jobs:
env:
QT_QPA_PLATFORM: offscreen

- name: Deploy, sign, & package
- name: Package (DMG)
run: |
/opt/homebrew/opt/qt@6/bin/macdeployqt build/OpenMix.app
xattr -cr build/OpenMix.app
codesign --force --deep -s - build/OpenMix.app
cd build
ditto -c -k --sequesterRsrc --keepParent OpenMix.app OpenMix.zip
export PATH="/opt/homebrew/opt/qt@6/bin:$PATH"
cd build && cpack -G DragNDrop

- name: Upload artifact
- name: Upload installer
uses: actions/upload-artifact@v4
with:
name: OpenMix-macos
path: build/OpenMix.zip
path: build/*.dmg

release:
if: startsWith(github.ref, 'refs/tags/v')
Expand All @@ -158,16 +164,85 @@ jobs:
- name: Download artifacts
uses: actions/download-artifact@v4

- name: Package
run: |
cd OpenMix-linux && tar czf ../OpenMix-linux.tar.gz OpenMix && cd ..
cd OpenMix-windows && zip -r ../OpenMix-windows.zip . && cd ..
mv OpenMix-macos/OpenMix.zip OpenMix-macos.zip

- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: |
OpenMix-linux.tar.gz
OpenMix-windows.zip
OpenMix-macos.zip
OpenMix-linux/*
OpenMix-windows/*
OpenMix-macos/*

# generate the Sparkle/WinSparkle appcasts that the app polls, and publish
# them to GitHub Pages. Requires a Sparkle EdDSA private key in the
# OPENMIX_SPARKLE_ED_PRIVATE_KEY secret (see docs/AUTOUPDATE.md).
appcast:
if: startsWith(github.ref, 'refs/tags/v')
needs: [release]
runs-on: macos-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4

- name: Install Sparkle tools
run: brew install --cask sparkle || brew install sparkle

- name: Download artifacts
uses: actions/download-artifact@v4

- name: Build appcasts
env:
SPARKLE_KEY: ${{ secrets.OPENMIX_SPARKLE_ED_PRIVATE_KEY }}
TAG: ${{ github.ref_name }}
run: |
VERSION="${TAG#v}"
BASE="https://github.com/johnqherman/OpenMix/releases/download/${TAG}"
mkdir -p site

# macOS: sign the DMG with Sparkle's EdDSA key and emit a full appcast
SIGN=$(find /opt/homebrew /usr/local -name sign_update -type f 2>/dev/null | head -1)
DMG=$(ls OpenMix-macos/*.dmg | head -1)
if [ -n "$SPARKLE_KEY" ] && [ -n "$SIGN" ] && [ -n "$DMG" ]; then
echo "$SPARKLE_KEY" > /tmp/ed_key
SIG=$("$SIGN" -f /tmp/ed_key "$DMG") # prints sparkle:edSignature=... length=...
LEN=$(stat -f%z "$DMG")
cat > site/appcast-macos.xml <<EOF
<?xml version="1.0"?>
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
<channel>
<item>
<title>OpenMix ${VERSION}</title>
<sparkle:version>${VERSION}</sparkle:version>
<sparkle:shortVersionString>${VERSION}</sparkle:shortVersionString>
<enclosure url="${BASE}/$(basename "$DMG")" ${SIG} sparkle:version="${VERSION}" length="${LEN}" type="application/octet-stream"/>
</item>
</channel>
</rss>
EOF
else
echo "::warning::No Sparkle key/tool/DMG; skipping macOS appcast (updates will not verify)"
fi

# Windows: WinSparkle RSS appcast
EXE=$(ls OpenMix-windows/*.exe | head -1)
if [ -n "$EXE" ]; then
cat > site/appcast-windows.xml <<EOF
<?xml version="1.0"?>
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
<channel>
<item>
<title>OpenMix ${VERSION}</title>
<sparkle:version>${VERSION}</sparkle:version>
<enclosure url="${BASE}/$(basename "$EXE")" sparkle:version="${VERSION}" type="application/octet-stream"/>
</item>
</channel>
</rss>
EOF
fi

- name: Publish to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./site
keep_files: true
Loading
Loading