Lightjams is always getting better. Thanks for your great feedback!


V. 702 Coming soon!

You can get the BETA version right now: Windows 64-bit. Have fun!


Save the value of the 'last' variable into the project file: Each formula has a variable named 'last' which corresponds to the value the last time the formula was evaluated. Now when loading back a project file, all 'last' variables are restored. This can be used to store values in the project file. For example, the formula 'if(osc(0), osc(1), last)' can be used to save a value coming from OSC.

Deep master grid duplicate: Allows to deep duplicate a master grid, which means all linked grids are also duplicated and linked to the new master duplicate. You now see this option when duplicating a master grid.

Show the real ArtNet universe instead of subnet:universe: In the ArtNet configuration, when changing the input or output subnet, the universe numbers are now updated. So instead of always starting at U0, if the subnet is 1, we now show U16. The manual node subscriptions are also now using the real universes. The subnet:universe value is displayed in the tooltip for each input or output universe box in the configuration panel.

New function: let(var name,value, [var name,value, ...,] formula): Define one or multiple local variables usable in the formula.

New function: grid.background(mediaId, componentId): Set the grid background to the specified media (1 is the 1st media) and component (1: hues, 2: saturations, 3: intensities).

New function: isBitSet(value, bitPosition): Returns 100% if the bit is set at the specified position (starting at 0).

New built-in OSC messages: You can now change the formula of the global sliders and the activation and speed sliders of grids and groups with an attribute id via OSC! For example, by sending a string parameter to the address /lj/sliders/slider01, the formula of the slider will be updated. See the OSC input window for the details.

Edit OSC mapping addresses: In the OSC input mappings, you can now edit the addresess. Double-click on an address to edit it.

Add OSC mappings: You can now manually add an OSC input mapping without having to go in the learn panel. There's a new Add button in the OSC input mapping window.

Shows the timestamps in the OSC input and output monitors.

New button in the OSC monitor windows to clear the messages.

Fix not setting the proper unscaled OSC values when manually setting a value: When double-clicking on a OSC channel, the same value was used for the unscaled value (raw value). Now apply the scaling as configured in the mappings.

Open Sound to Light (OS2L) support: Integration with VirtualDJ via the OS2L protocol, allowing to create cues in your songs in VDJ and control Lightjams with it. The OS2L messages are redirected to the OSC input meaning you can use all the features of the OSC inputs (including changing the formulas!) via OS2L. So enable OS2L in Lightjams and open the OSC input monitor to see what's going on.

NDI updated to 6.0: NDI has been updated to the latest and greatest version.

Spout updated to 2.007.014: Spout has been updated to the latest and greatest version.

Better Read-only support: When the project file has the read-only attribute, it's now displayed on the title bar and nothing can be saved, including the settings. This is useful to prevent accidental changes to be saved.

V. 685 February 1st, 2024


Ableton Link: Integrate with Ableton Link to synchronize musical beat, tempo and phase across multiple applications running on one or more devices.

New function for Ableton Link: abletonLink.beat, abletonLink.phase, abletonLink.quantum, abletonLink.tempo, abletonLink.peers, abletonLink.enabled. Use abletonLink.enabled(100) to connect to the Link session.

Duplicate attributes in the fixture template editor: There's now a button (+) to duplicate an attribute in the fixture template editor.

New functions for the color palette: You can get the hue, saturation and intensity of an entry in the color palette by using the grid.colorGradient.hue, grid.colorGradient.saturation and grid.colorGradient.intensity functions.

New function: coalesce(v1, v2, ...): return the first value greater than 0.

New function: timedSequence(nbRepeats, crossfadeDuration, resetFct, time1, fct1, time2, fct2, time3, fct3, ..., [endFct]): Play each function for the specified duration. Repeat the sequence nbRepeats times or indefinitely if less than 0. Crossfade when switching function. Reset when resetFct is positive. Optional endFct played when the sequence ends.

New function: sawtooth(time, resetFct, speedMultiplier): The new speedMultiplier parameter can be negative to go in reverse. You can use the map.XYZ functions to generate all other functions in reverse. For example, map.sin(sawtooth(1,0, scale(midi.control(1,10), -1,1))) allows to generate a sinus wave and set a negetive speed via a midi control.

Allow to set a specific ASIO buffer length: Some drivers might not report the buffer alignment correctly or maybe the user wants a smaller buffer than the one that is automatically computed.

Add support for the new DMXKing ultraDMX MAX: This new USB-DMX interface is now supported by selecting the COM/Serial type in the USB-DMX configuration.

Unpatched universes: To more easily create the patch when the exact dmx addresses aren't known or when doing complex readdressing, you can now select the "Unpatched" universes in the patch window.

Reset the time of functions in sequences: When using sequence-like functions like loop and timedSequence, the time reset each time it goes to the next step. This way, the result should be the same each time the sequence is played.

Fix crashing when setting NaN or infinite to the soundcard volume using the music.volume function. Now ignores invalid volume value.

Show ASIO channel name: Now display the channel name when using ASIO to be able to make it easier to work with multiple channels.

Better sunrise/sunset accuracy: The calculations were a bit off for some locations. Now it should be a lot better.

V. 639 May 18, 2023


Grid as background for other grids: The output of a grid (all the sources) can now be used as input for other grids. In other words, you can share the sources/power with multiple grids. To do so, you go in the media library (ctrl-u) and add a grid media. This way, this grid can be used as a background for other grids, like you do with any media. The limitations are that there's no media monitor and the color analyzer is turned off for the grid media.

New function: grid.backgroundAt(x,y) This function returns the value of the background at the specified position. This lets you manipulate the value as you want - for example, to invert it, the source's power formula would be 100-2*grid.backgroundAt(x,y). The difference with the grid.powerAt function is that the powerAt includes the power of the sources of the current grid while the backgroundAt only returns the value coming from a media or another grid. This background thing is twisted, but quite fun!

Spout 2.007: Update Spout (to receive video from another app on the same computer) to the latest version. Along with multiple improvements, the performance is 2-3 times better.

Remove initial NDI delay: There was a 3 seconds connection delay when opening a project using NDI. Now it's gone and also all reconnections in case of error are made without blocking anything.

Audio auto gain: New option to automatically adjust the audio input volume to the optimal level. Go in the View/configuration menu and under the music tab you'll see the "auto gain" option for each audio input device. Thanks to Isaac for insisting on this!

Give a name to new groups and grids: When creating a new group or grid, you can enter the new name right away. Thanks Isaac for this quality of life improvement idea.

Prevent OSC monitor to freeze: When the OSC feedback was enabled and by misconfiguration, the feedback was sent back to Lightjams, this was causing a feedback storm, overloading the monitor window.

Save the user interface state: The state is saved in the application preferences. The state is composed of: the attribute list width and columns, whether the global sliders are visible and the grid manager tree pane width. Thanks to Ryan for the suggestion!

Multiline support for the formulas: You can now press ctrl+enter to add a new line when editing a formula.

New function midi.control.onReceived: Pulses when receiving a MIDI CC message. This allows to work with continuous encoders which sends multiple times the same value.

V. 619 September 6th, 2022


Filter attributes by id, fixtureId, type and group: To specifically filter by id, type or group, you can use the id: or fixtureId: or type: or group: prefixes. For example, to filter attributes with ids containing 'hu', you type 'id:hu' in the filter box.

Only unlink attribute values: There's now an option to only unlink the attribute values while keeping the layout linked to the master.

NDI 5.5: Update NDI to the latest 5.5 version with various performance improvements.

Increase the number of audio frequency bands to 120: This makes it easier to precisely select a specific frequency.

Select multiple audio frequency bands: Hold the ctrl or shift key to select multiple bands.

Virtual dimmers: In the template editor, for any color attribute, you can add a virtual dimmer. This dimmer is not generating DMX values and is only used to make it easier to generate certain type of intensity effects.

Hardware ID QR Code: You can now transfer the hardware id on your phone by scanning the QR code. This is handy when your computer is not connected to the internet and you need a license.

Find attributes in grids: Easier way to find attributes in the grids. You can now select the attributes in the list, right-click and use the 'Find in current grid' or 'Find in any grids' menu items. This new feature replaces the mirror list selection and find grid activation item references.

RGWB and RBGW attributes: Some manufacturers use this color component order which is not supported in the fixture editor. Now supported in both 8-bit and 16-bit per channel.

Use double quotation marks in filter boxes when spaces are important: In any filter field, use double quotes like this "mac 250" to match the spaces too.

Improve transition when using the relative attribute mode: The transitions were a bit bad when changing the activation of a higher precedence grid and lower grids were using relative attributes. The relative values were reset when merging the high precedence grid. Now modulate it with the high precedence activation. That means the relative effects gradually disapear as the higher precedence grid is activated.

Source.px and now follow the x and y sliders exactly: Before, they were quantized and only updated when the source positions was changing. Now the px and py are smoother and more useful when used in formulas for the shader mode.

Easily find formulas in error: You can now click on the "formula errors" red led indicator to get a window showing all formulas in error.

View and search through all formulas: New window showing all formulas in your project and allowing to filter and go to the formulas. Go in the View/Formulas menu.

Functions to control the grid fade in and out times: Use the grid.fadeInTime and grid.fadeOutTime functions to get and set the fade times.

