Can AbleSet Button Be Set to Toggle Instead of Momentary?

Hi, I’d like to ask if the Button in AbleSet can be configured to work as a toggle instead of momentary.

Right now it only behaves as momentary (active when pressed, inactive when released). Is there a way to make it stay on/off with each press?

Thanks!

Hey @GOODSHOW,

You can definitely make a button look and behave like a toggle by combining a toggle OSC command with a dynamic background color that reflects the current state.

The Loop Button preset in canvas is actually a great example of this:

  • Button Type: OSC
  • OSC Command on Press: /loop/toggle
  • Background Color (Dynamic): ${osc("/setlist/loopEnabled") ? "blue-800" : "blue-950"}

Many OSC commands accept toggle as an argument (/mixer/click/mute toggle, /click/solo toggle, etc.), so you can apply the same pattern to mute, solo, recording, and similar.

If you want to toggle something that doesn’t have a built-in OSC state, set the Button Type to Script and use a Shared Variable instead:

setShared("myToggle", !shared("myToggle"));

And for the dynamic color:

${shared("myToggle") ? "green-600" : "green-950"}

You can see this in action with the mute button example in the official tutorial.

Let me know if that works on your end!

1 Like

hi there! @agustinvolpe im new to canvas and just learning the custom button feature – i am looking for a toggle button to toggle the click on/off

additional unrelated question – on canvas, how do i zoom in on the set list panel? when i enlarge it, it just making the panel large but the text size is the same

Hey @totpband,

For the Click on/off toggle, there’s actually a built-in preset for this. No manual setup needed:

  1. Open your Canvas in edit mode
  2. Press ⌘K (or click the + button) to open the element picker
  3. Search for “Click Track Mute Toggle” and add it

The button will toggle the click on/off and change color to reflect the current state.

If you’d rather build it from scratch (e.g. to customize the look), add a Button element, set the type to OSC, and use:

  • OSC Command on Press: /mixer/click/mute toggle
  • Background Color → Dynamic: ${osc("/mixer/click/muted") ? "red-800" : "red-950"}
  • Label → Dynamic: ${osc("/mixer/click/muted") ? "CLICK OFF" : "CLICK ON"}
    Adjust label text to taste.

Setlist panel font size

The Setlist element in Canvas doesn’t have a built-in font size control — resizing the panel only changes its dimensions, not the text size. You can target text size with Custom Styles (CSS).

Open your styles.css file (AbleSet icon tray → :gear:Show Global Custom Styles) and add:

.setlist-entry button.title {
  font-size: 1.3rem;
}

Adjust the value to your liking. Note that this will also affect the text size in the main Setlist view, not just the Canvas element.

Hope that helps!

found the preset – however it does not appear to be working properly? i’ve uploaded a video and you can see when i click the button, nothing happens to the ableton click on the top right

looking for a button that toggles on/off of the internal click of ableton

Hey @totpband,

Ah, got it! That clears it up.

Just to be clear: the Click Track Mute Toggle preset controls a click track inside your Ableton project — specifically, a track named CLICK, or any track/group flagged with +CLICK / +G:CLICK. It mutes that track via AbleSet’s mixer. It doesn’t touch Live’s internal metronome.

That said, you can control Live’s metronome from Canvas, but it requires a third-party control surface script called AbletonOSC.


Step 1: Install AbletonOSC

It’s a free, open-source Control Surface Script that exposes Live’s API over OSC.

  1. Download the latest zip from the AbletonOSC GitHub repo and unzip it.
  2. Rename the unzipped folder from AbletonOSC-master to AbletonOSC.
  3. Copy the folder to your Ableton User Library Remote Scripts folder:
    • macOS: ~/Music/Ableton/User Library/Remote Scripts
    • Windows: \Users\[username]\Documents\Ableton\User Library\Remote Scripts
  4. Restart Ableton Live.
  5. Open Preferences → Link/Tempo/MIDI, and in any of the Control Surface dropdowns, select AbletonOSC. Live should show: “AbletonOSC: Listening for OSC on port 11000”.

Step 2: Add the toggle button to your Canvas

  1. In Canvas edit mode, add a Button element.
  2. Set Button Type to Script.
  3. Paste this into Script on Press:
const enabled = shared("liveMetronomeOn", false);
const next = !enabled;

setShared("liveMetronomeOn", next);
sendOsc("127.0.0.1:11000/live/song/set/metronome", next);
  1. For dynamic feedback, enable Background Color → Dynamic and use:
${ shared("liveMetronomeOn", false) ? "emerald-500" : "emerald-900" }
  1. Optionally, set the Icon to metronome for a nice visual.

Note: this approach tracks the state with a shared variable, so it works perfectly as long as the metronome is toggled from this button. If you also toggle Live’s metronome directly from Ableton (or another source), the button’s color may get out of sync. Let me know if that’s a concern, we can set up a more robust version that reads the real state from Live in real time.

Would that work for your use case?

hi yes, i would like a more robust version – i have automation running to turn the click on/off during the set!

mostly, i want a visual button showing the status when i glance over at the computer, but also an easy clickable button in case i need to turn the click on/off manually if need be.

Hey @totpband,

Since you’ve got automation toggling the click, we need the button to read the actual state of Live’s metronome in real time, not just track its own presses. Here’s how to do it:


Step 1: Set up an OSC Connection for AbletonOSC

Go to Settings → MIDI Mapping, OSC & Scripting → OSC Settings → Add New Connection and fill in:

  • Name: AbletonOSC
  • Send Address: 127.0.0.1:11000
  • Listen Port: 11001
  • OSC on Create: /live/song/start_listen/metronome
  • OSC on Destroy: /live/song/stop_listen/metronome

The start_listen command tells AbletonOSC to push the metronome state to AbleSet every time it changes, whether triggered by your automation, by Ableton’s UI, or by the button itself. AbleSet caches that value and makes it readable from Canvas.


Step 2: Update the Canvas button

Replace the previous Script on Press with this:

// Read the real metronome state from Live and flip it
const current = osc(":AbletonOSC/live/song/get/metronome");
sendOsc(":AbletonOSC/live/song/set/metronome", !current);

And update the Background Color → Dynamic template to read the real state:

${osc(":AbletonOSC/live/song/get/metronome") ? "emerald-500" : "emerald-900"}

Optionally, for an at-a-glance text indicator, enable Label → Dynamic and use:

${osc(":AbletonOSC/live/song/get/metronome") ? "CLICK ON" : "CLICK OFF"}

The button should Noe reflect Live’s metronome state regardless of what triggered the change, and tapping should flip the actual state. You can also remove the old liveMetronomeOn shared variable.

Let me know how it goes!

hi there!

not sure what i might be doing wrong but here is where i am at when copy/pasting everything in! nothing is happening however, i could have messed something up – let me know! thank you!!