Synesthesia v1.20 Changelog
Synesthesia v1.20 Feature Update
Preferences Update
- all preferences are now saved and restored from disk
-
Syphon/Spout input servers are now selected in the media panel, not
the settings page
-
added new “default scene” preference to set the scene that launches
on startup (pro feature)
- improved UI/UX for preferences page
Scene Library Updates
- you can now load multiple scene folders at the same time
-
added a “primary scene folder” preference to determine which of your
scene folders is used for creating and editing scenes
-
added a dropdown to filter scene library based on scene sources —
built-in, marketplace, custom, or a specific scene folder
-
improved library performance by only rendering visible scene cards
-
created bigger thumbnails for scenes. Added a dropdown to change the
thumbnail size between small, medium, and large
- improved scene library top bar
-
improved scene cards
- collapsed extra options into a toggleable hamburger menu
-
cards now display gpu intensity, tags, source, and description
-
hid the edit and delete options for built-in and marketplace
scenes, which can only be duplicated
Pane Resizing
-
the right panel and preview window can now be resized to configure your workspace
FPS Customization
-
added new dropdown in settings to set a specific FPS for
Synesthesia, ranging from 30 to 144. For Windows users, you must
first turn off V-Sync to use this dropdown, otherwise V-Sync will
manage FPS
-
added an FPS slider for pro users that can smoothly adjust the FPS.
This can be used to control the speed of feedback-based effects. The
slider must be enabled in settings, then it will appear in the
“General” meta controls group
Scene Editing Improvements
-
added new Scene Configuration GUI
-
instead of manually editing scene JSON, you can now fully
configure a scene with a GUI in the right panel. Edit metadata,
add controls, passes, scene images, transitions, etc.
-
scene.json has been removed from the built-in IDE, since all of
its functionality is now accessible through the configuration
GUI
- improved UX and bugfixes for the IDE
- improved scene reloading time
-
control values are now maintained when you reload a scene, allowing
a more continuous editing experience
- added a screenshot button to generate new scene thumbnails
OSC Input Improvements
-
added OSC mapping mode to display a tooltip with the addresses for
all controllable elements
-
look for the OSC button next to the MIDI button in the top right
of the control panel
-
once mapping is active, click on a highlighted element to
display its OSC routes. You can select and copy/paste the text.
Click the element again or click the “X” button to close the
tooltip
-
added lots of new OSC routes and functionality — OSC can now control
everything that MIDI can (and more)
-
trigger control bank actions (for all scene or meta controls),
including default, randomize, lock or undo. Examples:
/controls/bank/scene/random
or /controls/banks/meta/lock 1
-
trigger control group actions, including default, random, and
lock. Examples:
/controls/groups/scene/color/random
or
/controls/groups/meta/color/default
-
scenes can now be launched with a specific preset with the
message:
/scenes/{scenename} {preset}
, like /scenes/churning
"My Cool Preset"
. Note that scene names are now specified at
the end of the address instead of in the argument — they should
be all lowercase with no spaces or underscores
-
trigger presets for the current scene with
/presets
{presetName}
. Add /meta
, /scene
, or /media
to the address
to trigger a specific channel of the preset
-
trigger favslots with
/favslots/{position}
, like /favslots/1
-
control playlists with lots of new routes — launch playlists by
name, trigger next or previous, set the play button state, and
launch a specific playlist item by position
-
launch media by filename or by position. You can also load any
valid video file on your computer by passing the full path,
though this media will not be properly stored and recalled in
presets
-
control Synesthesia’s rendering state with
/render/enabled
-
improved routes for updating controls to be more precise and
flexible
-
you must now specify whether the control is scene or meta, like
/controls/scene/brightness
or /controls/meta/brightess
. You
can also specify a particular scene title to set up mappings for
only that scene, like /controls/hexarray/separation
. These
changes help to avoid any potential overlaps between control names
-
improved addresses for global controls — they now take the form
/controls/global/{type}/{position}
, like
/controls/global/slider/1
or /controls/global/toggle/2
-
added more options for updating controls by adding modifiers to
the control address.
-
add
/raw
to treat the value as raw (scaled to range of
control)
- add
/default
to set control to default
- add
/random
to randomize
- add
/preset
to set to value in current preset
-
add
/lock
to treat the argument as the control's lock state
OSC Controls Output
-
added new option to output control values and information over OSC.
This allows many exciting new use cases:
- support two-way communication with interfaces like TouchOSC
-
automatically update external interfaces to reflect a new scene
-
automatically generate an interface for Synesthesia based on its
OSC namespace using software like The Wizard of OSC or Chataigne
-
record a sequence of control values and play it back using OSC
recording software like The Wizard of OSC
-
use Synesthesia as an OSC controller and control panel for other
software
-
monitor Synesthesia’s state in other software to create side
effects or interactions
- there are two modes for control value output:
-
Output Normalized Values — send the control’s value normalized
between 0 and 1. This does not include motion effects like
smoothing or speed. This option is great to sync Synesthesia with
external controllers like TouchOSC or OSC/PILOT
-
Output Raw Values — send the control’s actual values that are
passed into the shader. This is great for using Synesthesia as a
controller for other software or monitoring its state
-
added option for “Control Address Format.” Scene-Specific-Addresses
will be namespaced by the scene and use the control’s names, like
/controls/hexarray/separation
. Global Addresses will be the same
across all scenes based on the type and order of the control, like
/controls/global/slider/1
-
Synesthesia will output information about the scene when it is
launched, including the scene title, the names and values of all
controls, the names of global controls, and the labels and number of
options for dropdown controls. This allows external interfaces to be
configured on-the-fly for each scene
OSC Audio Output improvements
-
“OSC Output” setting renamed to “Output Audio Variables” to more
accurately indicate its function
-
audio variable output addresses have been updated to be more nested
and readable
Media Improvements
-
added two new meta controls to flip media horizontally and
vertically
-
improved media switching. You will no longer see the previous media
upside down or frozen when switching to a new source
-
added new GLSL functions
_textureUserImage(uv)
and
_textureUserImageAsMask(uv)
, which allow you to sample user media
using any uv coordinates. Note that these functions will not correct
your coordinates based on the texture’s aspect ratio, so sampled
media might look stretched — you can use the new
_correctUserImageCoords(uv)
helper function to fix this
-
added new
_isMediaActive()
function to easily check if any media
is selected
Mouse Uniforms
-
added new uniforms for mouse movement and events
within the visualizer and preview windows (NOTE: for now mouse interaction only works in the visualizer popout window on Mac, but preview support will be added soon). This allows more intuitive interaction with
scenes like drawing or camera control. There are 4 new uniforms:
-
_mouse
emulates the iMouse
uniform available in shadertoy. It
stores x, y, x of previous click, y of previous click. The previous
x and y values are negative if the mouse is not down. These
positions are not normalized — they are pixel integer values. See
here
for an explanation of iMouse
-
_click
stores the state of mouse buttons in the form left, right,
and middle. It will be 1 when pressed, 0 when not
_muv
stores the normalized coordinates of the mouse (0-1)
-
_muvc
stores the normalized coordinates with aspect ratio
correction, so they can be used to draw circles (like _uvc)
Control Updates
-
added new “speed” control types as an upgraded version of “traveler”
controls. These controls use their current value as their speed,
which sets the units changed per second — if the control value is 1,
its output will increase by 1 per second. If it is -2, it will
decrease by 2 per second. This allows more intuitive customization
and properly setting default speeds. The new types are called
“slider speed,” “knob speed,” and “xy speed.” Traveler controls are
deprecated but will always be supported
-
added support for multiple mins, maxes, and defaults for each dimension of XY and
color controls. You can now pass an array of values for all of the
fields
-
the
DEF_COLOR
key has been deprecated — just use an array of three values
for the DEFAULT
key
-
added two number scrubbers to XY controls to allow precisely setting
the values
- color picker updates
-
switched to a new color picker with a palette of common colors
- fixed a bug that prevented typing in the fields
-
you can see a color control’s RGB values by hovering over it
-
added “Alpha Channel” meta control — determines whether Synesthesia
should use the scene’s alpha channel (on) or use 1 for all alpha
values (off)
-
added control group actions. There are now buttons to lock, default,
and randomize groups of controls
-
the order of controls within the scene JSON used to determine the order of global midi mappings, which meant that scene JSON controls had to be sorted by group. This issue has been fixed — the controls can be in any order in the JSON, and global midi mappings will always match the visual order of controls in the GUI
JavaScript Scripting Updates
-
the
setControl
function has been changed. By default, setControl
now takes in raw values that are scaled to the range of the control.
This means that the value will be the same in the JavaScript and the
GLSL. It also takes a new form: setControl(name, values, { options
})
. Values should be an array of values. Options is an optional
object that can customize the control update. Currently the options
are dimension
, which specifies a specific dimension of an xy or color
control, and bank
, which specifies the bank the control belongs to
(scene or meta). This options object allows us to easily add more
options in future updates without breaking the current API
-
added new function
setControlNormalized
to set a control with a
value normalized between 0 and 1. This function also takes the form
setControlNormalized(name, values, { options })
-
setControlDimension
has been deprecated — use setControl
or
setControlNormalized
with the dimension option instead
-
new functions
randomizeGroup
and defaultGroup
to update groups
of controls
- the print function can now take in multiple arguments
-
you can now target meta controls by adding
“meta/”
in front of the
name, like setControl("meta/brightness”, 1.0)
or
randomizeGroup("meta/color")
-
the script will abort when the update function creates an error to
avoid overloading the console with error messages
-
you can now create multiple event handlers for one target
Preset updates
-
preset are now stored by control name. Before they were stored
based on the type and position of the control. This should help
presets be more stable during scene editing, when the order of
controls is subject to change
-
when a scene is renamed, the presets will now be copied over to the
new scene
-
the default preset is no longer overwritten by a scene’s gold
preset. Hitting the default button will always go back to the
hard-coded scene JSON defaults
-
default presets are no longer stored in the
presets.json
file in
your user data, which should declutter that file and improve app
performance
-
when the same scene is launched with a different preset through a
playlist, the scene is not restarted — it just changes preset. This
should help to create smoother playlist transitions
Console updates
-
moved the console to be always visible and collapsible in the right
panel
- added a status indicator to show warnings and errors
-
added checkboxes to log all incoming OSC and MIDI messages to help
with debugging
Miscellaneous
- added a fullscreen button in the preview toolbar that makes this action more accessible
- the pause rendering feature is now much better at limiting CPU usage
- added a screenshot button that saves images to the users pictures folder
- added crash reporting dialogue for Windows, which should help our team debug crashes. Coming soon to Mac