Drag and drop to reorder music inputs: In the view/configuration and music panel, you can now use drag and drop in addition to the up/down buttons to reorder the inputs.

KiNet v1 (DMXOUT): Add support for the Philips Color Kinetics KiNet v1 protocol.

Fix fixture change mode with linked attribute config: When changing the fixture mode, there was a problem with the settings of the attributes on linked grids with the position only. The settings weren't conserved after the mode change. For example, if an attribute was assigned a color palette entry, it was lost. Thanks to Maxim Béliveau for reporting this!

V. 591 July 1st 2021


sACN priority: You can now change the priority of the sACN output packets. This is useful when using multiple consoles/software and wanting to merge them all. Go in the view/configuration menu and then under the sACN panel to change the priority setting.

sACN sync: It's the equivalent of ArtSync for ArtNet, allowing to send a special sync packet to synchonize the outputs of all sACN nodes. The nodes need to support sACN sync.

NDI 4.5: Update NDI to the latest 4.5 version with various performance improvements.

Easier number fine adjustment: In numeric boxes, you can press shift+up/down and shift+page up/down to fine tune the value. You can also hold the shift key while using the mouse wheel.

Save MIDI CC to project file: Optionally save the current MIDI CC values to the project file. This is useful if you need specific default values when loading your project. Go in the MIDI input config panel to activate this option.

Duplicate fixtures: In the patch window, there's a new duplicate button to duplicate the selected fixtures. They all need to be in the same universe type at the moment (artnet, sAcn, etc.).

Fix wrongly showing a 128 dmx address: When selecing fixture in the patch and some fixtures are patched in a midi universe, the dmx address was sometimes showing 128.

Per monitor DPI awareness: Lightjams now looks good even when moving windows around monitors with different DPI settings.

V. 577 February 10, 2020


256 DMX universes: Now twice the fun with 256 universes. Ultimate licenses will get this increase for free.

Performance improvement: The increase in universe count comes with a good performance improvement so that even smaller projects will benefit from it. It's mainly a better use of all CPU cores.

Scale attributes selection: You can add spaces between the selected attributes by using the Edit/Attributes and Scale Horizontally/Vertically menu items.

Duplicate colors: You can now quickly duplicate all selected colors in the color palette window.

Activation-weighted merge for saturation: Saturation attributes were merged using HTP and was multiplied by the grid activation. This was causing the saturation to be reduced while trying to control the intensity attributes using the same grid activation. Now the saturation isn't affected by the grid activation and when merged, all saturation values are mixed based on the activation of its grid.

Configure firewall: There's a new firewall button in the view/configuration menu and under general tab. Since the firewall is often causing problems if not properly configured, this new button does it all for you.

Screen capture integrated: No need to use a 3rd party utility anymore to capture the screen for things like Ambilight. Go in the view/media menu and add a screen capture media.

Fade for activation attributes: Fade in and out can now be specified directly when selecting activation, speed and slider attributes on a grid. These attributes control the activation of effects and it's handy to be able to precisely specify the fade.

New function oscRaw: Get the unscaled OSC value as it's been received.

OSC feedback: Optionally send back to the sender the received OSC messages to confirm their reception. This is useful when the network is unreliable. Apps like TouchOSC support receiving feedback.

OSC message /lj/osc/sendMeAllMappedValues: When the OSC feedback is enabled, by sending this message to Lightjams an app can ask to received all current OSC values. This is handy when you're restarting an app like TouchOSC and want to update it with the values in Lightjams.

Mirror selected attributes in the patch: You can select the fixtures corresponding to the selected attributes on the grid. Select the attributes on the grid and go in the Edit/Attributes/Select in the patch menu.

More ways to import: Go in the File/Import menu to import from other projects: grids, patch, media, color palette, ArtNET/sACN/KiNET, OSC input/out.

Fix intermittent global sliders reset to 0 at startup: Sometimes when loading a project file at startup, global sliders were reset to 0.

Duplicate grid layout without attribute config: There are now two ways to link grids when duplicating. The first is to link the grid layout and all attributes to the master (existing way). The new way is to link the grid layout and attribute positions only while still having the option to configure the attributes. This new way works well when each grid duplicate is like a cue.

Select fixtures in monitor: You can select fixtures in a monitor window and all related attributes will also be selected in the current grid.

Fix grid.onActivated on project load: The grid.onActivated value wasn't set when a project has just been loaded. So formulas relying on this value weren't working until the grid was reactivated.

V. 545 July 4th, 2019

The thank you first, for all their ideas, testing and posts on the forum:

Isaac Caballero



Jack De Visser

Timo Lejeune


Show Only The Mapped OSC Values

It's now way easier to work with OSC with the new view showing only the mapped values and addresses.

Easily select mapped OSC addresses


Better looking patch export: The exported html file is nicer and better formatted.

Independent OSC monitor window: The OSC in and out monitor windows can now stay open while you work on other things.

New function "recordOnChange": Allow to record only different values. You control the playback with the goNext, goBack and reset parameters.

Force to always send DMX: For ArtNET and sACN, you can now force Lightjams to send DMX at a constant output rate even when there's no changes. Some LED controllers and ArtNET nodes don't like variable output rate and you may get hangs. Disable the "Optimize" option in the ArtNET and sACN configuration panels.

Network Device Interface (NDI): Integration of the Network Device Interface (NDI) by NewTek. It allows receiving live video streams over the network.

Offsets for the sunrise and sunset times: Change the offsets in the view/configuration and Date and time tab.

Zoom in monitor window: When you have many fixtures in the monitor, you can now zoom in to better see each fixture.

HSV/HSI added to fixture template: Some fixtures like the ETC Source Four Series 2 can be controlled via HSV. These fixtures usually have many color emitters (RGB + red orange, lime, mint, indigo, etc.) so it's easier to control them via HSV. Manufacturers often use HSV and HSI to mean the same thing.

WRGB added to fixture template: Yes, some LEDs put the white channel before the others.

More media slots: 99 media slots, up from 64.

45 degrees projection for attributes: If your lights are positionned at a 45 degrees angle, use the new option in the Edit/Attributes menu and the Projection 45 degrees item.

Always on top option for the monitor window: There's a new button named "Top" forcing the monitor window to be always on top. That means that even if you're working in another app, you'll see the monitor window.

Fix not sending unicast for ArtNET universes over 32.

Was being overloaded by too many ArtPollReply: On some setups, nodes are constantly sending PollReply and Lightjams was doing too much work. There's something wrong with the setup but at least LJ will not freeze anymore.

Save grid monitors into the project file: The monitor windows are now saved and restored when loading your project.

Batch assign Ids. In the grid manager, right-click on a group to assign attribute Ids to all grids under the group.

Batch rename grids: In the grid manager, right-click on a group to rename all grids under the group.

Resize the right panel: If you need more space, you can now increase the width of the attribute panel at the right. Resize it by dragging the left border.

Save OSC values. Optionally save the current OSC values to the project file. This is useful if you need specific default values when loading your project. Go in the OSC config panel to activate this option.

Independent delay speed: New option to prevent the source's delay speed from being multiplied by the master speed and group speed.

Selectable MIDI clocks: If preferred, to make sure the MIDI input devices always have the same clock ids after reloading or replugging the devices, you can assign the clock ids.

Allow to configure backup files. You can now select a folder to put all project backup files or disable creating backups completely. Go in the view/configuration menu and then under the general tab.

Optional position interpolation: For some effects, it's handy to move a source of at most one cell at a time to avoid skipping cells. There's a new "interpolate position" option in the soure configuration.

Favorite colors: You can now define your favorite colors in the color palette editor for quick access. The colors are saved into the project file.

Manually set OSC and MIDI values To ease testing without actual OSC and MIDI devices, you can simulate receiving values. When a slider is linked to a MIDI or OSC input, double-click on the linked note/CC/channel to enter a specific value.

V. 509 June 20, 2018

The thank you first, for all their ideas, testing and posts on the forum:

Isaac Caballero

Igor Roberti Foc



Jack De Visser

Timo Lejeune


Relative effects: New "relative" option for attributes allowing to add and subtract values. For example, you can generate a swing effect of +-20 degrees for the pan that is put on top of the current pan. That means the start position can be separated from the effect.

Attributes for the global sliders: You can now control a global slider from any grid, by using its attribute. This new feature makes global sliders able to replace the global memories (gmem/grecall) with the added benefit of handling multiple incoming values (merged using HTP). To activate, open the sliders (ctrl+k) and scroll at the end to see the checkbox.

Color transition goes through the color wheel: It's now the best of both worlds: create effects by independently controlling the hue, saturation and intensity components while doing color transitions in the RGB color model. The previous color transitions were going around the color wheel, which had the downside of showing unwanted colors.

MIDI time code (MTC): You can use the midi.clock.time function in your formulas to get the timecode's hours, minutes, seconds and frames for precise time synchronization between devices.

Phase shift for wave shapes: You can now easily shift the phase of your sin, cos, etc. shapes to create fan effects.

Allow pasting attributes while editing sources and vice-versa: There was a useless check preventing pasting attributes while editing sources. Now the edit mode automatically switches when needed.

Music loopback auto switch: Reconnect to the music loopback when the default output device changes. For example, when plugging/unplugging the headphones.

Paste sources and attributes at their original positions: If the positions aren't free, items will be pasted in the middle of the current visible area.

Take into account the id for activation and speed attributes when filtering the attribute list: The id in this case is very useful.

Increase the max height to 1500: The grid height can now be 1500 (up from 240).

Show a confirmation message when deleting a grid with linked grids (a master grid): All linked grids are automatically deleted so it might help to avoid deleting the wrong grid.

Append "-transcoded" to transcoded videos: This is to make sure we can easily identify transcoded videos.

Preserve grid zoom levels: Now saved into the project file.

Disable autocomplete for fixture group combobox: Was often wrongly replacing the text while typing.

Avoid scaling OSC values when already in % (0-100 range): This prevents losing precision by scaling to 0-1 and then back to 0-100..

Snap option in color palette: Allow to remove the transition between colors and snap to each color.

Monitor pan offset: To get a better preview in the monitor, you can now indicate the orientation of your moving heads. Go in the patch window and use the monitor pan offset box.

Sticky notes: Notes can be added anywhere on the grid.

Fix wrongly closing the grid manager on double-click: Should only close when double-clicking on a grid in the list.

Fix leaving attributes selected: When clicking the select all button or select even/off and then selecting only one item.

Fix wrongly duplicating attributes when changing the fixture mode and using linked grids.

Fix bad DMX values when slow DMX output: Using a slow USB to DMX interface was causing intermittent wrong DMX values to be sent.

Fix wrong sorting order for IDs with more than 4 characters.

Fix not detecting old artnet nodes that don't send the bind index: Now just ignore the bind index if no data provided.

Fix cannot resize data grid column if too small: Once resize to be very small, we weren't able to resize the column again.

Fix displaying wrong presets: When editing a fixture template and entering preset values in DMX mode, that was leaving a gap between each range.

V. 481 December 12, 2017

The thank you first:

Michael Potvin and Isaac Caballero for bug hunting.

Ian Opitz for his testing.

Francis Gagnon for his idea of wave angle.

Jack De Visser for his testing.


Source's wave angle: There's now a 6th slider for the sources. When using a wave shape like a line or square, you can rotate it by controlling the wave angle slider. This allows generating a full range of new kind of rotating visuals!

Backups: A project backup file is created every 5 minutes. To avoid slowdown during a live show, you need to manually save the project to trigger the backup creation. To open a backup, select the Backup file type in the file browser when opening a project. To set the backup to be the current project, simply save the project. This should bring peace of mind to many of us knowing we can always go back in time in case something is wrong with the latest project file.

More input mapping options: In a few clicks, you can now set a min, max, fade in, fade out, toggle and invert behaviors for MIDI, OSC and DMX inputs. This avoids having to type a formula for these pretty common scenarios.

Improve loading/saving over the network: Since a network is really slower than a local disk, a progress dialog is now shown to make it clear what's going on.

Reduce minimum window height: This avoids cutting the window when working on a small screen or when the Windows scaling is high.

Attribute value presets: For attributes like color wheel, shutter and effect, you can now enter presets in the template editor. For the color wheel, that means you can now enter each color. Then when you select the attribute on a grid, you're able to easily select a color by clicking on the preset.

Nicer formula editor: Nicer font and colors, better contrast between the text and the background to improve readability.

Locate in the grid monitor: You can now see the details of the fixture under the mouse cursor and optionnaly execute the locate action. This is handy for troubleshooting.

Seek video in monitor: To help testing with long videos, you can now seek to a specific time. Open a monitor for the video (view/Media menu).

KiNET Output: 64 universes via KiNET. This is the network protocol used to control Philips Color Kinetics fixtures.

Fix bad behavior with the if function in shader mode: When one of the if parameter was using a function maintaining its own state like sin(1), the result was wrong.

Fix intermitent crash when first enabling the shader mode: A bad bug reported by Michael! Hopefully, it's gone for good.

Fix crash switching between the Pro and Open USB DMX: Since a recent Windows update, switching between a Pro and Open USB DMX was causing Lightjams to crash.

Fix ghost attributes after undo: There was a problem when deleting a grid while attributes were selected and then undoing.

Fix wrong default value when a grid is loaded with a speed at 0x: The default value was 0% while it should have been inactive.

V. 446 September 25, 2017

The thank you first:

Mark Fox for his grid reference idea.

Igor Roberti Foc for his feedback.

Frank Verpaelst for his great testing and ideas.

Isaac Caballero for his testing.

Joshua Eason for finding the speech bug.

Carl Dickson for his great formulas.


Easier pan/tilt position configuration

When selecting both pan and tilt attributes, you can quicly select a static position or offset and scale the current movement.

Quickly configure the pan and tilt of moving heads

Quick row/column selection

You can select a whole row and column by clicking on the border of the grid. Click and drag the mouse to select multiple rows/columns at once. If you put all attributes of a group on the same row or columns, you'll now be able to quickly select the whole group.

Quickly select whole rows and columns in one click


128 DMX universes: Twice the fun with 64 ArtNet + 64 sACN universes (up from 32+32). Existing Ultimate licenses get this increase for free.

Support animated GIFs: Animated GIFs are really popular these days and you can now use them in the media library.

Consolidate media files: Copy all files inside a directory to make it easy to move a project to another computer.

Bigger sources in the minimap: Now make sure the sources are big enough even when the grid is really zoomed out.

Reduce media latency: Reduce video capture, Spout and video playback latency by about 5-20 ms depending on the video resolution.

Reduce the app start-up time: Faster by about 500ms.

Filter groups and grids: In the grid manager (view/grids menu), you can now type keywords to quickly find what you want.

See grid/group references: There's now a button next to the attribute id in the grid manager allowing to see all grids referencing an item.

HSL capability for DMX output: You can now select the HSL capability in the template editor to output the hue, saturation and lightness values.

Configurable range shapes: You can now select how the source's range affects the power over the distance.

Improve the attribute range configuration control: When hovering with the mouse, you now see if you'll change the min or max or both . Right-clicking in the middle allows moving the whole range at once.

Drag and drop for media library and template editor: You can now rearrange items in the media library and template editor by simply using drag and drop.

Comments in formulas: To remember some tricky parts, you can now write comments. Write /* to start a comment and */ to end it. If you want the remaining of the formula to be a comment, write //.

More robust taptempo: The taptempo functions now better handle cahotic inputs like music.

Easily sync all sources: There's a new button next to the grid monitor button at the top to reset the time of all sources. It replaces the sync button that was in the formula editor.

Rotate attributes: There's a new item in the Edit/Attributes menu to rotate the selected attributes by 90 degrees.

Zoom with the mouse wheel: The zoom now works with ctrl+mouse wheel.

Lower music frequency: You can now set the lower frequency for the music analysis.

Pan/tilt invert in the patch: To ease controlling moving heads, if some are inverted in the real-world, you can now invert the pan and tilt in the patch window in order to simplify the programming.

Pan/tilt offset in the patch: Useful when adapting an existing project file to work with different moving heads in a new venue. You can quickly align the fixtures to fit the original programming.

Save ArtNET and sACN settings: The settings are now saved in the project file. Everything except the network adapter, which is specific to the current computer.

Reset wave generators on grid activation: To be more consistent, all wave generator functions now restart when a grid has just been activated.

Better video capture robustness: Better error handling and retry if a video source like a webcam gets disconnected.

Fix UI freezing when zoomed out with 10000+ attributes: This was too heavy for the video card. Optimizations have been done to prevent this overload.

Fix "Recursive call to Automation Peer API is not valid": Was happening when another software for accessibility was trying to inspect the controls inside Lightjams and invalid data was returned.

Fix speech recognition not working without start phrase: When leaving the start phrase empty, words weren't recognized properly.

New Functions

speech.recognized.latest([min], [max]): Latest recognized phrase id, optionally including phrases between min and max only.

latch(updateNow, value, [initialValue]): Now optionally provide an initial value, which is returned before the first update trigger is received.

latestIndex(value0, value1, ...): Return the index of the latest received positive value.

isBetween(value, min, max): Return 100% if the value is between min and max, inclusively.

grid.attributeValueAt(x, y): Return the latest value of an attribute. Handy to sync other attributes.

randOrganic(time): Random organic wave. A randomly dephazed wave with a very long repeat cycle for a natural feel.

V. 410 April 20, 2017

The thank you first:

Peter Reinisch for his good suggestions.

Scott Wood for the global sliders idea and testing.

Jack De Visser for his testing.

Alan Key for his MIDI testing.

Isaac Caballero for his testing and ideas.

Larry Hundertmark for troubleshooting the missing MIDI message bug.

Francis gagnon for all his questions on the forum.


Duplicate link attributes layout: Rename the "duplicate with shared attribute layout" to "duplicate link atributes layout". This better represents what the feature does, that is, to link a duplicated grid to a master grid. The goal is to be able to modify only the master grid when the attributes change instead of having to modify all grids.

Unlink a grid: You can now unlink a grid created using the duplicate link attributes layout feature. It's handy if you ever change you mind and want to modify some attributes for a specific grid.

Global sliders: You now have 64 configurable sliders that can be used to share values between grids. Go in the view/sliders menu to see them. Double-click on the name of a slider to change it. To use a slider's value in your formula, check the slider(index) function.

Output rate now up to 60: The max output rate (fps) is now 60 instead of 40. The standard DMX output rate is 44 but for some interactive LED installations, you may want to go higher.

Handle MIDI reset messages: Receiving a reset message (0xff) now clears all notes and controls. A stop sequence message also clears all notes.

More TUIO cursors: Up to 128 TUIO cursors are now supported (up from 16). Improved performance too.

Music upper frequency: You can now change the upper frequency of the spectrum analyser. The range is from 500 Hz to 11000 Hz.

Update Spout: Now using version 2.006.

GRBW: Green, red, blue and white color mixing is now supported in the template editor.

Better shader mode performance: Now uses at least 60% less memory. Also reduces the memory usage when using many sources.

Faster fixture patching & deleting: It takes less time to add and delete many fixtures.

Faster multiple attribute selection: Sometimes it was taking a few seconds when selecting many attributes (+10000) in the list. It's now instantaneous.

Easier to click the expand arrow in the grid manager: The arrow clicking area is now bigger.

Fix grid manager selection problem: In the grid manager, when the activation or speed slider was selected and you selected a new grid or group, the selection reverted back to the parent group.

Close the grid manager when pressing enter to select a grid

Improve receiving ArtNET from the same computer: To avoid echo problems, was only able to receive ArtNET coming from the same computer when using the network adapter. Now it works when the in&out network adapters are different or the in&out subnets are different.

ArtSync: Optionally send ArtSync packets to enable syncing all node outputs to make sure all fixtures are updated at the same time. Go in the view/configuration and ArtNET tab to enable this option.

Fix missing MIDI note messages: Some devices like the Roland SPD-SX send a note off right after the note on message. Since the two messages have the same timestamp, nothing was happening in Lightjams. Now there will be at least a pulse.

New Functions

strobe(time): Generate a strobe effect in sync with the DMX output.

distance(x1,y1,[z1], x2,y2,[z2]): Can now calculate the distance between two points in 3D.

V. 385 December 7, 2016

The thank you first:

Scott Ingham for spotting a few bugs.

Rob Mann for RGBA testing and the merge idea.

Michael Potvin for reporting the invisible attribute bug.

Sébastien Atoch for his great ideas, including the optional falloff.

Jack for his testing.

Roger Rowland for his testing.


Support 16 bit color depth: The RGB, RGBW and RGBA capabilities in 16 bit now really generates 16 bit of data per component.

Run at startup option: Lightjams can now automatically start and load the last project when the computer starts. Go in the View/settings and general tab. It's handy for permanent installations.

Better transitions between grids with different precedences: The grid precedence is like a layer number and the grid activation determines its opacity. So when 100% active, it completely overrides lower precedence grids. But when lower than 100%, the attributes are merged to give nice transitions.

More sound cards: Now up to 8 sound cards/inputs are supported. It's useful when using a ASIO enabled sound card with many inputs like the MOTU 8pre.

Sound loopback (what u hear): You can now tell Lightjams to analyze the music you're hearing, even though your sound card driver doesn't have a loopback.

Update Spout: Spout has been updated to use the latest changes from August.

Add -loadLastProject command line option: Loads the most recent project file.

Add -locked command line option: Starts Lightjams in a restricted mode, preventing accidental project modifications.

Many performance improvements: Faster project loading, less memory and CPU usage.

More wave shapes: You can now generate square, cross and rectangle waves.

Optional range falloff: Instead of always generating a smooth fade, the range can now be used to abruptly cut the source's power when out of range. This allows generating shapes around the source.

Improve source collisions: When multiple sources want to be at the same position, the first one will take the spot and the other will be stacked. In previous versions, the other sources were frozen, which was confusing.

Offset fixture universes: In the patch window, the change universe button can now offset multiple fixtures in different universes, all at once.

Improve the MIDI output rate: The MIDI output rate was capped at 10 fps to avoid overloading MIDI devices. Now the output is going as fast as possible and for most MIDI devices, the fps is well over 10.

Equidistant gradient colors: When editing a gradient in the color palette, you can now specify to position all colors at equal distance from each other. This eases selecting a color by knowing its percent position when configuring a source.

Fix glitches when first increasing a source delay: Some bad values were added to the history buffer.

Fix bad source merging when using the inactive value: When a source power was "inactive", it was overriding other sources.

Fix intermitent error when loading project Sometimes if a grid was displayed too early while the project was loading, there was an error.

Fix intermitent video color palette error: When clicking the video color palette button while videos were still loading in the media library.

Fix invisible attributes: Sometimes when quickly scrolling, some attributes may be hidden.

New Functions

timer(resetTime, [resetFct]): Return the elapsed time in seconds. Reset when reaching the reset time (set to 0 to avoid auto reset) or when the resetFct is positive. It is synced to the computer's clock for precise timing.

V. 349 July 21, 2016


Enhance network adapter changes: When reconfiguring a network adapter IP or subnet, Lightjams will now properly wait for the changes to take effect.

Add date.dayOfMonth: New variable to make it easier to trigger something on a specific date.

Handle ArtNet 3 poll replies: Use the bind index value to differenciate virtual nodes and other ArtNet 3 improvements.

Less delay when starting a video: About 30ms less.

Prevent computer overload when generating thumbnails: Limit the CPU usage when generating many video thumbnails.

Reduce the delay for live video inputs: Less CPU and memory usage when using live video inputs.

V. 344 May 17, 2016


Handle "All notes off" CC Midi message: This special CC message now sets all notes of the channel to 0.

Smaller ASIO buffer: Reduce the minimum ASIO buffer size (from 256 to 64). It reduces even more the latency (at the cost of less precision for the music analysis).

More transcoding video options: Adjust brightness and contrast. Specify the widht and height.

Improve music analysis precision: Use higher precision music samples at the cost of a little more CPU.

Snap slider mouse positions: When close to 0% and 100%, snap to these positions. Otherwise, we may think we've put it at 0%, but it was like 0.01%, which was confusing.

Fix a bug when editing formula with error in shader mode: A very specific case of bug in a formula when using the shader mode and using a midi input and a syntax error was causing a crash.

Updated to Spout 2.005: Use the latest Spout library - lower latency, better video card support.

V. 338 March 2nd, 2016

The thank you first:

Lynn Jarvis the Spout creator, who helped me with the Lightjams integration.

Molavi Rameen for reporting the ASIO buffer length bug.



Native Spout Support

Spout is now a media source! Multiple senders are supported. It works in 32 and 64 bits, contrary to the old way using SpoutCam. Compatible apps at the moment: Resolume, Ableton Live, Processing, Max/Msp, TouchDesigner, Cinder, OpenFramework, VVVV, Isadora, After Effects, Mapio, Unity3D and more. See Spout for more details.

Lightjams PAD

Upgraded to .Net Framework 4.5

Finally, Lightjams has been upgraded to use the latest and greatest .Net framework. That means better performances across the board. In the other hand, that also means Windows XP is no longer supported.

RGBWA and dimmable effect capabilities: Added capabilities in the fixture editor. The dimmable effect value is multiplied by the master dimmer and grid activations. It is merged in HTP.

Fix for ASIO buffer length: Sometimes the buffer length can't be changed and isn't a power of two, which was causing problem with the music analysis. It's now properly supported.

New license shop: Better integration with Paypal Express checkout to get a more reliable payment system. Some licenses weren't automatically generated.

Show DMX values (0-255 range) in the fixture editor: Now there's an option to switch editing in the DMX range instead of always being in percent. Handy when the fixture manual isn't in percent.

V. 323 November 1st, 2015

The thank you first:

Isaac Caballero for his great feedback.

Michael Potvin for his patch export idea.



Export the patch: You can now export the patch as a html file. This way, you can print it or put it on your mobile phone to help you configuring the fixtures.

Better timing accuracy: Some computers had timing problems. For example, when asking for a 1 second sinus wave, it was a bit off.

Batch add media: You can now add multiple media at once.

Faster media loading: Videos now load way faster and take less memory.

Better video format support: There was a problem with some videos even though the proper codec was installed. Now with a codec pack like LAVFilters, Lightjams can play about anything.

Less intense UI animations: Automatically reduce the user interface refresh rate when the CPU usage is too high. This way, the DMX output stays constant.

Performance enhancement: About 10% less memory usage.

Bug fix for small images: There was a problem with very small media images preventing them to be properly loaded.

Bug fix for RGBW: There was a little bump in the white channel when doing a transition. Now it's smooth!

Bug fix with RGB in 16 bits: The channel count was wrong.

New Functions

music.volume(soundCardIndex, volumePercent): Adjust the sound card volume.

V. 305 August 3rd, 2015

The thank you first:

Isaac Caballero for his great feedback.

Sebastien Atoch for his great feedback.

James Hamilton for finding a bug in the midi output.

Nick Foligno for his feedback on the LightjamsPAD.



Here comes the launchpad app for Lightjams, with 160 fully configurable buttons (label+image+RGB color for feedback sent by Lightjams). Two-way communication with Lightjams using the OSC protocol. Optimized for multi-touch devices. Download LightjamsPAD. Here's a Lightjams project file to help you get started: default pads.

Lightjams PAD


Multiple duplicates: When duplicating a grid or group, you can now specify the number of duplicates you want. Duplicate's name is also nicer than the previous "Copy of XYZ". A number is now appended.

Auto-scroll: When moving items on a grid or making a selection, the grid now auto-scrolls when reaching the borders. This is pretty handy for touchscreens.

