Skip to content

OSC documentation

Philippe Chaurand edited this page Sep 20, 2025 · 90 revisions



πŸ“¦ Β  THIS DOCUMENTATION IS ONLY FOR MILLUMIN V5

OSC documentation for Millumin V4 is available here.

OSC documentation for Millumin V3 is available here.

OSC documentation for Millumin V2 is available here.

OSC documentation for Millumin V1 is available here.



OSC is a communication protocol that works over the network. It is easy-to-read and very versatile.
Millumin uses OSC messages to receive orders : for TouchOSC layouts, or to create an application that collaborates with Millumin. It also sends messages (see feedback section).

This protocol is supported by many applications on computers or mobile devices.
For example, by TouchOSC or OpenStageControl. See this tutorial.



Creating an OSC message is simple, please refer to the Developer-Kit to get examples in many technologies.

In brief, an OSC message has 2 parts : the /address and the [arguments].
Example to set the opacity to 75%, of the layer named "test" :

/test/opacity [0.75]

πŸ”₯ Keep in mind that in most OSC softwares or libraries, address and arguments are defined separately.



To control Millumin, it is up to you to use /millumin prefix :

/millumin/test/opacity [0.75] is the same as /test/opacity [0.75]

πŸ”₯ However, feedback messages will always have the /millumin prefix.



Lastly, Millumin's OSC API is case insensitive :

/Test/Opacity [0.75] is the same as /test/opacity [0.75]



If you want to quickly test OSC, simply open a Terminal and type the following command to change the opacity of the selected layer to 50% πŸ‘

echo -n "/selectedLayer/opacity 0.5" | nc -4u -w1 127.0.0.1 5000

Please note that such a command in the Terminal will not send OSC, but a "string" that Millumin will interpreat as OSC.




πŸ“š Β  Content




You can launch or stop a specific column :

  • /action/launchOrStopColumn [index or "name"]
  • /action/launchColumn [index or "name"]
  • /action/stopColumn

For example :

  • /action/launchColumn [11] to launch the 11th column
  • /action/launchColumn ["test"] to launch the column named "test"

To launch the previous or next column :

  • /action/launchPreviousColumn
  • /action/launchNextColumn

To play/pause all media in the dashboard :

  • /action/pause
  • /action/play
  • /action/playOrPause
  • /action/goToTime [10] to play all media at 10 seconds
  • /action/goToTime [-10] to play all media at 10 seconds before the end

To play/pause the timeline that you are editing :

  • /action/play
  • /action/pause
  • /action/playOrPause
  • /action/goToTime [10] to play the timeline at 10 seconds
  • /action/goToTime [-10] to play the timeline at 10 seconds before the end
  • /action/goToTimelineSegment ["name"]

To select a board :

  • /action/selectBoard [index or "name"]

To select an element :

  • /action/selectLayer [index or "name"]
  • /action/selectLight [index or "name"]

To change the masters :

  • /masterVideo [0.5]
  • /masterAudio [0.7]
  • /masterDMX [0.9]

To move the brush-tool (normalized coordinates) :

  • /action/brush [0.5,0.5] to move the brush in the middle with a maximum pressure (1)
  • /action/brush [0.1,0.1,0.7] to move the brush with a pressure of 0.7

To enter/exit fullscreen :

  • /action/enterFullscreen
  • /action/exitFullscreen

To display/hide test-card :

  • /action/displayTestCard
  • /action/hideTestCard

To disable/enable workspace :

  • /action/disableWorkspace
  • /action/enableWorkspace

To open/save a project :

  • /action/openProject ["/path/to/my/project.millumin"]
  • /action/saveProject
  • /action/saveProject ["/path/to/my/project.millumin"]

You can quit Millumin via :

  • /action/quit

To send a 'ping', so Millumin returns multiple OSC messages, that describe the state for all the layers :

  • /ping




To manage an element (layer, light, ...), your OSC address must identify it. You have different alternative, depending on how you manage your elements :

  • /myElementName/... to target the element named "myElementName"
  • /layer:myLayerName/... to target the layer named "myLayerName"
  • /light:myLightName/... to target the light named "myLightName"
  • /index:99/... to target the element at index 99 (see Preferences to display the indexes)
  • /selectedLayer/... to target the selected layer in the interface (in orange)
  • /selectedLight/... to target the selected light in the interface (in orange)

