Cell DNA SDK

From Livid Wiki

Jump to: navigation, search

Contents

Download the SDK files

You will need the patches and javascripts referenced in this documentation. You can download them here: http://www.lividinstruments.com/dl/CellDNA_SDK.zip

Expanding CellDNA with Max5

CellDNA is extensible in a variety of ways by building patches in Cycling74's Max5 programming environment (http://www.cycling74.com). You can create your own effects that can load with the other effects, and make your own controls, layers, automators, and generators that will load in the Extras window.

Curious programmers can open and even alter all the existing Effects and Extras by accessing the program's support files. On OS X, these are found by right clicking on the CellDNA application icon, selecting "Show Package Contents" then navigating into the "Contents" folder. In the language of directory paths:

/Applications/CellDNA.app/Contents/Extras
/Applications/CellDNA.app/Contents/CellFX

On Windows:

C:\Program Files\CellDNA\support\Extras
C:\Program Files\CellDNA\support\CellFX

These are simply max patch format files, and can be easily opened in Max5.

CellFX

There are few requirements for building your own effects for CellDNA.

  • The filename has no spaces
  • The entire effect can be blended with one knob and turned off when the blend is "0." (all objects that can be disabled should be disabled at 0.)
  • There is an inlet that will scale ints to floats for blending
  • The final output is an openGL object of some sort that will render in CellDNA's render context named "Output."

Besides that, the effect can be as simple or as complex as you want. You could also create a control panel for the effect, either as a popup window, or as an Extra, if you want control over more parameters.

Once the effect is created, you can put your .maxpat file in the CellFX folder (as described above). When CellDNA opens, it will create the necessary connections to the inlet and populate the Effects menus for the knobs with the name of the effect you have created.

The patch CellDNA-SDK_Example.maxpat annotates a basic example of an effect in CellDNA. It shows the required elements in use. To test your effects, use the patch CellDNA-SDK_Tester.maxpat which provides a render context and movie player. There are also notes on other textures available, and ways to manipulate the images available in CellDNA.

Extras

Where the effects have a few requirements, the Extras have even less. If you look at the current Extras that are in CellDNA, you see they are used for a wide variety of things, from routing audio signals to adding additional parameters for MIDI controllers, to Recording output, to generating sound wave graphics. There is really only one requirement, that the filenames should have no spaces, which make addressing the Extras with controllers and through network easier and more reliable. For the most part, what you need to know about Extras is what is possible to control and add!

Because the interface space is limited with Extras, it is recommended that the Extra take up no more than 290x350 pixels. If you need more room, you can create a popup window interface. The max patch CellDNA-SDK_ExtrasExamples.maxpat has a few examples of how to extend control and capabilities of CellDNA, including an example of using an RTSP video stream and integrating with an Arduino. You can also peruse the Extras that come with CellDNA for more ideas. The complete list of commands (that is, messages with values that can be input into a [s commands] object) in CellDNA is published below.

MIDI Learn

If you want your Extra to integrate into CellDNA's MIDI Learn capabilities, you should get familiar with how the patch MIDI Learn works. This explains how to take a properly formatted UI and integrate it into CellDNA's MIDI Learn mode. Additional examples are, of course, in CellDNA's Extras folder!

Commands

The following commands can be sent to the inlet of a [s commands] object to control various parameters in CellDNA. For example PlayPause 1 will turn the Play button in the main interface on, PlayPause 0 will turn it off. The type <tog> means a 0 or 1 integer, and is suitable for toggle or momentary action - the software will respond as necessary. For the most part, the commands are self explanatory. These commands can also be leveraged for Open Sound Control and Network control. Simply use a leading slash, and replace "::" with a "/" to create a network message. For example "Captions::FadeIn 1" would be "/Captions/Fadein 1".