Switch all backgrounds at once: New menu option in the grid manager, when right-clicking a group. You can now change all grid backgrounds in one click. Often, all grids of a group are linked to the same background but using different output components. So you won't need to change each grid individually anymore.

MIDI output addresses were changing: When going in the patch window and selecting fixtures patched in a MIDI universe, the addresses were wrongly modified.

Matrix patch - break universe: You can now specify to skip to the next universe after N fixtures when creating a matrix. That's handy for led controllers and led strips. For example, each strip may contain 300 leds and be patched using 2 universes. In this case, you want to break and go to the next universe each 300 leds.

Video transcode to specified width: Instead of always using a width of 256, you can now specify the width of the transcoded video.

New Functions

osc.latest(firstChannel, lastChannel): Return the latest received osc channel with a positive value. Only consider channels between the firstChannel and lastChannel.

V. 281 April 1st, 2015

The thank you first:

Linus Amvall to have very precisely identified the bug in the OSC output.

Daniel Schaeffer who's always testing.

Isaac Caballero for pointing out the problem with the monitor window resize.


Grid zoom

Lots of people requested this feature! You can now zoom out.

Grid zoom feature


RGBA / RGBAW: Support for fixtures with the amber color. You still use hue, saturation and intensity in Lightjams and when the desired hue is close to amber, the amber channel is automatically used.

Fix the OSC messages: Messages weren't properly formatted and most software weren't able to receive them. There was a missing coma at the start of the type tag... Damn!

OSC output bundles now optional: You can now disable OSC bundles and use simple messages instead. Some OSC apps like TouchOSC for iOS don't support bundles.

Better monitor window resize: On some computers, resizing the monitor wasn't working well.

Edit multiple colors at once: You can now select multiple colors in the color palette and edit them at the same time.

New Functions

media.length: Return the length in seconds of a media.

media.time: Return the current playback time in seconds of a media. Handy to automatically start playing the next media.

randInt(min, max): Return a random integer number and make sure it is different than the last one. Handy to make sure there's a change each time something happens (i.e. each music beat).

V. 271 February 1st, 2015


Lightjams Music Player

The new music player is a replacement for iTunes and Windows Media Player, with all the bloat removed. It is tightly integrated with Lightjams (both way communication) and should simplify the creation of light and music shows.
Here's a music player project file showing a way to organize your show and how to sequence the effects for each song.

Lightjams music player


Plug and play: Just start the music player and Lightjams will see it. No need to change any computer settings and use music loopback.

No delay at all: The music is analyzed a few seconds before playing, so the music info is sent to Lightjams at the same moment it is sent to the audio driver for playback.

Very precise music spectrum: Since the music can be pre-analyzed instead of post-analyzed like in the case of live music, more music samples are used to do the analysis.

No volume adjustment needed: The raw music data is used for the analysis, so no need to adjust the volume to get good results.

Send info to Lightjams: More info about what's playing is accessible to Lightjams. You can now use the current playlist id, song id, playback time, BPM and more. Look for the new formulas in music.player.XYZ.

Control the music player from Lightjams : You can start the music, select a song, change the volume... This way, you can completely control the music and light from Lightjams.

Suitable for professional shows: Music is buffered to avoid playback interruptions under heavy CPU load.

No bloat: The Lightjams music player is all about being great at playing music and doing it efficiently.

New Functions

music.player.bpm: The detected beats per minute for the current song.

music.player.nbSongs: The number of songs in the current playlist.

music.player.playing: Whether the music is playing.

music.player.playing(isPlaying): Change the playback state.

music.player.playlist: The current playlist index.

music.player.playlist(index): Select a playlist.

music.player.restart(): Restart the current song. The current song index. Select a song.

music.player.songLength: The current song length in seconds.

music.player.time: The playback position in second.

music.player.volume(percent): Change the playback volume.

V. 268 November 16, 2014


More Output Universes!

32 ArtNET universes (up from 16) and 32 E1.31 (up from 24). Yes, 32 is a pretty nice number :) This also means you can control up to 5440 RGB leds with either ArtNET or E1.31.

32 artnet universes

Adjustable Output Refresh Rate

If your computer can't keep up with your super big project or your lighting fixtures don't like the default 40 fps, you can now change it. Go in the View/Configuration menu and select the new General tab. You can change the output refresh rate (in frames per second) and the input multiplier. The input multiplier determines the rate at which all inputs are processed and grids are updated. For example, when you use a midi keyboard and press keys very quickly, to avoid missing any input events, 80 fps is recommended. This means if the output rate is 40, the input multiplier should be 2. When you don't need to process inputs that fast, you can set the multiplier to 1 as this will save some CPU.

General settings with output and dmx refresh rate


Favorite Network Adapter: When you are disconnected from the network, Lightjams will preserve your network adapter selection and reconnect as soon as the network becomes available. Previously, another network adapter was selected, which wasn't very handy.

Send MIDI Note On at 0%: For the midi feedback, when the value to be sent is 0%, Lightjams now also sends a note on with an intensity at 0% in addition to a note off message. Some midi devices don't understand the note off message.

New Functions

sawtooth(time, [resetFct]): New optional reset parameter for the sawtooth function. For example, to reset each time the grid is activated: sawtooth(10, grid.onactivated). You can use the map.XYZ functions to generate other types of wave. For example, map.sin(sawtooth(10)) generates a sinus wave.

V. 263 September 18, 2014

The thank you first:

Breck to have genereously sent me a Motu 8pre for testing ASIO.

David Moore who's also very generous and sent me the ActiDongle and the Advatek PixLite 4 for testing.



For the music pros out there! You can now use your ASIO device (like the Motu 8pre) to feed Lightjams with music. That means very low latency music acquisition. Up to 4 channels supported.

ASIO music with the Motu 8pre

Better Enttec USB Pro Clone Support

Lightjams was picky about what was expected of an Enttec clone. So picky that very few clones were properly detected. Now instead of trying to automatically detect the usb interface, you explicitly tell Lightjams about your usb interface type (Enttec USB Pro or Open).

Enttec DMX Usb Pro

V. 257 June 20, 2014

The thank you first:

Nick Foligno for his feedback and improvement ideas.

Steve French for his suggestions about midi clock and latchDelta.



MIDI Clock: The clock messages are now handled and you can use them to generate beats and control the speed of your effects. Use the midi.clock.X functions in your formulas.

Better MIDI Out Patching: You can now specify the channel when patching your fixture in the MIDI note and cc universes. Before, you needed to compute the offset corresponding to the channel.

New Functions

midi.clock.beat(clockId): Pulse in sync with the clock ticks.

midi.clock.bpm(clockId): Get the detected beats per minutes of the clock.

midi.clock.speed(clockId): Convert the bpm to a usable value for speed. 60 BPM = 1x speed.

midi.clock.sawtooth(clockId): Generate a sawtooth wave in sync with the clock. Use the map.x functions to generate other types of wave.

midi.noteRaw(channel, note): Get the exact MIDI note value (0-127), without being scaled in percent.

midi.controlRaw(channel, control): Get the exact MIDI cc value (0-127).

inactive: Special value usable in a source's power formula indicating the source isn't sending any power (not even 0%).

latchDelta(updateNow, value, [min=0], [max=100]): Update the stored value by adding the delta value (difference between the current and first values when starting the update). The update starts when updateNow is > 0.

V. 253 March 1, 2014

The thank you first:

Nick Foligno for his feedback and improvement ideas.

Jack De Visser for his testing.

Naaman Meir for his participation on the forum.



Color Palette

At last! New features to easily manage your colors: color palette management, color transitions with any number of points, easy way to sync hue, saturation and intensity attributes to give the desired colors, specify RGB colors and more.
The first image shows the color palette, allowing to manage all your project's colors in one place. You can create solid colors and complex gradients. Update something here and all linked hue, saturation and intensity attributes are updated immediately.

Color palette and gradient editor

The next image shows the color editor. Yes you can specify a pure red easily with the RGB controls! You'll also be able to explore the HSI/RGB mapping and hopefully, better understand what's going on. When creating a gradient, you see the preview right here and your lights are also updated as you make your changes. Live preview!

Edit your colors using the HSL or RGB color model

Finally, you can put all the color attributes (hue, saturation, intensity) on the same grid, select them all and simply choose a color in your palette. When selecting a solid color, the result is easy to guess. When selecting a gradient, the source's power will generate the transition from 0% to 100%. You can control the color transition very precisely and avoid turning around the whole color wheel!

Color palette and gradient editor.

Speech Recognition

You can now trigger your lighting scenes with your voice! You define the phrases (up to 64) you want to use in the configuration window. Then you use the speech.recognized function in your formula.
The default sound recording device is used, as configured in the Windows sound recording panel. This should work with Windows Vista and up (sorry Windows XP).

Speech recognition and DMX lighting. Activate lighting scene with your voice.


Need to remember something important? You can now write a note for each grid.

New Functions

speech.recognized(phraseId): Pulse when the corresponding phrase is recognized.

taptempo.sawtooth(beatValue): Generate a sawtooth wave in sync with the beat. Want to generate a sine wave? Use map.sin(taptempo.sawtooth(...))

V. 240 December 2013

The thank you first:

Igor Ebner, Robin Larsson, Naaman Meir for inspiring the new MIDI output feature.

Manuel Carreras for testing the extra OSC outputs.



MIDI Output