OSC messages are case insensitive ("selectedLayer" is the same as "selectedlayer")


Here are some properties that can be used for layers :

  • /selectedLayer/opacity [0.75] to update opacity at 75%
  • /selectedLayer/position/xy [12,21] to move at [12,21] (short form is /selectedLayer/xy)
  • /selectedLayer/position/x [12] to move on X at 12px (short form is /selectedLayer/x)
  • /selectedLayer/position/y [21] to move on Y at 21px (short form is /selectedLayer/y)
  • /selectedLayer/rotation [90] to rotate at 90Β°
  • /selectedLayer/scale [0.5] to scale at 50%

To move mapping corners :

  • /selectedLayer/mapping/topLeft [12,21] to move corner at [12,21]
  • /selectedLayer/mapping/topLeft/x [12] to move corner on X at 12px
  • /selectedLayer/mapping/topLeft/y [21] to move corner on Y at 21px
  • /selectedLayer/mapping/topRight [12,21]
  • /selectedLayer/mapping/bottomRight [12,21]
  • /selectedLayer/mapping/bottomLeft [12,21]

To change an effect parameter (the effect is identified by its index) :

  • /selectedLayer/effect1/red [0.1] to change 'red' parameter of first effect
  • /selectedLayer/effect3/blue [0.1] to change 'blue' parameter of third effect

To change the intensity of a light :

  • /selectedLight/intensity [127] to update intensity at 50%
  • /light:1/intensity [255] to update intensity at 100% of light called "1"

To work relatively (add a number to a value), use the suffix /+ or /- :

  • /selectedLayer/position/x/+ [10] to make a subtle move on X by 10px
  • /selectedLayer/scale/- [0.01] to lower the scale of 1%

To select a layer through a property-mecanism :

  • /layer:myLayerName/selected [1] to select layer named "myLayerName"
  • /layer:myLayerName/selected [0] to deselect layer named "myLayerName"




Media can be targeted directly by their name, or by identifying the layer first :

  • /Movie.mov/... to target the media named "Movie.mov"
  • /selectedLayer/media/... to target current media of selected layer

Here are the properties that can be used with movies :

  • /Movie.mov/time [10] to move playhead at 10 seconds
  • /selectedLayer/media/time [10] to move playhead at 10 seconds
  • /selectedLayer/media/time ["01:02:03.400"] to move playhead at 1 hour, 2 minutes, 3 seconds, 400 milliseconds
  • /selectedLayer/media/normalizedTime [0.5] to move playhead in the middle of the movie
  • /selectedLayer/media/speed [0.5] to change speed to 50%

To update a text media :

  • /selectedLayer/media/text ["my new blabla"] to set the text to "my new blabla"

To update Quartz patch inputs :

  • /selectedLayer/media/myQuartzInput [0.5] to update Quartz input named "myQuartzInput" to 0.5

To start/pause/stop a media :

  • /selectedLayer/startMedia to restart current media
  • /selectedLayer/startMedia [7] to start media at 7th column
  • /selectedLayer/startMedia ["Movie.mov"] to start media named "Movie.mov"
  • /selectedLayer/pauseMedia to pause current media
  • /selectedLayer/startOrPauseMedia to start/pause current media
  • /selectedLayer/stopMedia to stop current media




To import a file in dashboard :

  • /selectedLayer/import ["path to file"] to import the file on selected layer
  • /selectedLayer/import ["path to file", 7] to import the file on 7th column
  • /selectedLayer/importAndStart ["path to file", 7] to import then start the file on 7th column
  • /selectedLayer/import ["path to folder"] to import all files located in the folder
  • /selectedLayer/import [""] to clean all media
  • /selectedLayer/import ["", 7] to clean the media on 7th column




Millumin sends OSC messages, so third-party application can catch them. Be sure 'feedback' is activated in Millumin : open the Device manager (CMD+K), then select the "OSC" tab, and check "API feedback".
πŸ”₯ Please keep in mind that all 'feedback' messages are prefixed with /millumin

