Lightjams is always getting better. Thanks for your great feedback!
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.
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.
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.
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.
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.
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.
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.
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.
music.volume(soundCardIndex, volumePercent): Adjust the sound card volume.
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.
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.
osc.latest(firstChannel, lastChannel): Return the latest received osc channel with a positive value. Only consider channels between the firstChannel and lastChannel.
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.
Lots of people requested this feature! You can now zoom out.
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.
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).
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 ease 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.
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.
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.
music.player.song: The current song index.
music.player.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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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!
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!
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).
Need to remember something important? You can now write a note for each grid.
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(...))
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.
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.
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.
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.
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.
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.
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.
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.
Q-Spot 160 LED
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!
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.
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.
* 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.
View the actual videos as they are currently played. This is very handy for video inputs in order to do troubleshooting.
The dominant colors are extracted from all of your media. This allows you to create great ambient lighting, matching your media.
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.
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.
The MIDI processing is now faster than ever! That means even lower delay and lower CPU usage when handling lots of MIDI messages.
Display the names of the midi notes using the C3 or C4 standard. This makes it easier working with other music software.
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.
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.
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.
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.
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.
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!
The number of sACN E1.31 output universes is now 24. That's enough for 4080 RGB leds.
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.
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.
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.
Intimidator Beam LED 350
Intimidator LED 150
Intimidator Spot Duo
Intimidator Spot LED 350
Studio Color 250
Studio Color 575
ColorSpot 1200E AT
ColorSpot 700E AT
ColorWash 1200E AT
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!
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.
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.
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!
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.
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.
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.
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.
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.
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.
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.
To ease 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.
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.
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.
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.
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.
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.
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%.
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.
Grids can now be resized to perfectly fit your effect. The maximum size has been increased from 45x40 to 80x80.
To help you differenciate your sources, you can assign them colors.
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.
New keyboard shortcut to instantly show a grid. Press CTRL+Number.
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: Ease working with absolute source's position and then convert it back to percent at the end.
Mac 101 RGB - CT - CLD - WRM
Mac 250 Entour - Krypton - Wash
Mania SCX 500 - 600 - 700
Download all templates at once by loading this project.
COLORado IP - Tour - VW
Legend 1200E Wash
Q-Wash 260 LED
Q-Wash 560Z LED
Download all templates at once by loading this project.
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.
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.
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.
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.
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.
These are undocumented and slow functions. I'm planning to add back some proper date and time support soon, primarily for architectural lighting.
When using lots of memory, make sure Lightjams still run smoothly.
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!
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.
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.
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.
The music analyser performance has been improved and is now following the music really closely. Music2Light is better than ever!
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.
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.
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!)
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.
I like keeping the house clean. Now I can relax and enjoy the show ;)
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).
Can now track up to 128 TUIO objects instead of 64. More fun for sure.
Some manufacturers like Varilite invert the yellow and magenta channel needing the CYM capability in addition to CMY.
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 than ever: faster project loading, faster display and faster DMX output. Lightjams is more than ever suitable for really large projects.
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.
Lots of memory usage optimizations when using multiple grids. Almost 10 times better.
Better grid animation using less CPU.
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.
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.
Native support for RGBW LED fixtures. The white channel is automatically managed by Lightjams.
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 it for free!