It was the most requested new feature: MIDI output allowing MIDI controllers to give feedback on what's going on in Lightjams. Here it is! You control the leds of your MIDI controller as any other lighting fixtures: simply patch them in the MIDI Note/CC universes. The whole 16 channels are inside the same universe. So you get 16 X 128 = 2048 addresses in these universes.

MIDI output to see feedback from Lightjams status

MIDI "Learn"

The latest received message is now displayed and you can link to it by clicking the button. That's a very fast way to link all your controls in Lightjams without having to constantly look at your MIDI controller manual.

MIDI learn mode

Better Wii Status

Level indicators have been added for all controls, making it easier to see what's going on. The up/down/left/right buttons have been added.

Better wii status

Extra OSC Outputs

You can now send OSC values to a specific address. So you're not limited anymore to using only one prefix for all OSC messages. You do the address configuration in the OSC config panel by pressing the Extra Outs button. Then via the scripting engine, you can add a source and use the osc.send function in your formula to send the exact values you want. Note that all values are sent using the 32 bits floating point type.

OSC extra outputs

Edit Auto-Detected ArtNET Nodes

It's now possible to edit a ArtNET node even when it's been auto detected. This is handy to manually register the unicast universes.

New Functions

midi.note.latest(channel, [firstNoteIndex], [lastNoteIndex]): You can now optionnally specify a range of notes to watch for instead of the whole channel.

osc.send(channel, value1, value2, ...): Send OSC values (max 16) to the address configured for the specified channel. Returns the first value.

V. 225 Oct 2013

The thank you first:

Simon Newton, Steve French and Jason Kyle for finding a bug in the E1.31 output.

Gal Ohr Karmi for pushing the limits again.

Peter Reinisch for testing the video mapping.

Will Raymund for insisting on sending OSC only when something changes.

Quan Gan from Darklight for testing the RGBW color mixing.

Daniel Parks from Quixotic Fusion for testing the video playback.

Igor Ebner for his good questions on the forum.



Fix - E1.31 Output: Packets were malformed causing incompatibilities with OLA and other equipment. For example, many rasPi E1.31 implementations use OLA and had problems receiving E1.31 from Lightjams.

Grid animations use WAY less CPU: Animating the grids to reflect the source's power is now way more efficient. This should save lots of CPU when looking at buzy grids.

Only send OSC values on change: Instead of continously sending OSC values, even when nothing changes, now only the modified values are sent. This should be more gentle on other apps receiving OSC.

Enhanced RGBW: The RGBW engine now gives way better results! The right amount of white is added to give perfect colors.

Memory optimizations: Only create the grid views when you need them. So if your project has hundreds of grids, the view representations will not be loaded upfront. This makes the loading faster and can save around 10%-20% of precious RAM.

Backup license: A new button to backup your license file. Go in the License/View license menu to see it. This is very useful in case you need to restore your OS.

Precise video playback speed: The playback speed is now more accurate. For example, a 4 seconds video played at 0.1x will really take 40 seconds.

media.position(mediaId): New function to get the play head position of a media in percent. This way you can sync your other effects with the playback of your media.

More grid precedence levels: Now 100 precedence levels (0-99) instead of only 3. More room to breathe!

Formula history: Explore new formulas and input modes without fear of losing previous work. Each slider keeps an history of all previous formulas, allowing to temporarily try a different input and revert later.

New Chauvet Fixture Templates

Q-Spot 160 LED


V. 209 July 19, 2013

The thank you first:

Larry Hundertmark for his intense testing playing the drums!

Gal Ohr Karmi for pushing the limits of the MIDI input and needing to use every bit of CPU he can.

Nick Foligno for his great testing.

Derek Parkins also for his great testing.

...Everybody who has downloaded the BETA!

Easy Matrix Patching

A real time saver! You can now patch a matrix of fixtures in a few clicks. You enter your parameters and all the fixtures will be patched in the proper order and default grids for each attribute types will be created for you. For example, for a 80x12 matrix using RGB fixtures, 3 grids (hue, saturation and intensity) will be created, letting you quickly start creating effects. This also works great with other types of fixtures like moving heads.

Easily patch a matrix of dmx fixtures

Video Input ++

You can assign a live video input (webcam, capture card, video stream...) to any of the 64 media bins. Before, the video input feature was able to handle only one video at a time and was used to extract the dominant colors. Now, you can use many live videos as grid's backgrounds, like any other media. Everything you need has ben integrated into the Media Manager.

Video Input

* If you are using the old video input feature, you'll need to change a few formulas to make it works. Contact me and I'll help you with that.