When a column is launched/stopped, Millumin sends :

  • /millumin/board/launchedColumn [index,"name"] (last argument is absent if column has no name)
  • /millumin/board/stoppedColumn [index,"name"] (last argument is absent if the column has no name)

When a media is started/paused/stopped, Millumin sends :

  • /millumin/layer:myLayer/mediaStarted [index,"name",duration] (last argument is absent if media has no duration)
  • /millumin/index:99/mediaStarted [index,"name",duration] (last argument is absent if media has no duration)
  • /millumin/layer:myLayer/mediaPaused [index,"name"]
  • /millumin/index:99/mediaPaused [index,"name"]
  • /millumin/layer:myLayer/mediaStopped [index,"name"]
  • /millumin/index:99/mediaStopped [index,"name"]

Following properties are tracked : opacity, xy, rotation, scale, mapping/topLeft, mapping/topRight, mapping/bottomRight, mapping/bottomLeft, intensity, ... So when a property is updated, Millumin sends :

  • /millumin/layer:myLayerName/opacity [0.8] to notify that opacity was updated to 80%
  • /millumin/index:99/... [value]
  • /millumin/light:myLightName/intensity [0.5] to notify that intensity was updated to 50%

Specifically for media :

  • /millumin/selectedLayer/media/time [value,duration]
  • /millumin/selectedLayer/media/normalizedTime [value]`
  • /millumin/selectedLayer/media/speed [value]`

When selection is changed, Millumin sends :

  • /millumin/layer:myLayerName/selected to notify that layer named "myLayerName" was selected
  • /millumin/light:myLightName/selected to notify that light named "myLightName" was selected
  • /millumin/index:99/selected to notify that element at index 99 was selected

Via the suffix /?, you can ask Millumin to send feedback about a specific property :

  • /myElementName/opacity/? to ask about opacity for the element named "myElementName"
  • /layer:myLayerName/position/? to ask about position for the layer named "myLayerName"
  • /light:myLightName/intensity/? to ask about rotation for the light named "myLightName"
  • /index:99/scale/? to ask about scale for the element at index 99
  • /selectedLayer/mapping/topLeft/? to ask about top-left corner for the selected layer
  • /selectedLight/intensity/? to ask about intensity for the selected light




Addresses :

  • /action/launchOrStopColumn
  • /action/launchColumn
  • /action/stopColumn
  • /action/launchPreviousColumn
  • /action/launchNextColumn
  • /action/pause
  • /action/play
  • /action/playOrPause
  • /action/goToTime
  • /action/goToTimelineSegment
  • /action/selectBoard
  • /action/selectLayer
  • /action/selectLight
  • /masterVideo
  • /masterAudio
  • /masterDMX
  • /action/brush
  • /action/enterFullscreen
  • /action/exitFullscreen
  • /action/displayTestCard
  • /action/hideTestCard
  • /action/disableWorkspace
  • /action/enableWorkspace
  • /action/openProject
  • /action/saveProject
  • /action/quit
  • /ping
  • /myElementName/opacity
  • /layer:myLayerName/position
  • /light:myLightName/intensity
  • /index:99/rotation
  • /selectedLayer/scale
  • /selectedLight/intensity
  • /selectedLayer/mapping/topLeft
  • /selectedLayer/mapping/topRight
  • /selectedLayer/mapping/bottomRight
  • /selectedLayer/mapping/bottomLeft
  • /selectedLayer/effect1/myParameterName
  • /layer:myLayerName/selected
  • /MyMedia.mov/time
  • /selectedLayer/media/time
  • /selectedLayer/media/normalizedTime
  • /selectedLayer/media/speed
  • /selectedLayer/media/text
  • /selectedLayer/media/myQuartzInput
  • /selectedLayer/startMedia
  • /selectedLayer/pauseMedia
  • /selectedLayer/startOrPauseMedia
  • /selectedLayer/stopMedia
  • /selectedLayer/import
  • /selectedLayer/importAndStart
  • /millumin/board/columnLaunched
  • /millumin/board/columnStopped
  • /millumin/selectedLayer/mediaStarted
  • /millumin/selectedLayer/mediaPaused
  • /millumin/selectedLayer/mediaStopped

Suffixes :

  • /+
  • /?





Clone this wiki locally