Summary
The Modulo Player is a media playback server supporting TCP/IP external control. Two control ports are documented: port 28670 for PC-level operations (start, terminate, reboot, halt, session loading) and port 28686 for playback and playlist control (play, pause, faders, cues, media management). Commands use '\n' (0x0A) as the command terminator and '?' as the argument separator.
Transport
protocols:
- tcp
addressing:
port: 28670 # PC controls (start, terminate, reboot, halt, loadByNameSession)
# UNRESOLVED: port 28686 documented for Modulo Player controls; second port handling not specified in schema
auth:
type: none # inferred: no auth procedure in source
Traits
- powerable # start, terminate, reboot, halt commands present
- routable # playlist/input routing commands present
- queryable # get* commands returning state present
- levelable # fader commands present (setFaderPlayList, setFaderWithTimePlayList)
Actions
- id: start
label: Start Modulo-Player
kind: action
params: []
- id: terminate
label: Stop Modulo-Player
kind: action
params: []
- id: reboot
label: Reboot Server
kind: action
params: []
- id: halt
label: Halt Server
kind: action
params: []
- id: loadByNameSession
label: Load Session by Name
kind: action
params:
- name: sessionName
type: string
description: Name of the session to load
- id: playItem
label: Play Item
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: cueIndex
type: integer
description: Cue index (1-based)
- id: locatePlayListCue
label: Locate Playlist Cue at Timecode
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: cueIndex
type: integer
description: Cue index (1-based)
- name: playState
type: integer
description: "1 for play, 0 for pause"
- name: time
type: integer
description: Timecode in ms from the start of the cue
- id: setPlayState
label: Set Play State
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: playState
type: integer
description: "1 for play, 0 for pause"
- id: setFaderPlayList
label: Set Playlist Fader
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: value
type: number
description: Fader value between 0.0 and 1.0
- id: setFaderWithTimePlayList
label: Set Playlist Fader with Fade Time
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: value
type: number
description: Fader value between 0.0 and 1.0
- name: time
type: integer
description: Fade time in ms
- id: playNextCue
label: Play Next Cue
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- id: playPreviousCue
label: Play Previous Cue
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- id: preloadCue
label: Preload Cue
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: cueIndex
type: integer
description: Cue index (1-based)
- id: launchTask
label: Launch Task
kind: action
params:
- name: taskIndex
type: integer
description: Task number (1-based)
- id: setUserKeyValue
label: Set User Key Value
kind: action
params:
- name: key
type: string
- name: value
type: string
- id: rescanMedias
label: Rescan Media
kind: action
params: []
- id: backupShow
label: Backup Show
kind: action
params: []
- id: saveShow
label: Save Show
kind: action
params: []
- id: addCue
label: Add Cue
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: cueIndex
type: integer
description: Cue index (1-based)
- id: deleteCue
label: Delete Cue
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: cueIndex
type: integer
description: Cue index (1-based)
- id: addNoRefreshCue
label: Add Cue (No Refresh)
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: cueIndex
type: integer
description: Cue index (1-based)
- id: deleteNoRefreshCue
label: Delete Cue (No Refresh)
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: cueIndex
type: integer
description: Cue index (1-based)
- id: sendToRemotePlaylist
label: Send to Remote Playlist
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- id: copyToSlavePlaylist
label: Copy to Slave Playlist
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- id: setCueProperty
label: Set Cue Property
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: cueIndex
type: integer
description: Cue index (1-based)
- name: property
type: string
description: "Property name: name, Trigger (0:go, 1:follow, 2:wait, 3:TC), TriggerValue"
- name: value
type: string
description: Property value
- id: setCueLayerProperty
label: Set Cue Layer Property
kind: action
params:
- name: playlistIndex
type: integer
description: Playlist index (1-based)
- name: cueIndex
type: integer
description: Cue index (1-based)
- name: layerIndex
type: integer
description: Layer index
- name: property
type: string
description: "Property: media, fadein, fadeout, x, y, scalex, scaley, rotation, opacity"
- name: value
type: string
description: Property value
- id: getUserKeyValue
label: Get User Key Value
kind: query
params:
- name: key
type: string
description: User key to retrieve
- id: getAllMediasWithInfos
label: Get All Medias With Infos
kind: query
params: []
Feedbacks
- id: appliReady
label: Appli Ready
kind: feedback
returns: "Online"
- id: rescanMediasResult
label: Rescan Medias Result
kind: feedback
returns: "RescanDone"
- id: connectedController
label: Connected Controller
kind: feedback
returns: "connectedController?{value}"
- id: allPlaylistsWithUuid
label: All Playlists with UUID
kind: feedback
returns: "allplaylistswithuuid?uuid|xxx;uuid|yyy;..."
- id: allCuesWithUuid
label: All Cues with UUID
kind: feedback
params:
- name: playlistIndex
type: integer
returns: "allcueswithuuid?playlistuuid?cueuuid|xxx;..."
- id: allMediasWithUuid
label: All Media with UUID
kind: feedback
returns: "allmediaswithuuid?id1|hello.mov;id2|toto.png;..."
- id: allTasksWithUuid
label: All Tasks with UUID
kind: feedback
returns: "alltaskswithuuid?uuid|xxx;uuid|yyy;..."
- id: allPlayLists
label: All Playlists
kind: feedback
returns: "AllPlayLists?xxx;yyy;zzz;..."
- id: allCues
label: All Cues
kind: feedback
params:
- name: playlistIndex
type: integer
returns: "AllCues?playlistindex?xxx;xd;gf;e"
- id: allMedias
label: All Media
kind: feedback
returns: "AllMedias?id1|hello.mov;id2|toto.png;..."
- id: mediaCount
label: Media Count
kind: feedback
returns: "MediaCount?{count}"
- id: playlistCount
label: Playlist Count
kind: feedback
returns: "PlayListCount?{count}"
- id: cueCount
label: Cue Count
kind: feedback
params:
- name: playlistIndex
type: integer
returns: "CueCount?playlistindex?{count}"
- id: playlistGrandMaster
label: Playlist Grand Master Fader
kind: feedback
params:
- name: playlistIndex
type: integer
returns: "{value} (fader 0.0-1.0)"
- id: playlistCueIndex
label: Playlist Cue Index
kind: feedback
params:
- name: playlistIndex
type: integer
returns: "playListCueIndex?{xx}"
- id: playlistCueTimecode
label: Playlist Cue Timecode
kind: feedback
params:
- name: playlistIndex
type: integer
returns: "playListCueTimecode?{xx}"
- id: playlistCueName
label: Playlist Cue Name
kind: feedback
params:
- name: playlistIndex
type: integer
returns: "playListIsPlay?{xx}"
- id: mediaProperty
label: Media Property
kind: feedback
params:
- name: idmedia
type: string
- name: property
type: string
description: "name, info, fileName, folder, extension, size, lastModified, thumbnail"
returns: "MediaProperty?idmedia?property?value"
- id: playlistProperty
label: Playlist Property
kind: feedback
params:
- name: playlistIndex
type: integer
- name: property
type: string
description: "name, cueIndex, cueName, cueIsPlay, cueTimecode, grandMaster"
returns: "PlayListProperty?playlistindex?property?value"
- id: cueProperty
label: Cue Property
kind: feedback
params:
- name: playlistIndex
type: integer
- name: cueIndex
type: integer
- name: property
type: string
returns: "CueProperty?playlistindex?cueindex?property?value"
- id: cueLayerProperty
label: Cue Layer Property
kind: feedback
params:
- name: playlistIndex
type: integer
- name: cueIndex
type: integer
- name: layerIndex
type: integer
- name: property
type: string
returns: "CueLayerProperty?playlistindex?cueIndex?layerIndex?property?xx"
Variables
# UNRESOLVED: no standalone settable variables documented; all parameters are action-embedded
Events
# UNRESOLVED: no unsolicited event notifications documented
Macros
# UNRESOLVED: no explicit multi-step macro sequences documented
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures in source
Notes
Two TCP ports are used: 28670 for PC-level controls (start, terminate, reboot, halt, loadByNameSession) and 28686 for Modulo Player playback controls (playItem, setFader*, playlist/cue management, media queries). The example in the source uses Hercules software on port 28670.
Command format: {command}?{arg1}?{arg2}...\n with '?' as argument separator and '\n' (0x0A) as command terminator.
The userKeyValue?key?value\n command is listed but appears to be both a setter and query pattern without a clear get prefix; treated as action/setter here.
Provenance
source_domains:
- support.modulo-pi.com
source_urls:
- https://support.modulo-pi.com/modulo-player-manual/1/en/topic/tcp-ip-external-control-protocol
retrieved_at: 2026-05-04T17:33:34.629Z
last_checked_at: 2026-06-02T22:09:43.824Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T22:09:43.824Z
matched_actions: 28
action_count: 28
confidence: medium
summary: "All 28 spec actions traced to source (dip-safe re-verify). (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "authentication mechanism not documented; UNRESOLVED: command timing/flow control requirements not stated"
- "port 28686 documented for Modulo Player controls; second port handling not specified in schema"
- "no standalone settable variables documented; all parameters are action-embedded"
- "no unsolicited event notifications documented"
- "no explicit multi-step macro sequences documented"
- "no safety warnings or interlock procedures in source"
- "second port (28686) mapping to Transport.addressing not expressible in current schema; UNRESOLVED: full error code/behavior documentation absent"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0