Yes, you can use video streams from most IP cameras out there and many video servers! You enter the MJPEG or JPEG url (http://...) and Lightjams will pull the video from the server. This even works over the internet so you can use a video stream from the other side of the planet.

Media Video Monitor

View the actual videos as they are currently played. This is very handy for video inputs in order to do troubleshooting.

Media monitor for all videos

Dominant Colors For All Media

The dominant colors are extracted from all of your media. This allows you to create great ambient lighting, matching your media.

Dominant color from your media

Hue Shift

Easy way to get the complementary hue and many other variations in one click! Just select your hue attributes on the grid and select your hue shift mode.

Date & Time

That's a must for any architectural project! You can now control your effects based on the current date and time. This is perfect to create an automated scheduler. The sunrise and sunset times are also available and take into account your position (latitude&longitude) on the planet. It's now very easy to automatically activate your lighting after dark. The date and time panel lets you quickly test your schedule by temporarily modifying the current date and time.

Date and time configuration

Faster MIDI

The MIDI processing is now faster than ever! That means even lower delay and lower CPU usage when handling lots of MIDI messages.

MIDI Note Names

Display the names of the midi notes using the C3 or C4 standard. This makes it easier working with other music software.

Display the midi note names

MIDI Activity Monitor

To make troubleshooting even faster and easier, you can now see directly in the MIDI config panel whether you are receiving MIDI messages and on which channels.

Show activity in midi note on and control messages

Quickly Change MIDI Channels

You can now select multiple sources linked to different MIDI notes or controls and change their channels all at once. Just select your sources and use the channel box.

Stop Sending DMX When Inactive

When a universe is inactive, meaning all grids with fixtures in this universe are inactive, the DMX output for this universe stops. As soon as some grids are activated, the dmx output will resume. This behavior is handy when working with multiple consoles and sending ArtNET data as it avoids having to merge data.

New Functions

time.hour: The hour component of the current time. From 0 to 23, where 0 is midnight. Always expressed using a 24-hour clock.

time.minute: The minute component of the current time. From 0 to 59.

time.second: The second component of the current time. From 0 to 59.

time.isDark: 100% when we're between the sunset and the sunrise. In other words, if it's dark and we need some light.

time.isBetween(hour1, [minute1], hour2, [minute2]): 100% when the current hour and minute (optional) are inside the specified range. Hour is always expressed using a 24-hour clock.


date.year: The year component of the current date.

date.month: The month component of the current date. From 1 to 12, where 1 is January.

date.dayOfWeek: The day of the week of the current date. From 1 to 7, where 1 is Sunday and 7 is Saturday.

date.dayOfYear: The day of the year of the current date. From 1 to 366, where 1 is January 1st. Take leap years into account.

date.isWeekend: 100% when we're Saturday or Sunday.


onChange(value, [threshold]): Pulse when the value change and optionally specify the threshold. For example, onChange(midi.note.latest(1)) will fire each time a new midi note is pressed on channel 1.

delta(value): Return the difference between the last iteration value and the current value. That's the instantaneous rate of change.

New Martin Fixture Templates

Mac 600

New Chauvet Fixture Templates

SlimPar 64

V. 175 May 3, 2013

For your pleasure, there's a video tutorial showing the new video mapping feature. I'm giving you these video loops to get started.

Video Mapping

That's a pretty exciting new feature! You can now use videos and still images as grid's backgrounds! This makes it very easy to map videos on your LED wall or just display texts using still images. It's not only for leds; you can also use videos as a way to generate movements for your moving lights for example, or any other fixture attributes. You can load up to 64 media files from your hard drive and mix them in real-time using all the Lightjams interactive capabilities. Many thanks to Peter Reinisch for inspiring me this feature.

Video Pixel Mapping and media server

Auto Multi-Universe Patch

When patching hundreds or thousands of fixtures like RGB leds, you usually end up using multiple universes. When patching in the Artnet or E1.31 universes, Lightjams will automatically patch multiple universes when needed. So you don't need to patch 170 RGB leds at a time anymore!

Patch thousands of led at once, spanning multi-universes

24 sACN E1.31 Universes

The number of sACN E1.31 output universes is now 24. That's enough for 4080 RGB leds.

Streaming ACN - 24 output universes

Shared Attribute Layout

You can have a master grid containing your layout and then you just duplicate it with the share layout option. This makes it way easier to modify your layout at only one place if something changes. The project file is also way smaller and the memory usage too. Also thanks to Peter Reinisch for this idea.

V. 165 March, 2013

Enhancements & Fixes

All RGB variations: RGB, RBG, GRB, GBR, BRG, BGR. LED manufacturers use all RGB layouts you can imagine. Now it's well supported.

Double-click to swith edit mode (sources/attributes): You can now double-click an item on the grid to automatically switch edit mode and select it. This is an alternative to pressing Ctrl-Q.

Escape key closes any window: Pressing the escape key now closes any opened layout window: group, patch, fixture editor, formula help...

Music analyser with more swing: Some more math to make the music frequency bands go crazy. The low frequencies tracking is now more accurate.

Display the number of selected items: The number of selected attributes on the grid and the number of selected fixtures in the patch window are now displayed. This is handy to validate you've selected all the items you wanted.

Mirror selected list attributes: To help quickly select attributes on the grid, you can now do your selection in the attribute list (on the right) and use the search box. Then you go in the Edit/Attributes/Mirror List Selection menu (or press Ctlr+Shift+M) to automatically select the corresponding attributes on the grid. Thanks to Derek Parkins for this idea!

Limit OSC monitor refresh rate: When receiving/sending lots of OSC values, the monitor was taking lots of CPU. Now the refresh rate is capped.

Fix - Undo/Redo after changing mode: There were problems with undo/redo after changing a fixture mode. The attributes on the grids weren't properly updated.

Fix - Save fixture action time: When changing the duration of an action in the fixture editor, you weren't able to save.

New Functions

Tap tempo and BPM are coming! Thanks to Steve French from Volt Vision for his help on this.

tapTempo.pulse(beatInput): Generate pulses based on the detected tempo.

tapTempo.bpm(beatInput): Return the number of beats per minute of the detected tempo.

tapTempo.speed(beatInput): Convert the beats per minute of the tempo to a percent value usable for speed parameters.

bpmCounter(beatInput): Count the number of beats per minute in real-time. The result is in BPM, not percent.

bpmCounter.speed(beatInput): Convert the beats per minute to a percent value usable for speed parameters.

midi.note.latest(channel) : Return the latest pressed note on this channel.

smooth(time, value): Average values over the specified time. This is handy when handling jittering signals like Wiimote accelerometers.

New Chauvet Fixture Templates



COLORband Pix-IP

COLORband Pix-M

Core 3x1

Core 3x3


Intimidator 150

Intimidator Beam LED 350

Intimidator LED 150

Intimidator Spot Duo

Intimidator Spot LED 350

New High End Fixture Templates

Studio Color 250

Studio Color 575

New Robe Fixture Templates

ColorSpot 1200E AT

ColorSpot 700E AT

ColorWash 1200E AT

New Vari-Lite Fixture Templates

VL3500 Spot

VL3500 Wash

V. 159 February, 2013

This is a stabilization release, following the big release of last December, with a few fixes and enhancements based on your feedback. As always, thanks for your amazing support! Remember to join the brand New Google Group!

Enhancements & Fixes

Better video dominant color analysis: The video analyser has been much improved. The result is really nice looking and the light colors can now really closely follow video colors.

Handle formula errors when saving/loading project: It was possible to save a project containing formula errors. However, the project couldn't be loaded back! Now the last valid formula is saved and if for any reason there is a formula error when loading a project, then the remaining formulas will be loaded and you'll be able to correct the formula with errors.

Grid precedence not respected with hue attributes: There was a merging problem. Now the merge is done properly, with respect to grid precedence.

New Functions

transition.hue & transition.saturation : Compute nice transitions avoiding the hue to go around the color wheel and go straight to the new color instead. This looks like transition in the RGB color space with the added benefits, since we're using the HSL color model, of being able to independently control the intensity.

switch(valueToMatch, case1, value1, case2, value2..., [defaultValue]) : Compare the valueToMatch with the cases. If a case equals the valueToMatch, then the corresponding value is returned. If no match is found, return the defaultValue or last value.

selectCondition(condition1, value1, condition2, value2, ..., [defaultValue]) : Return the first value which condition is true (>0). If no condition is true, return the defaultValue or last value.

pingCounter(from, to, incrementNow, [resetFct]) : Ping-Pong counter. +1 when the incrementNow parameter is positive. Count backward after reaching the to value. Reset when the resetFct is positive.

V. 152 December, 2012

First of all, I have to thanks the people who've helped me coming up with new feature ideas and doing the testing:

Cory Helmuth from the Christmas lighting community for insisting on getting sACN input and a proper visualizer. Thank you so much Cory!

Peter Reinisch for his continuous involvement in testing. Thanks for all your great feedback!

Stephane Barbeau for his great ideas about how to do a useful 2d visualizer.

Oliver Kulpsoo for his testing and ideas about how to do proper merges and transitions.

There's a new getting started tutorial video showing many new features along the way. So even long time Lightjams users may learn a few tips!

Updated Grid Manager

It is now possible to create a hierarchy and group your grids in a way that makes sense for your show. Each group has his activation and speed sliders affecting the underlying groups and grids. So when you deactivate a group, all his children are deactivated at the same time. You can move groups and grids around with drag and drop.

Organize your light effects into groups

2D Visualizer

Finally you'll be able to see the result of your work without having the real fixtures at hand! The visualizer primary purpose is helping your creative process by quicly giving you a feel of the movement, color and intensity. Unlike a 3D visualizer you don't see exactly where the light rays go but you only get a feel of it. On the other side, a 3D visualizer is a nasty beast to configure and in a sense, may get in your way in the early stage of your creative process.

Organize your light effects into groups

You can press Ctrl-M or the little monitor icon to see the result using the fixtures and positionning of the current grids. I usually create dedicated layout grids for this purpose where I position the attributes to mimic the physical world. The visualizer takes into account the hue, saturation, intensity, shutter, iris, pan and tilt attributes.


You can now import your effects from other projects into your current one. You can optionally import the patch. In this case, any conflicts are simply ignored. For example, if you already have a patched fixture with the id A and you import a patch containing a fixture A, then no change will happen.

Import effects and patch

sACN Input

Now with 16 input universes over sACN. As Cory told me, this is essential to enable sequencing the effects from an external software like Vixen that can't output ArtNET. I'm sure the Christmas lighting community will appreciate using the other software they have to talk to Lightjams.

Streaming ACN - 16 input universes

Shader Mode

This one is a bit geeky :) When you feel you need many sources to do an effect and that the all sources have the same formula and the only thing that changes is the position of the sources, then you should use the shader mode. Using the shader mode, each cell targetted by the source becomes independent and is updated by evaluating the source's power formula. Each cell has its x and y position. For example, if you use px as your power formula (which is the x position in percent) you'll see a horizontal gradient. Another example, as illustrated by the screenshot, if you use rand() as your formula, then each cell will have a different random number. Without the shader mode, you'd need one source per cell to achieve the same effect.

Source shader mode

Wave Shape and Speed

As shown in the previous screenshot, you can now configure the source's wave shape and speed. So instead of only circle waves, you can now have ellipses, horizontal and vertical lines. The speed profile determines how the wave propagates with delay. You can now make it accelerates and decelerates.

Mini View

At the bottom of the screen, you can see a zoomed out version of the grid you're working on. You can click on it to go at a specific position.

Grid/Group Attribute Id

To simplify effect sequencing, you can control grids and groups activations by using their activation and speed attributes. They work like any fixture attributes. See this sequencer tutorial video.

Duplicate and Delete Templates

You can now duplicate a fixture template to create a similar one. And when you don't need a template you can delete it. These are basic features that was badly missing before! Note that even if you delete a template, if you open a project using this template, it will be readded to your library. So you can't really break your old projects by deleting a template.

Organize your light effects into groups

New Functions

Functions to control moving head pan and tilt in order to track an object with its x and y position. The math is done for you! So if you track objects with a Kinect or other devices, Lightjams can calculate the proper pan and tilt of your lights. The screenshot shows a red source being tracked by the 4 moving lights. The visualizer shows that the lights are pointing in the right direction! I'll create a demo project for it soon so you can see the formulas in action.

Calculate pan and tilt of moving lights to track an object

motor.pan(gotoDegrees, maxMotorDegrees) : Calculate the optimal motor command to go to the requested angle in degress. The maxMotorDegrees parameters tells what sending 100% to the motor means. Most moving heads can go to 540 degrees.

math.angleBetween(x1, y1, x2, y2) : Calculate the angle in degrees between two points. For example, knowing the position of your light and of another object, you can use this result with the motor.pan function.

math.elevationAngle(x1, y1, z1, x2, y2, z2) : Calculate the elevation angle in degrees when looking from the point 1 to the point 2. The z1 and z2 parameters are the height, for example the height of the ceiling where your light is fixed. The elevation angle is then used to control a moving light tilt.

latch(updateNow, value): Store a value which is updated when the updateNow parameter is greater than 0. For example, if you want to set a new random value each second: latch(pulse(1), rand()).

music.X.powerband: The music band index with the highest average. This is the primary frequency band or the band with the most power over time.

V. 128 July 19, 2012

Streaming ACN - sACN E1.31

I hope this will get some people excited: new output capability of 16 sACN universes. Multicast and unicast universe configuration. When using multicast, the system is as close to plug and play as possible.

Streaming ACN - sACN E1.31 Configuration

Handy Enhancements + Stabilization

Memory Optimization. Drastically reduces the memory usage when using large number of attributes on the grids, mostly when doing pixel mapping. This makes Lightjams really more responsive in all regards.

Music Analyser Swap. You can now quickly reconfigure which music analyser (sound card) corresponds to which ID. So if you've linked all your effect to music.1 and now want to use another music analyser, you can do it in one click.

Bigger Grids. The maximum grid size is now 400x80 instead of 80x80. Handy to handle these long LED strings.

