Skip to content

Instantly share code, notes, and snippets.

@kfigiela
Last active July 13, 2023 10:14
Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save kfigiela/9efcb64f8fa80f9aa7251bc61ca54cdc to your computer and use it in GitHub Desktop.
Save kfigiela/9efcb64f8fa80f9aa7251bc61ca54cdc to your computer and use it in GitHub Desktop.
Traktor Kontrol S5 S8 hacks

Warnings and instructions

  • You need to modify some Traktor files – do backup before you try – if files are incorrects screens become black.
  • You're doing that at your own risk!
  • If sth goes really bad – reinstall Traktor :-)
  • Traktor QML files are located by default in /Applications/Native Instruments/Traktor 2/Traktor.app/Contents/Resources/qml on Mac, on Windows look for qml in directory where Traktor is installed (I don't have windows machine around)…
  • You need real text-editor to modify files, you should try with Atom or Notepad++ to apply modifications
  • Files here are so called diff files, here is how to read them: http://stackoverflow.com/questions/2529441/how-to-read-the-output-from-git-diff

Hacks

Change waveform colors

See screenshot: https://www.native-instruments.com/forum/threads/s5-s8-needs-spectrum-waveform-colors-on-display.267253/#post-1475226

Display track BPM on BPM popup

In addition to currently set BPM it's good to know what's the original tempo.

Display beat counters in deck header

I don't really need cover image, this makes extra space for additional column: beats and beats to next cue

Display tempo change when track is synced or master

Displays S +5.0%, M +5.0% or +5.0% instead of SYNC, MASTER or +5.0%

Swap SHIFT for tempo coarse-fine adjustment

diff --git a/Screens/Views/Definitions/Colors.qml b/Screens/Views/Definitions/Colors.qml
index 295a850..04d4b9f 100755
--- a/Screens/Views/Definitions/Colors.qml
+++ b/Screens/Views/Definitions/Colors.qml
@@ -479,12 +479,16 @@ QtObject {
// Fuchsia - #ff0032
{ low1: rgba (255, 0, 50, 150), low2: rgba (255, 30, 60, 170),
mid1: rgba (255, 110, 110, 130), mid2: rgba (255, 125, 125, 160),
- high1: rgba (255, 210, 220, 140), high2: rgba (255, 220, 230, 160) }
+ high1: rgba (255, 210, 220, 140), high2: rgba (255, 220, 230, 160) },
+ // Spectrum-like colors
+ { low1: rgba (255, 50, 0, 150), low2: rgba (255, 70, 20, 170),
+ mid1: rgba ( 80, 245, 80, 110), mid2: rgba ( 95, 245, 95, 130),
+ high1: rgba ( 30, 85, 170, 255), high2: rgba ( 50, 100, 180, 255)}
]
function getDefaultWaveformColors()
{
- return waveformColorsMap[0];
+ return waveformColorsMap[17];
}
function getWaveformColors(colorId)
diff --git a/Screens/Views/Deck/DeckHeaderText.qml b/Screens/Views/Deck/DeckHeaderText.qml
index a387662..794659c 100755
--- a/Screens/Views/Deck/DeckHeaderText.qml
+++ b/Screens/Views/Deck/DeckHeaderText.qml
@@ -305,14 +305,22 @@ Text {
function getSyncStatusString() {
if ( !isLoaded )
return " ";
- else if (isMaster)
- return "MASTER";
+ // else if (isMaster)
+ // return "MASTER";
+ // else if (isInSync)
+ // return "SYNC";
+
+ var prefix = "";
+
+ if (isMaster)
+ prefix = "M ";
else if (isInSync)
- return "SYNC";
+ prefix = "S ";
+
// Show the decks current pitch value in the area of the Master/Sync indicator
// if a deck is neither synced nor set to maste (TP-8070)
- return getStableTempoString();
+ return prefix + getStableTempoString();
}
}
diff --git a/Screens/Views/Overlays/CenterOverlays/TempoAdjust.qml b/Screens/Views/Overlays/CenterOverlays/TempoAdjust.qml
index d005b91..c2ad93f 100755
--- a/Screens/Views/Overlays/CenterOverlays/TempoAdjust.qml
+++ b/Screens/Views/Overlays/CenterOverlays/TempoAdjust.qml
@@ -52,8 +54,9 @@ CenterOverlay {
// headline
Text {
anchors.top: parent.top
- anchors.horizontalCenter: parent.horizontalCenter
+ anchors.left: parent.left
anchors.topMargin: customMargins.topMarginCenterOverlayHeadline
+ anchors.leftMargin: 20
font.pixelSize: fonts.largeFontSize
color: colors.colorCenterOverlayHeadline
text: titleForBPMOverlay(masterDeckId.value, isSynced.value)
@@ -70,6 +73,17 @@ CenterOverlay {
color: colors.colorWhite
text: dispBpm.toFixed(2).toString()
}
+ // key
+ Text {
+ anchors.top: parent.top
+ anchors.right: parent.right
+ anchors.topMargin: customMargins.topMarginCenterOverlayHeadline
+ anchors.rightMargin: 20
+ font.pixelSize: fonts.largeFontSize
+ font.family : "Pragmatica"
+ color: colors.colorWhite
+ text: baseBpm.value.toFixed(2).toString()
+ }
// footline
Text {
diff --git a/Screens/Views/Deck/DeckHeader.qml b/Screens/Views/Deck/DeckHeader.qml
index d6ee6df..d35db7f 100755
--- a/Screens/Views/Deck/DeckHeader.qml
+++ b/Screens/Views/Deck/DeckHeader.qml
@@ -56,11 +56,11 @@ Item {
// NOTE: For now, we set fix states in the DeckHeader! But we wanna be able to
// change the states.
property int topLeftState: 0 // headerSettingTopLeft.value
- property int topMiddleState: hasTrackStyleHeader(deckType) ? 12 : 30 // headerSettingTopMid.value
+ property int topMiddleState: hasTrackStyleHeader(deckType) ? 13 : 30 // headerSettingTopMid.value
property int topRightState: 23 // headerSettingTopRight.value
property int bottomLeftState: 1 // headerSettingMidLeft.value
- property int bottomMiddleState: hasTrackStyleHeader(deckType) ? 11 : 29 // headerSettingMidMid.value
+ property int bottomMiddleState: hasTrackStyleHeader(deckType) ? 14 : 29 // headerSettingMidMid.value
property int bottomRightState: 25 // headerSettingMidRight.value
height: largeHeaderHeight
@@ -201,7 +201,7 @@ Item {
elide: Text.ElideRight
font.pixelSize: fonts.largeFontSize // set in state
anchors.top: top_line.bottom
- anchors.left: cover_small.right
+ anchors.left: parent.left
anchors.topMargin: _intSetInState // set by 'state'
anchors.leftMargin: _intSetInState // set by 'state'
@@ -220,7 +220,7 @@ Item {
elide: Text.ElideRight
font.pixelSize: fonts.middleFontSize
anchors.top: top_line.bottom
- anchors.left: cover_small.right
+ anchors.left: parent.left
anchors.topMargin: 18
anchors.leftMargin: 5
Behavior on anchors.leftMargin { NumberAnimation { duration: speed } }
@@ -267,6 +267,44 @@ Item {
Behavior on opacity { NumberAnimation { duration: speed } }
}
+ // bottom_middle_text: REMAINING TIME
+ DeckHeaderText {
+ id: top_middle_text2
+ deckId: deck_Id
+ explicitName: ""
+ maxTextWidth : 80
+ textState: 12
+ font.family: "Pragmatica" // is monospaced
+ color: textColors[deck_Id]
+ elide: Text.ElideRight
+ font.pixelSize: fonts.middleFontSize
+ horizontalAlignment: Text.AlignRight
+ anchors.top: top_line.bottom
+ anchors.right: parent.right
+ anchors.topMargin: _intSetInState // set by 'state'
+ anchors.rightMargin: 178 // set by 'state'
+ Behavior on anchors.topMargin { NumberAnimation { duration: speed } }
+ Behavior on anchors.rightMargin { NumberAnimation { duration: speed } }
+ }
+ // bottom_middle_text: ELAPSED TIME
+ DeckHeaderText {
+ id: bottom_middle_text2
+ deckId: deck_Id
+ explicitName: ""
+ maxTextWidth : 80
+ textState: 113
+ font.family: "Pragmatica" // is monospaced
+ color: darkerTextColors[deck_Id]
+ elide: Text.ElideRight
+ opacity: _intSetInState // set by 'state'
+ font.pixelSize: fonts.middleFontSize
+ horizontalAlignment: Text.AlignRight
+ anchors.top: top_line.bottom
+ anchors.right: parent.right
+ anchors.topMargin: 20
+ anchors.rightMargin: 178
+ Behavior on opacity { NumberAnimation { duration: speed } }
+ }
// top_right_text: BPM
DeckHeaderText {
id: top_right_text
@@ -393,6 +431,7 @@ Item {
color: "black"
anchors.fill: cover_small
anchors.margins: -1
+ visible: false
}
DropShadow {
@@ -407,6 +446,7 @@ Item {
color: "#000000"
transparentBorder: true
source: blackBorder
+ visible: false
}
Rectangle {
@@ -421,6 +461,7 @@ Item {
// if no cover can be found: blue / grey background (set in parent). Otherwise transparent
opacity: (headerPropertyCover.value == "") ? 1.0 : 0.0
//visible: headerState == "large" && (opacity == 1.0)
+ visible: false
color: coverBgEmptyColors[deck_Id]
Behavior on opacity { NumberAnimation { duration: speed } }
Behavior on width { NumberAnimation { duration: speed } }
@@ -467,6 +508,7 @@ Item {
width: height
anchors.top: cover_small.top
anchors.left: cover_small.left
+ visible: false
}
@@ -493,7 +535,7 @@ Item {
anchors.top: top_line.bottom
anchors.topMargin: 3
anchors.right: parent.right
- anchors.rightMargin: 178
+ anchors.rightMargin: 246
width: 30
height: 30
@@ -642,11 +684,13 @@ Item {
PropertyChanges { target: top_middle_text; font.pixelSize: fonts.middleFontSize; anchors.topMargin: 1 }
+ PropertyChanges { target: top_middle_text2; font.pixelSize: fonts.middleFontSize; anchors.topMargin: 1 }
PropertyChanges { target: top_right_text; font.pixelSize: fonts.middleFontSize; anchors.topMargin: 1 }
PropertyChanges { target: bottom_left_text; opacity: 0; }
PropertyChanges { target: bottom_warning_text; opacity: 0; }
PropertyChanges { target: bottom_middle_text; opacity: 0; }
+ PropertyChanges { target: bottom_middle_text2; opacity: 0; }
PropertyChanges { target: bottom_right_text; opacity: 0; }
},
State {
@@ -659,10 +703,12 @@ Item {
PropertyChanges { target: top_warning_text; font.pixelSize: fonts.largeFontSize; anchors.topMargin: -2 }
PropertyChanges { target: top_middle_text; font.pixelSize: fonts.largeFontSize; anchors.topMargin: 1 }
+ PropertyChanges { target: top_middle_text2; font.pixelSize: fonts.largeFontSize; anchors.topMargin: 1 }
PropertyChanges { target: top_right_text; font.pixelSize: fonts.largeFontSize; anchors.topMargin: 1 }
+
PropertyChanges { target: bottom_middle_text; opacity: 1; }
+ PropertyChanges { target: bottom_middle_text2; opacity: 1; }
PropertyChanges { target: bottom_left_text; opacity: 1; anchors.leftMargin: (deckType.description === "Live Input" || directThru.value) ? -1 : 5}
-
PropertyChanges { target: bottom_right_text; opacity: 1; }
}
]
diff --git a/CSI/Common/Deck_S8Style.qml b/CSI/Common/Deck_S8Style.qml
index 1ff662f..f558dfd 100755
--- a/CSI/Common/Deck_S8Style.qml
+++ b/CSI/Common/Deck_S8Style.qml
@@ -1370,8 +1370,8 @@ Module
enabled: focusedDeckId == 1
Wire { from: "%surface%.back"; to: "decks.1.tempo.reset" }
- Wire { from: "%surface%.browse"; to: "decks.1.tempo.fine"; enabled: !module.shift }
- Wire { from: "%surface%.browse"; to: "decks.1.tempo.coarse"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.1.tempo.fine"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.1.tempo.coarse"; enabled: !module.shift }
}
// Deck B
@@ -1380,8 +1380,8 @@ Module
enabled: focusedDeckId == 2
Wire { from: "%surface%.back"; to: "decks.2.tempo.reset" }
- Wire { from: "%surface%.browse"; to: "decks.2.tempo.fine"; enabled: !module.shift }
- Wire { from: "%surface%.browse"; to: "decks.2.tempo.coarse"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.2.tempo.fine"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.2.tempo.coarse"; enabled: !module.shift }
}
// Deck C
@@ -1390,8 +1390,8 @@ Module
enabled: focusedDeckId == 3
Wire { from: "%surface%.back"; to: "decks.3.tempo.reset" }
- Wire { from: "%surface%.browse"; to: "decks.3.tempo.fine"; enabled: !module.shift }
- Wire { from: "%surface%.browse"; to: "decks.3.tempo.coarse"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.3.tempo.fine"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.3.tempo.coarse"; enabled: !module.shift }
}
// Deck D
@@ -1400,8 +1400,8 @@ Module
enabled: focusedDeckId == 4
Wire { from: "%surface%.back"; to: "decks.4.tempo.reset" }
- Wire { from: "%surface%.browse"; to: "decks.4.tempo.fine"; enabled: !module.shift }
- Wire { from: "%surface%.browse"; to: "decks.4.tempo.coarse"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.4.tempo.fine"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.4.tempo.coarse"; enabled: !module.shift }
}
}
diff --git a/CSI/S5/Mixer.qml b/CSI/S5/Mixer.qml
index 65c880e..bc057a0 100755
--- a/CSI/S5/Mixer.qml
+++ b/CSI/S5/Mixer.qml
@@ -8,8 +8,8 @@ Module
// Master Clock
MasterClock { name: "MasterTempo" }
- Wire { from: "%surface%.mixer.tempo"; to: "MasterTempo.coarse"; enabled: shift }
- Wire { from: "%surface%.mixer.tempo"; to: "MasterTempo.fine"; enabled: !shift }
+ Wire { from: "%surface%.mixer.tempo"; to: "MasterTempo.coarse"; enabled: !shift }
+ Wire { from: "%surface%.mixer.tempo"; to: "MasterTempo.fine"; enabled: shift }
// Channels
diff --git a/CSI/S5/S5Deck.qml b/CSI/S5/S5Deck.qml
index 32716f3..54a7689 100755
--- a/CSI/S5/S5Deck.qml
+++ b/CSI/S5/S5Deck.qml
@@ -1566,8 +1566,8 @@ Module
enabled: focusedDeckId == 1
Wire { from: "%surface%.back"; to: "decks.1.tempo.reset" }
- Wire { from: "%surface%.browse"; to: "decks.1.tempo.fine"; enabled: !module.shift }
- Wire { from: "%surface%.browse"; to: "decks.1.tempo.coarse"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.1.tempo.fine"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.1.tempo.coarse"; enabled: !module.shift }
}
// Deck B
@@ -1576,8 +1576,8 @@ Module
enabled: focusedDeckId == 2
Wire { from: "%surface%.back"; to: "decks.2.tempo.reset" }
- Wire { from: "%surface%.browse"; to: "decks.2.tempo.fine"; enabled: !module.shift }
- Wire { from: "%surface%.browse"; to: "decks.2.tempo.coarse"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.2.tempo.fine"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.2.tempo.coarse"; enabled: !module.shift }
}
// Deck C
@@ -1586,8 +1586,8 @@ Module
enabled: focusedDeckId == 3
Wire { from: "%surface%.back"; to: "decks.3.tempo.reset" }
- Wire { from: "%surface%.browse"; to: "decks.3.tempo.fine"; enabled: !module.shift }
- Wire { from: "%surface%.browse"; to: "decks.3.tempo.coarse"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.3.tempo.fine"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.3.tempo.coarse"; enabled: !module.shift }
}
// Deck D
@@ -1596,8 +1596,8 @@ Module
enabled: focusedDeckId == 4
Wire { from: "%surface%.back"; to: "decks.4.tempo.reset" }
- Wire { from: "%surface%.browse"; to: "decks.4.tempo.fine"; enabled: !module.shift }
- Wire { from: "%surface%.browse"; to: "decks.4.tempo.coarse"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.4.tempo.fine"; enabled: module.shift }
+ Wire { from: "%surface%.browse"; to: "decks.4.tempo.coarse"; enabled: !module.shift }
}
}
@theo-dim
Copy link

theo-dim commented Aug 9, 2016

I added a third channel, low3, mid3, high3 but am not sure if it works or not. Is the software enabled for such an alteration?

@davydkov
Copy link

davydkov commented Jun 6, 2017

Hi, can you please share, whats the best workflow to debug layouts? Do I need to restart Traktor after making changes?

@jtility
Copy link

jtility commented Apr 23, 2019

Recently upgraded to Traktor Pro 3 and ran into some trouble when deploying the display-track-tempo-on-tempo-adjust-screen.diff mod here. I was able to solve it by adding the following code after line 21 (as the first value in the Key text block):

readonly property real baseBpm: baseBpm.value.toFixed(2).toString()

One other note, looks like the Views file referenced in a couple of mods here now lives in Screens > [controller name] (instead of just Screens).

@alexlazarian
Copy link

if you wanna get Rekordbox style colors with RGB then use this
{ low1: rgba (0, 81, 234, 140), low2: rgba (0, 81, 234, 160), mid1: rgba (195, 95, 0, 255), mid2: rgba (195, 95, 0, 255), high1: rgba (253, 235, 211, 255), high2: rgba (253, 235, 211, 255) }

@dkingggg
Copy link

My S5's knob to "play preview" is not working, I can turn the knob to move the track or set a loop size but cannot click the knob anymore, it broke. I am looking to map the button function from the knob to the "deck" button. Can this be done? can someone help me (for money)?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment