Image Compositor Socket

ardour - the new digital audio workstation - includes rudimentary support to display video-timelines. - For this to work the video-data needs to be supplied by a 3rd-party application via TCP-socket, hence the name: Image Compositor Socket.

Back in 2004/2005 aniComp from the CMT, Glasgow Animatics-server was supported in Ardour-0.99; but since then ardour-2.X ICS code has been mostly unmaintained.

I took to code a video-server that implements the ICS protocol to communicate with ardour and manages EDL video-sessions. This wiki page documents information regarding interoperability and interaction with ardour.

ICS and ardour 2.X

ardour-0.99.3 works just fine. However the 2.0-ongoing branch (currently ardour-2.5, svn rev. 3617) introduces video-display regressions that require patching: You can grab split-patches and follow discussion at or download a combined patch from here.


ardour enables it's video-capabilities if it can find an executable aniComp in $PATH. Probably the easiest way to accoplish this is to:

sudo ln -s /bin/true /usr/local/bin/aniComp

ardour2 will also need the an additional line in the ardour.menus configuration file:

<menuitem action='aniConnect'/>

I've added it below the “AddTrackBus” entry.

Launch the socket-server, ardour and activate ardour's “connect” menu-entry.

ICS Protocol

handwritten ICS-ardourvis annontations ICS communicates via TCP port 30000. The general syntax is in ASCII text: Every message but the raw-video-data is encoded as Text, integers are represented as decimal values.

NUMBER  := <ascii-decimal-integer (3 or 10bytes)>
TEXT    := <length (3bytes)><data (length bytes)>
REPLY   := "RT0" | "RT1"
COMMAND := <2-byte-command> [2-byte-id]* [TEXT]* [NUMBER]*

there are various 2-byte identifiers for commands, items and attributes (eg. IN: insert, RM: remove, IT: imageframe time axis etc). for a full list see the ardour source:


If you don't have aniComp and can't wait until sodankyla is deployable, you can connect to ardour using the gnu-tool socket. Here's an annotated example session:

# $ socket -v -ls 30000
# load session
# create new video-track "TTTT"
# rename "TTTT" to "NAME"
# insert a new marker-track (just testing)
# add a new video-scene/group to the video-track
# add an image to the video-scene
#   Track  Scene     Chunk
#   |      |         |      start     duration
#   |  +   |  +      |  +   |         |
# ardour asks:
# "RQID004NAME007myscene004myID066" 
#      |  +   |  +      |  +   | 
#      |      |         |      preferred height
#      Track  Scene     Chunk 
# reply - header
#   Width
#   |  Height
#   |  |  SPP
#   |  |  |  Data len
#   |  |  |  | 
# expect "RT1" from ardour.
# now send image data - here: 144 bytes 
000...000 (repeat)

Note: ardour-0.99.3 expects SPP=4 and RGBA image data. The patched ardour2 can handle RGB24 and RGBA32.

external resources

wiki/ics.txt · Last modified: 09.12.2013 00:48 by rgareus