Artnet In/Out Network Adapter. You can now use a different network adapter for artnet input and output. This lets you use Lightjams as an artnet bridge.

Multi IP Per Adapter. You can now assign multiple IPs per network adapter and use them properly inside Lightjams. Handy when you run multiple artnet apps on the same computer and want to avoid conflicts.

New Functions

sequence(totalDuration, crossfadeTime, resetFct, fct1, fct2, ...): This is the non looping version of the loop function. When reaching the end, the last fctX will set the value. When the resetFct value is greater than 0, the sequence restarts.

counter(from, to, incNow, [decNow], [resetFct]): Two new parameters. The decrementNow allows to count backward and the resetFct allow to reset the counter to the from value.

toggle(value): Toggle between 0% and 100% each time there is a big beat in the value.

onbeat(fct, [multiple], [offset]). Two new optional parameters: multiple and offset. Multiple is to track 2nd, 3rd, 4th... beats instead of triggering at each beat. The offset is to specify on which beat to trigger.

timeout(time, value): Pulse if the value never goes over 0% after the given duration. Each time the value is over 0%, the timer resets.

timeoutOrActive(time, value): Pulse if the value never goes over 0% after the given duration or exactly when the value goes over 0%.

V. 114 April 1, 2012

Handy Enhancements + Stabilization

OSC input mapping. OSC is wonderful. The problem is, right now, it's a jungle. Every device sends its data using a different address scheme. Lightjams now has an easy to use LEARN mode, letting you handle about anything.

Handle All OSC Numbers. Only float numbers was handled before. Now Lightjams handles float, double, integer and long. These are all different representations of what us human call numbers.

MIDI auto-reconnect. If a midi cable ever get loose, just re-plug it and Lightjams will automatically reconnect. No need to go in the MIDI config window anymore. MIDI is now plug and play.

Music analyser with more "swing". The music input is now more responsive and the beat detection part has been greatly improved. Lightjams feels the music like never before!

Performance Improvement. As always, the performance has been improved. Sources are computed more efficiently (about 30% improvement).

Fixes. Lots of cosmetic fixes here and there to get a really solid release.

V. 99 December 29, 2011

Custom Grid Size

Grids can now be resized to perfectly fit your effect. The maximum size has been increased from 45x40 to 80x80.

DMX Controller - Resize

Source Color Tag

To help you differenciate your sources, you can assign them colors.

Tag your source

Grid Deactivated Visual Indicator

When a grid is deactivated (activation slider at 0%), you can see it more easily. When the grid's name is yellow, it is deactivated.

Grid Deactivated Visual Indicator

Fast Grid Switching

New keyboard shortcut to instantly show a grid. Press CTRL+Number.

New Functions

grid.powerAt(x, y): Get the resulting power at the specified position. Handy when using multiple sources and needing do to some logic based on the final result.

trigger(activation, duration, thresholdDown, thresholdUp, delay): More powerful trigger function with better control. The delay param indicates how long to ignore any input before re-triggering.

xToPercent and yToPercent: Simplify working with absolute source's position and then convert it back to percent at the end.

New Martin Fixture Templates

Atomic 3000


Mac 101 RGB - CT - CLD - WRM

Mac 250 Entour - Krypton - Wash

Mania SCX 500 - 600 - 700


Wizard Extreme


Download all templates at once by loading this project.

New Chauvet Fixture Templates

COLORado IP - Tour - VW

Legend 1200E Wash

Legend 412

Q-Wash 260 LED

Q-Wash 560Z LED


Download all templates at once by loading this project.

V. 90 November 8, 2011

Embedded Fixture Templates

To save you some headaches, used fixture templates are now saved in the project file. In most lighting consoles, you need to manually save/import custom fixture templates in order to use them on another computer. No point being like everyone else. When you open a project file on a computer not having your custom fixtures, they will automatically be imported. This is also a nice and simple way to share your templates by just sending a single project file.

Edit Capability's Name

In the fixture editor, you can now change the default capability's name for something more descriptive. There are many pre-defined capabilities, but if your fixture has some exotic features, you can now name the capability accordingly.

DMX Fixture Editor

More Robust Video Capture

Better integration with DirectShow video cards. Some video drivers have difficulties running continously (all day long). Noneless, Lightjams compensates by monitoring the capture performance and resetting it if necessary.

Faster Startup Time

Lightjams now starts in half the time it used to. Good software needs to be fast. I always keep an eye on this. So the "Just A Sec" splashscreen is a bit closer to reality.

DMX Controller

New Helper Functions

Three new functions: trigger, loop and randloop. The trigger function is handy to activate a grid or effect after an event. The loop and randloop cycle through multiple functions and do a nice crossfade while transitionning. These functions are perfect to create complex shapes from simple functions.

Date and Time Functions Removed

These are undocumented and slow functions. I'm planning to add back some proper date and time support soon, primarily for architectural lighting.

64 Bits Compability Fix

When using lots of memory, make sure Lightjams still run smoothly.

V. 82 September 17, 2011

Native OSC Input

You've asked for it. Here it is. Lightjams can now receive OSC messages and you'll be able to control everything with it. It is now possible to use your fancy music sequencer and super VJ software to control dmx lighting through Lightjams!

OSC and shapes input

Easy Shape Generator

Just getting started and want to generate some simple shapes like sine and squares? Now you can do it in a few clicks, without typing any formulas.

OSC and shapes input

Hue Merge Mode

When crossfading grids sending values to the same hue attribute, the resulting hue, based on each grid activation, will be generated instead of using a LTP merge. This way you'll be able to easily fade between hues.

V. 79 September 2, 2011

Hot Fixes

Thanks to all of you for reporting these issues.


Enttec Open not detected: The name of the interface isn't the same on all computers. Now if the interface isn't a pro or DMXKing, it is assumed to be an Enttec Open.

Locale problem with decimal numbers: Now always use the dot to represent decimal numbers and the coma as an argument separator.

Application not closing properly: Needed to use the task manager to stop the application on some computers.

V. 77 July 16, 2011

Better Music Analyser

The music analyser performance has been improved and is now following the music really closely. Music2Light is better than ever!

Music Analyser - Sync Music and Lights

Easier Array Mode

Instead of using a keyboard shortcut to activate the array mode, there's now a button just for that! You can select multiple attributes and add them to the grid as an array in one click. New menu options are available to reverse the attribute order and even randomize it.

LED array effect

Manual Slider Control

For your convenience, you can temporarily take control of a slider even when linked to an input. This avoids having to select the manual input mode just to do some testing and then go back.

DMXKing Interface Support

The DMXKing ultraDMX is an alternative to the Enttec Pro interface. The good thing is, it is much cheaper! Lightjams still auto-detects the plugged USB interface. Be it a DMXKing or Enttec. (Ok, ok; that was an easy feature since DMXKing interface is compatible with the Enttec pro!)

DMXKing - USB to DMX interface

Enttec Pro Fixes

Problem with the output rate setting at 0, meaning maximum speed. USB interface conflict when running Lightjams and Light Jockey on the same computer. Now the Enttec Pro is properly detected.

Little Clean-up Here And There

I like keeping the house clean. Now I can relax and enjoy the show ;)

V. 64 February 17, 2011

Bigger Grids!

The grid dimension is now 45x40. Each cell is also bigger on screen for better readability. There are many ways to scroll: arrow keys, right-click and drag (like in google maps), click the scroll buttons and click on the minimap (dynamic grid thumbnail).

Allows to create fixture groups

TUIO with 128 Objects

Can now track up to 128 TUIO objects instead of 64. More fun for sure.

CYM Fixture Capability

Some manufacturers like Varilite invert the yellow and magenta channel needing the CYM capability in addition to CMY.

Proper LTP

When multiple grids target the same fixture attributes, the latest activated grid has the highest precedence. This applies to all LTP attributes like pan, tilt, gobo... HTP attributes like dimmer and intensity still work like in the old days.

Faster! (again)

Faster than ever: faster project loading, faster display and faster DMX output. Lightjams is more than ever suitable for really large projects.

V. 60 January 25, 2011

Fixture Groups

Give your fixtures a group name to be able to find them quickly. Set the group name in the patch window. This allows you to tag your fixtures and search and sort them accordingly in the attribute list. When you have lots of attributes, you'll be able to work with only a subset at a time.

Allows to create fixture groups

Memory Usage Optimization

Lots of memory usage optimizations when using multiple grids. Almost 10 times better.

Smoother Grid Animation

Better grid animation using less CPU.

Paste Attribute Arrays

New shortcut key to paste an array of attributes at once: select your attributes and hold the shift key and click on the cell at the end of the desired array.

Allows to create fixture groups

Enttec Open DMX USB interface Support

At $60 USD, this interface is really the less expensive on the market. It provides a somewhat slower refresh rate at 25 fps but is really enough for testing purpose or hobbyist. Lightjams automatically detects whether a pro or open interface is connected. No configuration needed.

RGBW Support

Native support for RGBW LED fixtures. The white channel is automatically managed by Lightjams.

And Lots of Fixes Here and There

Thanks to all people for reporting issues and particularly to Jarek and Daniel. Good job guys!


Look at the new command line doc page

What's next? Try Lightjams for free!

©2009-2024 Lightjams inc. All Rights Reserved - The DMX Lighting Controller Software for Live Performances. Proudly made in Montreal, Canada.