Text Communications Tab for Performance or new Canvas views?

Seeing as Ableset can be connected between multiple devices - I thought a cool and extremely useful idea would be to have the option to be able to view text communications that someone can type in live in the moment from another machine.

I feel this would be super powerful - let’s say front of house would like something specific turned down in your tracks. They type in - “Perc down please” it appears on anyone’s machine with Ableset open that have toggled on the ‘Text Communications’ (Insert any title appropriate)

It could work pretty well in the new Canvas mode as well as you can very specifically place where you want your ‘Text communications’ to be.

I guess added extras would be the ability to

  • lock off some machines/users from typing into the feature.
  • Working out how long messages stay present in the view (whatever is most intuitive/customisable somehow?)
  • Clicking on the message changes its colour to show it has been received? (Bonus for midi mappable)
  • Any message that hasn’t been clicked to show received has that glowing effect like when loop is active?
  • Toggle on/off message received options

My personal belief is that this would take Ableset to an incredibly powerful level - even more so than it already is.

Thank you for all you do Leo!

I would like to jump in and say that this would be a great feature if it’s possible to text between AbleSet connected devices.

Appreciate!
And I honestly think Leo would find a way to implement this in a far more intuitive way with greater UI than I can even imagine haha :sweat_smile:

This is a GREAT idea. Would love this

1 Like

Hey @Simon, welcome to the forum!

That’s a great idea, I imagine this to be very useful in larger setups.

I’ve added it to my todo list and will check how easy this would be to implement. In the meantime, please let me know if you have any further ideas related to this feature :slight_smile:

3 Likes

Hey all, this feature can now be built using Canvas starting with AbleSet 3.0.0-beta.12. To do this, add a new input field to the canvas, and set the linked variable to message. Then, in the “Script on Enter” field, enter the following script:

sendOsc("/notify/big", "all", value);
setLocal("message", "");

This will show the message you entered on all connected devices and clears the input field when you press enter. Instead of “all”, you can also specify the names of devices that should receive the message, and instead of “/notify/big”, you can also use “/notify/toast” for a less bold notification style. You can find out more in the OSC docs.

You can also add a button that does the same as pressing enter by setting its type to “Script” and entering this in “Script on Press”:

sendOsc("/notify/big", "all", local("message"));
setLocal("message", "");

You can learn more about scripting in the docs.

Let me know if this works for your use case. I’m looking forward to your feedback! :slight_smile:

2 Likes

Loving exploring this feature Leo, thanks for implementing

How might I go about directing notifications at a specific canvas rather than a hostname or ip? This way relevant depts see notis dependant on their current canvas view

Thanks so much

Hey @mujo.live, sorry for the late reply on this one!

I’ll release a new beta soon that will allow you to target devices based on the page they’re currently viewing, so you could display notifications on all devices that are currently on the canvas “Main” like this:

sendOsc("/notify/big", "page:canvas/main", local("message"));

I’ll try to get a few other improvements into the next beta before releasing it, but I thought I’d let you know ahead of time to check if that would work for your use case :slight_smile:

Hey, I just tried this feature a bit - is there any way to decide how long this message is shown? As it is, it seems to be only visible for a few seconds and then disappearing again, however, I’d rather have this visible for a bit longer - or having a button that’s toggling “show” and hide. And is it possible to show the message e.g. in red, maybe not even greying out the rest of the screen?

My application would be: design a very basic canvas for our FOH technician - one field to enter text, and a button named “show message” turning green when it is showing, and then black again when switching off. This way, he can send simple “only 5min left” commands in red via his phone on the stage, and turning off as soon as we give him a sign that we’ve recognized. This message should only overlay all screens, which should not fully “grey out”.

Hey Sebastian!

Yes, you can control how long the on-screen message stays visible, its color, and also turn it into a proper show / hide toggle.


1) Message duration (default vs custom)

For a red full-screen message, you can use:

/notify/big all "Only 5 min left" 7000 red
  • The duration is in milliseconds (7000 = 7 seconds).

  • If you omit the duration, it defaults to 5000 ms.


2) Show / Hide toggle via Canvas

You can achieve a clean toggle using a shared variable, so every connected device reflects the same state.

I’m attaching a .js file that includes both big and toast button styles, but here’s the core setup in case anyone finds it useful:

Show Message.json (2.2 KB)

Input Field

  • Add an Input Field element

  • Set Linked Variable to:

foh_msg_text
  • In Script On Enter:
setShared("foh_msg_text", value);

Add a Button element – Script on Press

const isOn = shared("foh_msg_on", false);

if (isOn) {
  // Hide
  sendOsc("/notify/big/clear", "all");
  setShared("foh_msg_on", false);
} else {
  const msg =
    local("foh_msg_text", null) ??
    shared("foh_msg_text", "Only 5min left");

  sendOsc("/notify/big", "all", msg, 30000, "red");
  setShared("foh_msg_on", true);
}

Button background color, set to dynamic:

${shared("foh_msg_on") ? "green-300" : "green-900"}

This way:

  • FOH types the message

  • Presses Show Message → message appears in red

  • Button turns green while active

  • Press again → message is cleared


3) About “no grey-out / non-blocking messages”

/notify/big is designed as a full-screen overlay, so it will dim the rest of the screen while visible.

If you want something less intrusive, the best built-in option is a toast notification.
The same toggle logic works; you’d just change the OSC command:

const isOn = shared("foh_msg_on", false);

if (isOn) {
  sendOsc("/notify/big/clear", "all");
  setShared("foh_msg_on", false);
} else {
  const msg = shared("foh_msg_text", "Only 5 min left");
  sendOsc("/notify/toast", "all", "FOH", msg, 0);
  setShared("foh_msg_on", true);
}

Hope this helps!

Great - works :slight_smile:

and one last question: sending to multiple canvas, but not all. Can I adapt this logic to be sent to several canvases?

/notify/big page:canvas/canvas-name

Ah, and how can I configure a “input field” so the text gets line breaks within the input field? As it is, it just writes beyond the field borders and is not visible anymore….

Hey Sebastian, glad it’s working!

Yes, to send to multiple canvases (but not all), it’s the same logic, you just swap the target from "all" to the specific page targets you want.

You can send multiple OSC messages (one per target), for example:

Big
const targets = [
  "page:canvas/canvas-name-1",
  "page:canvas/canvas-name-2",
];

const isOn = shared("foh_msg_on", false);

if (isOn) {
  for (const t of targets) {
    sendOsc("/notify/big/clear", t);
  }
  setShared("foh_msg_on", false);
} else {
  const msg =
    local("foh_msg_text", null) ??
    shared("foh_msg_text", "Only 5min left");

  for (const t of targets) {
    sendOsc("/notify/big", t, msg, 30000, "red");
  }
  setShared("foh_msg_on", true);
}

Or

Toast
const targets = [
  "page:canvas/canvas-name-1",
  "page:canvas/canvas-name-2",
];

if (isOn) {
  setShared("foh_msg_on", false);
} else {
  const msg =
    local("foh_msg_text", null) ??
    shared("foh_msg_text", "Only 5min left");

  for (const t of targets) {
    sendOsc("/notify/toast", t, "FOH", msg, 30000);
  }
  setShared("foh_msg_on", true);
}

For multi-line text input, the Text Input element has a Multi-line option in the element’s Input Type drop-down menu.

Hope that helps!