BPM <float>
VideoIn <tog>
MIDILearn <tog>
B-Lock <tog>
A-Lock <tog>
Sequence <tog>
CrossOrCut <tog>
Fast <tog>
Loop <tog>
Reverse <tog>
PlayPause <tog>
Fullscreen <tog>
draw_onoff <tog>
FastSpeed <float>
SlowSpeed <float>
Slow <tog>
Clip <0-63>
Scrub <0-1>
CrossfadeDuration <float>
StillsDuration <float>
MasterVolume <float>
FadeOutDuration <float>
Speed <float>
SpeedPos <float>
SpeedNeg <float>
MultiScreen <0-1>
Mix::zeerocks <0-1>
Mix::windows <0-1>
Mix::warp <0-1>
Mix::twine <0-1>
Mix::tint_whites <0-1>
Mix::tint_inverse <0-1>
Mix::tint_duo <0-1>
Mix::tint_darks <0-1>
Mix::tiles <0-1>
Mix::tag <0-1>
Mix::spots <0-1>
Mix::sphere <0-1>
Mix::separate <0-1>
Mix::scroll_y <0-1>
Mix::scroll_x <0-1>
Mix::scatter_zoom <0-1>
Mix::scatter_vert <0-1>
Mix::scatter_strip <0-1>
Mix::scatter_slicer <0-1>
Mix::scatter_slabs <0-1>
Mix::scatter_break <0-1>
Mix::ripple <0-1>
Mix::rgb <0-1>
Mix::remix <0-1>
Mix::quake <0-1>
Mix::pipes <float>
Mix::peu_d'etra <0-1>
Mix::panes <0-1>
Mix::mx_zoom <0-1>
Mix::mx_rotate <0-1>
Mix::mx_kburns <0-1>
Mix::mirror <0-1>
Mix::metropolis <0-1>
Mix::meshtronic <0-1>
Mix::melt <0-1>
Mix::lumakey <0-1>
Mix::leds_color <0-1>
Mix::leds <0-1>
Mix::jumbotron_2 <0-1>
Mix::jumbotron_1 <0-1>
Mix::jumbotron_0 <0-1>
Mix::invert <0-1>
Mix::hallofmirrors <0-1>
Mix::glitch <0-1>
Mix::freeframe <0-1>
Mix::flicker <0-1>
Mix::feedback_5 <0-1>
Mix::feedback_4 <0-1>
Mix::feedback_3 <0-1>
Mix::feedback_2 <0-1>
Mix::feedback_1 <0-1>
Mix::feedback_0 <0-1>
Mix::extrude <0-1>
Mix::explode <0-1>
Mix::darkfog <0-1>
Mix::chromakey <0-1>
Mix::caption <0-1>
Mix::burst <0-1>
Mix::BPM_xfade <0-1>
Mix::BPM_transform <0-1>
Mix::BPM_rndEffect <0-1>
Mix::BPM_rndclipbank <0-1>
Mix::BPM_rndclip <0-1>
Mix::BPM_reverse <0-1>
Mix::BPM_jumprnd <0-1>
Mix::BPM_jump <0-1>
Mix::BPM_Effect4 <0-1>
Mix::BPM_Effect3 <0-1>
Mix::BPM_Effect2 <0-1>
Mix::BPM_Effect1 <0-1>
Mix::BPM_black <0-1>
Mix::binoculars <0-1>
Mix::bend <0-1>
Mix::noeffects <0-1>
Mix::playoncefade <tog>
Mix::Xfade <0-1>
Mix::ToBlack <0-1>
Mix::Bright <0-1>
Mix::Contrast <0-1>
Mix::Saturation <0-1>
Mix::FadeIn <0-1>
Mix::FadeOut <0-1>
Mix::SplitScreen <0-1>
Mix::LayerOpacity layerop <list of 4 floats 0-1>
Mix::LayerBlend <0-1>
MovieSample::MovieRandom <tog>
2MovieLoop::MovieNumber <int 0-63>
2MovieLoop::PlaneEnable <tog>
2MovieLoop::SelectAll <tog>
2MovieLoop::ToStart <tog>
2MovieLoop::MarkIn <tog>
2MovieLoop::MarkOut <tog>
2MovieLoop::SaveEdit <tog>
2MovieLoop::LoopIn <0-1>
2MovieLoop::LoopOut <0-1>
2MovieLoop::BPMmult <float>
2MovieLoop::Preload <tog>
2MovieLoop::Next <tog>
2MovieLoop::PreloadClips <tog>
2MovieLoop::Quality <tog>
2MovieLoop::ResY <0-1>
2MovieLoop::ResX <0-1>
2MovieLoop::Dispose <tog>
2MovieLoop::ToBlack <0-1>
2MovieLoop::Opacity <0-1>
2MovieLoop::Mute <tog>
2MovieLoop::Go <tog>
2MovieLoop::Reverse <tog>
2MovieLoop::Jump <tog>
2MovieLoop::Blue <0-1>
2MovieLoop::Green <0-1>
2MovieLoop::Red <0-1>
2MovieLoop::TimeScrub <0-1>
2MovieLoop::Loop <tog>
2MovieLoop::PlayPause <tog>
2MovieLoop::Rate <float>
2MovieLoop::Sequencer <tog>
2MovieLoop::Bright <0-1>
2MovieLoop::Contrast <0-1>
2MovieLoop::Saturation <0-1>
2MovieLoop::BPM <0-2>
2MovieLoop::LoopScrub <0-1>
2MovieLoop::TextureEnable <tog>
2MovieLoop::MatrixOut <tog>
2MovieLoop::CueStore <tog>
2MovieLoop::onoff <tog>
2MovieLoop::CueRecall <0-7>
2MovieLoop::StillsDuration <float>
2MovieLoop::CrossfadeDuration <float>
2MovieLoop::keyonoff <tog>
1MovieLoop::MovieNumber <int 0-63>
1MovieLoop::PlaneEnable <tog>
1MovieLoop::SelectAll <tog>
1MovieLoop::ToStart <tog>
1MovieLoop::MarkIn <tog>
1MovieLoop::MarkOut <tog>
1MovieLoop::SaveEdit <tog>
1MovieLoop::LoopIn <0-1>
1MovieLoop::LoopOut <0-1>
1MovieLoop::BPMmult <float>
1MovieLoop::Preload <tog>
1MovieLoop::Next <tog>
1MovieLoop::PreloadClips <tog>
1MovieLoop::Quality <tog>
1MovieLoop::ResY <0-1>
1MovieLoop::ResX <0-1>
1MovieLoop::Dispose <tog>
1MovieLoop::ToBlack <0-1>
1MovieLoop::Opacity <0-1>
1MovieLoop::Mute <tog>
1MovieLoop::Go <tog>
1MovieLoop::Reverse <tog>
1MovieLoop::Jump <tog>
1MovieLoop::Blue <0-1>
1MovieLoop::Green <0-1>
1MovieLoop::Red <0-1>
1MovieLoop::TimeScrub <0-1>
1MovieLoop::Loop <tog>
1MovieLoop::PlayPause <tog>
1MovieLoop::Rate <float>
1MovieLoop::Sequencer <tog>
1MovieLoop::Bright <0-1>
1MovieLoop::Contrast <0-1>
1MovieLoop::Saturation <0-1>
1MovieLoop::BPM <0-2>
1MovieLoop::LoopScrub <0-1>
1MovieLoop::TextureEnable <tog>
1MovieLoop::MatrixOut <tog>
1MovieLoop::CueStore <tog>
1MovieLoop::onoff <tog>
1MovieLoop::CueRecall <0-7>
1MovieLoop::StillsDuration <float>
1MovieLoop::CrossfadeDuration <float>
1MovieLoop::keyonoff <tog>
EffectsMix::EffectBankSelect <0-1>
EffectsMix::EffectSelect[1] <0-127>
EffectsMix::Effect[1] <0-1>
EffectsMix::EffectSelect[2] <0-127>
EffectsMix::Effect[2] <0-1>
EffectsMix::EffectSelect[3] <0-127>
EffectsMix::Effect[3] <0-1>
EffectsMix::EffectSelect[4] <0-127>
EffectsMix::Effect[4] <0-1>
EffectsMix::EffectSelect[5] <0-127>
EffectsMix::Effect[5] <0-1>
EffectsMix::EffectSelect[6] <0-127>
EffectsMix::Effect[6] <0-1>
EffectsMix::EffectSelect[7] <0-127>
EffectsMix::Effect[7] <0-1>
EffectsMix::EffectSelect[8] <0-127>
EffectsMix::Effect[8] <0-1>
EffectsMix::EffectsInc <tog>
EffectsMix::EffectsDec <tog>
EffectsMix::fetch_fxnames <tog>
Captions::FadeIn <tog>
Captions::FadeOut <tog>
Captions::PositionX <0-1>
Captions::PositionY <0-1>
Captions::FontSize <float>
Captions::Opacity <0-1>
Captions::Text <symbol>
Captions::Clear <tog>
Captions::Depth <0-1>
Captions::Wireframe <tog>
Captions::3dAnimate <tog>
Captions::Justify <0-3>
Captions::RGB <0-1>
Captions::FontSelector <0-1>
Captions::Font <symbol>
Network::ReceivePort <0-65535>
Network::EnableSend <tog>
Network::EnableReceive <tog>
Network::MirrorPort <0-65535>
Network::UIPort <0-65535>
Network::MirrorHost <ip address>
Network::EnableUISend <tog>
Network::GetIPs <tog>
Network::UIHost <ip address>
ClipBank::Clear <tog>
ClipBank::RebuildClipBank <tog>
ClipBank::ClipProgram <0-31>
ClipBank::RebuildAllBanks <tog>
ClipBank::KeyRow <0-7>
ClipBank::ClipInc <tog>
ClipBank::ClipDec <tog>
Extras::TopMask::Enable <tog>
Extras::TopMask::filename <symbol>
Extras::TopMask::MIDILearn <tog>
Extras::SoundWave::Stroke <0-1>
Extras::SoundWave::Zoom <0-1>
Extras::SoundWave::Opacity <0-1>
Extras::SoundWave::AutoColor <tog>
Extras::SoundWave::Red <0-1>
Extras::SoundWave::Green <0-1>
Extras::SoundWave::Blue <0-1>
Extras::SoundWave::LightColors <0-1>
Extras::SoundWave::DarkColors <0-1>
Extras::SoundWave::Saturation <0-1>
Extras::SoundWave::RGB <list 3 floats>
Extras::SoundWave::Volume <0-1>
Extras::SoundWave::Enable <tog>
Extras::SoundWave::MIDILearn <tog>
Extras::Record::Record <tog>
Extras::Record::MIDILearn <tog>
Extras::Record::Options::Codec <symbol>
Extras::Record::Options::Interpolate <tog>
Extras::Record::Options::Quality <symbol>
Extras::Record::Options::Render <tog>
Extras::Record::Options::fps <0-60>
Extras::NetworkInterface::ReceivePort <0-65535>
Extras::NetworkInterface::EnableSend <tog>
Extras::NetworkInterface::EnableReceive <tog>
Extras::NetworkInterface::MirrorPort <0-65535>
Extras::NetworkInterface::UIPort <0-65535>
Extras::NetworkInterface::MirrorHost <IP address>
Extras::NetworkInterface::GetIPs <tog>
Extras::NetworkInterface::EnableUISend <tog>
Extras::MultiScreen::Opacity[1] <0-1>
Extras::MultiScreen::Opacity[2] <0-1>
Extras::MultiScreen::Opacity[3] <0-1>
Extras::MultiScreen::Opacity[4] <0-1>
Extras::MultiScreen::Enable <tog>
Extras::MultiScreen::ScreenCount <0-3>
Extras::MultiScreen::SendTo <0-3>
Extras::MultiScreen::MIDILearn <tog>
Extras::Layers::MIDILearn <tog>
Extras::Layers::Fade[1] <float>
Extras::Layers::Fade[2] <float>
Extras::Layers::Fade[3] <float>
Extras::Layers::Fade[4] <float>
Extras::Layers::SelectLayer <0-3>
Extras::Layers::Clip <0-63>
Extras::Layers::SelectLayerA1 <tog>
Extras::Layers::SelectLayerA2 <tog>
Extras::Layers::SelectLayerB1 <tog>
Extras::Layers::SelectLayerB2 <tog>
Extras::Layers::BlendModeA <0-17>
Extras::Layers::BlendModeB <0-17>
Database::dBasePath <symbol>
Database::FolderOption <tog>
Personal tools