StemRoller: desktop stem separator, Android stems player, and server daemons

- stemroller/: PySide6/QML desktop app and player for separating music into stems
- android/: Plex music player that plays per-stem mixes, with Android Auto support,
  a graphic + parametric (Equalizer APO-style) EQ, and offline downloads
- server/: stemserve (serves stems to the app) and stemd (separates the library on
  the server's GPU, with "Stem Now" priority requests)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClericalErrorandClaude Opus 5.5 committed 2026-10-14 21:17:17 -07:00
1 parent 716c5499ff
commit 1845f03c41
184 files changed
+24648

No files matched your search

+57
View File
@@ -0,0 +1,57 @@
import QtQuick
// Aero glass for chrome. Shows the window's cached, pre-blurred backdrop
// (refreshed only on resize), so nothing is blurred per frame.
Item {
id: root
property real offsetX: 0
property real offsetY: 0
property int blur: 16
property real topLeftRadius: 0
property real topRightRadius: 0
property real bottomLeftRadius: 0
property real bottomRightRadius: 0
property bool gloss: true
property bool innerBorder: true
clip: true
readonly property var win: Window.window
Image {
x: -root.offsetX
y: -root.offsetY
width: root.win ? root.win.width : 0
height: root.win ? root.win.height : 0
source: root.win ? "image://fx/glass/" + root.win.fxW + "x" + root.win.fxH + "/" + root.win.radius + "/" + root.blur : ""
asynchronous: true
retainWhileLoading: true
cache: true
smooth: true
}
// Aero gloss: top highlight band
Rectangle {
visible: root.gloss
anchors { left: parent.left; right: parent.right; top: parent.top }
height: Math.min(parent.height * 0.5, 30)
topLeftRadius: root.topLeftRadius
topRightRadius: root.topRightRadius
gradient: Gradient {
GradientStop { position: 0; color: Qt.rgba(1, 1, 1, 0.07) }
GradientStop { position: 1; color: Qt.rgba(1, 1, 1, 0.0) }
}
}
// 1px inner white border at 8%
Rectangle {
visible: root.innerBorder
anchors.fill: parent
color: "transparent"
border.color: Theme.outline
border.width: 1
topLeftRadius: root.topLeftRadius
topRightRadius: root.topRightRadius
bottomLeftRadius: root.bottomLeftRadius
bottomRightRadius: root.bottomRightRadius
}
}