changelog
New Ops
- new op: Ops.Gl.GLTF.GltfVertexAnim - play gltf vertex anim directly with its own timing
- new op: Ops.Gl.GLTF.GltfGeometry - expose geometry from gltf meshes, also possible to expose submaterial geometries
- new op: Ops.Array.EaseArray - apply easing curve to numbers in an array
- new op: Ops.Gl.ShaderEffects.DiscardMaterialAlpha - discard transparent pixels in material textures
- new op: Ops.Templates.ExampleVizOp - example how to code a viz layer op
Op Enhancements
- op enhancements: Ops.Ui.VizObject - if known shows object type in extended title
- op enhancements: Ops.Gl.Shader.WireframeMaterial - now works with colorarea and other shader effects
- op enhancements: Ops.Libs.Lottie.LottieSVGPlayer - can now switch to frame mode which renders a single frame by number input
- op enhancements: Ops.Libs.Lottie.LottieSVGPlayer - output total number of frames of animation
- op enhancements: Ops.Libs.Lottie.LottieTexturePlayer - rework timing interface etc.
- op enhancements: Ops.Libs.Lottie.LottieTexturePlayer - fixed premultiplied alpha problems
- op enhancements: Ops.Libs.Lottie.LottieTexturePlayer - output total number of frames of animation
- op enhancements: Ops.Array.Array_v3 - reverse toggle / fix interpolation of ranges
- op enhancements: Ops.Physics.Ammo.AmmoRaycast - can now work with two points in 3d space, so you can build rays not only with screencoordinates
- op enhancements: Ops.Gl.TextureEffects.ImageCompose_v3 - background color input
- op enhancements: Ops.Gl.Matrix.ArrayPathFollowParticles_v2 - fix bug where particles stopped moving when updating other shadermodifiers
- op enhancements: Ops.Gl.GLTF.GltfScene_v3 - structure now shows mesh subgeometries and has an expose geometry button per subgeometry
- op enhancements: Ops.Gl.ShaderEffects.FogEffect - now works with instanced meshes
- op enhancements: Ops.Gl.TextureEffects.Gradient_v2 - srgb correction
- op enhancements: Ops.Gl.TextureEffects.Gradient_v2 - oklab color space mode
- op enhancements: Ops.Gl.GradientTexture - srgb correction
- op enhancements: Ops.Gl.GradientTexture - oklab color space mode
- op enhancements: Ops.Gl.TextureEffects.MultiDrawImage - shows warning when binding more textures than possible on gpu
- op enhancements: Ops.Libs.TeachableMachines.PoseDetection_v2 - new version, works with new webcam op
- op enhancements: Ops.Libs.TeachableMachines.ImageClassifier_v2 - new version, works with new webcam op
- op enhancements: Ops.Devices.Midi.MidiValueToNote_v2 - new version, output note as proper string type
- op enhancements: Ops.Gl.MeshInstancer_v4 - fix bug with hidden port for "limit instances"
Editor / Ui
- editor: fix dragging port title from parameter panel into patchfield
- editor: switch to op meta tab on doubleclick
- editor: cmd+, hotkey for patch settings
- editor: dont show user ops in example patch
- editor: remove sourcemap reference from libraries to minimize warnings
- editor: fix editor ui elements showing on remote viewer
- editor: multiplayer - show guest users currently in the patch for public patches - allow chat
- editor: use proper patchname in "clone patch" after renaming the patch in settings
Website
- website: fix searching for usernames
- website: fix pagination bug on op-page for userops
- website: fix wrong link to userprofile on op-changelog
- website: sort templates in patch-creation overlay by name
- website: add test for webxr and webxr vr to /browser
- website: favicon better work with both dark and bright themes
Core
- core: if texture size > max possible size, it will show the default stripes texture
Renaming
- Deprecated old WebVr Op
- Deprecated old Lottie.Player Op
- Moved Lottie ops to Ops.Libs.Lottie namespace
- Moved TeachableMachines ops to Ops.Libs.TeachableMachines namespace
new ops:
- new op: Ops.Array.Array3To4 - Converts an array3 to an array4 by filling it up with 1
- new op: Ops.Array.ArrayPack3Simple - Packs 3 individual arrays into an array3 - Without needing a trigger
- new op: Ops.Array.ArrayPack4Simple - Packs 4 individual arrays into an array4 - Without needing a trigger
- new op: Ops.Browser.WebShare - Opens a sharing dialog to share text and images
- new op: Ops.Gl.Geometry.GeometryExtrude - Basic extrusion of flat geometry
- new op: Ops.Gl.Geometry.ReverseVertices - Reverses the order of vertices in a geometry, back facing triangles become front facing ones
- new op: Ops.Gl.Geometry.SvgPathToGeometry - Generate a geometry using from SVG path syntax
- new op: Ops.Gl.ShaderEffects.TransformTextureCoordinates - Transform and repeat texture coordinates of a mesh via vertex shader
- new op: Ops.Gl.TextureEffect.RgbeToFloat32Texture - Convert RGBE texture to a floating point texture
- new op: Ops.Gl.TextureEffects.ColorMapRange - Map the range of color number values to another
- new op: Ops.Gl.TextureEffects.ImageComposeAspectRatio - Adjust aspect ratio of an image compose branch
- new op: Ops.Gl.TextureEffects.RgbToHsvTexture - Convert a RGB Texture to Hue/Saturation/Lightness values as RGB colors
- new op: Ops.Gl.Textures.Float32ToRgbeTexture - Convert a Float32 bit/HDR texture to RGBE format
- new op: Ops.Libs.OpenType.OpentypeFont - Load a font via opentype library
- new op: Ops.Libs.OpenType.OpentypeToSvgPath - Generate a SVG path string of a string using an opentype font
- new op: Ops.Libs.Trackingjs.TrackWebcamColor - Track a position of a specific color in the current webcam stream
- new op: Ops.Math.SchlickBias - Custom easing curve via schlick bias and gain
- new op: Ops.String.ArrayOfStrings - Create an array of strings and optionally attach index-number
- new op: Ops.String.CopyToClipboard - Copy string to clipboard on trigger
- new op: Ops.String.NumberFormatter - Uses javascript-native toLocaleString to format a number to a defined string/currency
- new op: Ops.Api.FxHash.FxHash - FxHash simulator / generator of seeded random numbers
New Ops: Viz
- new op: Ops.Ui.VizArrayTable - Show The Contents Of The Input Array In A Table In The Patch
- new op: Ops.Ui.VizBool - Visualize the state of a boolean output in the patch
- new op: Ops.Ui.VizLogger - Log changes of input values line by line, use like a logfile for debugging
- new op: Ops.Ui.VizNumberBar - Visualize numbers as a bar in patch, useful for debugging
- new op: Ops.Ui.VizObject - Show information about connected object
- new op: Ops.Ui.VizTextureTable - Show pixel colors of connected texture
New Ops: Mediapipe
- new op: Ops.Libs.Mediapipe.FaceMesh - Generate an animated geometry from MpFace Point Coordinates
- new op: Ops.Libs.Mediapipe.MpFaceTracking - Get face mesh from webcam
- new op: Ops.Libs.Mediapipe.MpHandCoordinate - Get individual coordinates of fingers or wrist from an array of mediapipe data
- new op: Ops.Libs.Mediapipe.MpHandTracking - Get points and lines for left/right hand from mediapipe
- new op: Ops.Libs.Mediapipe.MpPoseGetCoordinate - Get coordinates of specific body parts from mediapipe data
- new op: Ops.Libs.Mediapipe.MpPoseTracking - Get pose-data (points/landmarks/lines) from webcam
New Ops: Ammo.js/Bullet Physics
- new op: Ops.Physics.Ammo.AmmoBody - Create a physics body/collision shape using a any geometry or select a shape
- new op: Ops.Physics.Ammo.AmmoBodyCollision - Check if two physic bodies are colliding
- new op: Ops.Physics.Ammo.AmmoCharacter - Control and move a character in a physics environment
- new op: Ops.Physics.Ammo.AmmoCharacterFpsCamera - First person camera to use with AmmoCharacter
- new op: Ops.Physics.Ammo.AmmoDebugRenderer - Visualize the physical bodies as lines and points
- new op: Ops.Physics.Ammo.AmmoRaycast - Cast a ray and detect colliding bodies
- new op: Ops.Physics.Ammo.AmmoWorld - Simulate physical world
- new op: Ops.Physics.Ammo.GltfAmmoBodies - Create physic bodies from a GLTF File
Op Enhancements ImageCompose/TextureEffects
op enhancements: Many Ops.Gl.TextureEffects ops: New version to work with new transparency workflow
op enhancements: All generative Ops.Gl.TextureEffects ops: Added alpha mask toggle
op enhancements: Ops.Gl.TextureEffects.AlphaMask_v2 - Add combination methods and invert switch
op enhancements: Ops.Gl.TextureEffects.CheckerBoard_v2 - Square mode toggle / toggle auto aspect ratio
op enhancements: Ops.Gl.TextureEffects.CircleTexture_v4 - Also antialiased / added strech parameter per axis
op enhancements: Ops.Gl.TextureEffects.CircleTexture_v4 - Fix inner circle
op enhancements: Ops.Gl.TextureEffects.ImageCompose_v3 - Base image input port that will be copied and used as base layer when connected
op enhancements: Ops.Gl.TextureEffects.ImageCompose_v3 - Default transparent background
op enhancements: Ops.Gl.TextureEffects.Invert_v2 - Add invert toggle per colorchannel
op enhancements: Ops.Gl.TextureEffects.Kaleidoscope_v2 - Toggle auto aspect ratio
op enhancements: Ops.Gl.TextureEffects.Noise.HexagonNoise - Add aspect ratio toggle
op enhancements: Ops.Gl.TextureEffects.Noise.Noise - Added normalize checkbox
op enhancements: Ops.Gl.TextureEffects.Noise.PerlinNoise - Add r,g,b output channel selection options
op enhancements: Ops.Gl.TextureEffects.Noise.WorleyNoise_v2 - Fix aspect ratio / harmonics / offset map
op enhancements: Ops.Gl.TextureEffects.Plasma_v2 - Added aspect ratio fix toggle
op enhancements: Ops.Gl.TextureEffects.Plasma_v2 - Added offset and mask map inputs
op enhancements: Ops.Gl.TextureEffects.RectangleTexture_v4 - Alpha mask toggle, transparent background, position coordinates -1 to 1
op enhancements: Ops.Gl.TextureEffects.RoundCorners - Added alpha value input
op enhancements: Ops.Gl.TextureEffects.Shapes2d_v2 - Change coordinate system -1 to 1
op enhancements: Ops.Gl.TextureEffects.Twirl_v4 - Change coordinate system -1 to 1 / aspect correct size
op enhancements: Ops.Gl.TextureEffects.Vignette_v3 - Toggle for setting opacity not color
op enhancements: Ops.Gl.TextureEffects.ZoomBlur_v2 - Change coordinate system -1 to 1 / aspect correct size
Op Enhancements PBR Material
- op enhancements: Ops.Gl.Pbr.PbrEnvironmentLight - Added environment rotation parameter
- op enhancements: Ops.Gl.Pbr.PbrEnvironmentLight - Added parallax correction for cubemaps with helpers
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Support for point/spot/directional lights
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Added vertex colour support
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Added the tonemapping operators switch
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Added microsurface interreflections
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Added parallax occlusion mapping
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Added screen space roughness from change in normal map as input
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Added lightmap support for exr/rgbe inputs with corresponding intensity
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Added support for basic clear coats
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Default alpha blend mode now works as expected
- op enhancements: Ops.Gl.Pbr.PbrMaterial - Rearranged inputs
Op Enhancements
- op enhancements: Areascaler/arearotate - Update to new workflow
- op enhancements: Ops.Array.ShuffleArray_v2 - Fix bugs, which happened if input array became smaller
- op enhancements: Ops.Array.TextureBufferArray - Fix: Array seemed not being updated
- op enhancements: Ops.Audio.MidiJsonNote_v2 outputs data multiple times if notes on the same timestamp / string input field
- op enhancements: Ops.Cables.CustomOp_v2 - Error modal window links to custom code instead of op-code
- op enhancements: Ops.Cables.UIMode - Added output to indicate remote-viewer session
- op enhancements: Ops.Devices.Keyboard.CursorKeys - Fix bug where key is stuck when element focus changes
- op enhancements: Ops.Devices.Keyboard.KeyPress_v2 - Fix output port type, add options for active/area, output keyname
- op enhancements: Ops.Devices.Keyboard.KeyPressLearn - Output keyname and show in extended-title
- op enhancements: Ops.Gl.ForceCanvasSize - Detects if canvas is position absolute and adjusts css properties so it works correctly
- op enhancements: Ops.Gl.Geometry.BoundingBoxVisible - Bounding box can be defined manually via size inputs
- op enhancements: Ops.Gl.Geometry.GeometryPoints - Fix vertex colors output array
- op enhancements: Ops.Gl.GLTF.GltfScene_v3 - Fix bug where number of vertices was not shown for meshes
- op enhancements: Ops.Gl.GLTF.GltfScene_v3 - Now works with dataurls
- op enhancements: Ops.Gl.GLTF.GltfScene_v3 - Render primitive types like lines or points correctly without manually adding ops
- op enhancements: Ops.Gl.GLTF.GltfScene_v3 - Structure view collapsable sections
- op enhancements: Ops.Gl.GLTF.GltfScene_v3 - When rapidly changing filenames async file loading processes could overtake ueache other
- op enhancements: Ops.Gl.GLTF.GltfTexture - Fix filtering ignored on page reload
- op enhancements: Ops.Gl.GradientTexture - Output rgb array
- op enhancements: Ops.Gl.MediaRecorder - Fix mediarecorder multi recording / add filename input
- op enhancements: Ops.Gl.MediaRecorder - Removed "auto download" option and made it always download
- op enhancements: Ops.Gl.Meshes.Cone - Now works with meshinstancer
- op enhancements: Ops.Gl.Meshes.FreeFormPlane - Add gizmo for each corner / fix not having correct normals
- op enhancements: Ops.Gl.Meshes.GeometryToTexture - Was outputing huge texture when no geometry was connected
- op enhancements: Ops.Gl.Meshes.GeometryToTexture - Was slow when not correctly connected
- op enhancements: Ops.Gl.Meshes.Grid - Add render toggle and geometry output
- op enhancements: Ops.Gl.Meshes.Grid - Center toggle
- op enhancements: Ops.Gl.Meshes.PointCloudFromTexture - Fix: Max number of points wasnt recognized
- op enhancements: Ops.Gl.Meshes.PointCloudFromTexture - Toggle to hide points at 0,0,0
- op enhancements: Ops.Gl.Meshes.Polyhedron_v2 - Show errors with wrong seeds on ops, prevent crash
- op enhancements: Ops.Gl.Meshes.Sphere_v2 - Change radius default from 1 to 0.5
- op enhancements: Ops.Gl.Meshes.Torus - Now works with meshinstancer
- op enhancements: Ops.Gl.Meshes.TriangleSphere - Avoid call-stack overflow on safari
- op enhancements: Ops.Gl.MeshMorph - Added new methods of interpolating between meshes manually
- op enhancements: Ops.Gl.PixelProjection - Add center positioning option
- op enhancements: Ops.Gl.SaveScreenShot_v3 - Remove resolution, error prone, download texture op should be used
- op enhancements: Ops.Gl.Shader.BasicMaterial_v3 - Added alpha source option: Alpha channel inverted
- op enhancements: Ops.Gl.ShaderEffects.ColorArea_v4 - Scaling on all axis, fix invert mode of box area / texture input
- op enhancements: Ops.Gl.ShaderEffects.PerlinAreaDeform_v4 - Added flip normals toggle
- op enhancements: Ops.Gl.ShaderEffects.ScaleByNormal_v2 - Fixed performance problems
- op enhancements: Ops.Gl.Texture_v2 - When rapidly changing filenames async file loading processes could overtake ueache other
- op enhancements: Ops.Gl.TextureEffects.DrawImage_v3 - Alpha mask toggle
- op enhancements: Ops.Gl.TextureEffects.DrawImage_v3 - Premultiplied alpha toggle
- op enhancements: Ops.Gl.TextureEffects.DrawImage_v3 - Show warning when drawing 32bit textures into 8 bit texture
- op enhancements: Ops.Gl.TextureEffects.ToNormalMap_v2 - Fixed pixel step size / added multiplier for pixel size
- op enhancements: Ops.Gl.Textures.TextureSVG_v2 - Show error when file not found / correctly end loading task on file error
- op enhancements: Ops.Gl.Textures.WebcamTexture_v3 - Rewrite - Is only active when triggered... flip x and y axis toggles / select between multiple webcams, better resolution support...
- op enhancements: Ops.Html.DivElement - Shift+d completely removes/add element correctly
- op enhancements: Ops.Html.ElementChilds_v2 - Improve disable/connect/disconnect and keep html content from div-element
- op enhancements: Ops.Html.QrCode - Removed texture generation from op, can output html element and dataurl to use with texture op
- op enhancements: Ops.Html.TransformElement - Fix bug where div was dissappearing when element style changed
- op enhancements: Ops.Html.TransformElement - Fix crash when changing element link in some cases
- op enhancements: Ops.Math.SmoothStep_v2 - Fix bugs with negative values
- op enhancements: Ops.Sidebar.DropDown_v2 - Added trigger to set default value
- op enhancements: Ops.Sidebar.Sidebar - Fixed two typos in parameter names
- op enhancements: Ops.Sidebar.Slider_v3 - Fix active slider track being too long, when vertical scrollbar is showing
- op enhancements: Ops.String.RandomString_v2 - Added unicode support
- op enhancements: Ops.String.Split_v2 - Add option to convert splitted strings to numbers
- op enhancements: Ops.Templates.UiTestOp - Add loading task
- op enhancements: Ops.Timeline.DemoPrerender - Re-prerender on canvas resize to not have too many texture resizes...
- op enhancements: Ops.Ui.VizGraph - Reset button
- op enhancements: Ops.Ui.VizNumber - Shows null/undefined/empty values correctly
- op enhancements: Ops.Ui.VizString - Shows null/undefined/empty values correctly
- op enhancements: Ops.Ui.VizTexture - Corretly show output flow of texture
- op enhancements: Ops.Value.Preset - Fix bug when renaming presets and parameters
- op enhancements: Ops.Vars.VarSetObject_v2 - Show error when using object variables for textures
- op enhancements: Ops.WebAudio.AudioBufferPlayer_v2 - Remove non-working start/end-time ports, fix restart
- op enhancements: Ops.WebAudio.SamplePlayer - Remove non-working start-time port
Editor / Ui
- editor: Open remoteviewer in other window/browser/device to see patchchanges immedeatly in every session
- editor: Allow for multiplayer-sessions with collaborators in editor
- editor: Fix scrolling duplication in code-exception modal window
- editor: Fix overlap of minimized timeline with iconbar
- editor: Fix "show all transforms" not removing last transform icons after deleting
- editor: Remember "show all transforms" setting after reload/close tab
- editor: Adjust op parameter distances and paddings to be similar for different ui element types
- editor: Fix bug where transform gizmo was shown when it should not be shown in current viewport
- editor: Removed file svg2mesh converter
- editor: Rework save-as dialog, add copyright info
- editor: Confirmation dialog on deleting assets, with warning if used in other patches
- editor: Allow to add uploaded libraries to userops
- editor/web: Unify and tweak svg images generated for op previews
- editor: Ace text editor random nonsense error message hidden
- editor: Add converter to fix svgs missing width/height on upload
- editor: Add patch-information to editor for non-owners/collaborators
- editor: Added command palette icons for "scale canvas" and "reset canvas size"
- editor: Added converter to fix missing width/height in svgs
- editor: Added stride display for input ports / tweaked display of array ports
- editor: Area op overlapping comments bug fixed
- editor: Changing file input parameter sets unsaved state
- editor: Directly connecting number to string port will add a numberToString op in between the new link
- editor: Do not set website/tab-title to undefined
- editor: Faster saving of patches / better data compression
- editor: Files drag'n dropped onto patchfield now corractly snap to op grid
- editor: Fix bug after some parameter changes patch state was not set to unsaved
- editor: Fix bug meta tabs would not open correct tab after reloading
- editor: Fix bug when crashing on very slow connections
- editor: Fix bug when deleting viz ops content was not removed from patchfield
- editor: Fix bug where sometimes "save as" did not have the proper project name
- editor: Fix bug with some tooltips which did not dissappear
- editor: Fix bugs when cursor entering/leaving patch with mouse buttons down
- editor: Fix conflict of uploaded screenshot.png with patch-screenshot
- editor: Fix crash in variable watch view
- editor: Fix slowdowns and improve performance of patchfield in huge patches
- editor: Fix: In some cases search dialog op screenshot preview was displayed incorrectly
- editor: Fixed casesensitiveness for patchinvites
- editor: Flow mode is much faster with many subpatches
- editor: Font rendering improvements when zoomed far out
- editor: Format code of attachments on save for non userops
- editor: Handle errors due to network outage better
- editor: If webgl context was lost, show a modal message
- editor: Mathparser only parses after min length of 3 characters
- editor: Move "open in new window" to "view patch page", add qrcode
- editor: Naming scheme: HDR is now called 32bit float texture pixelformat, default is 8 bit ubyte texture
- editor: New command to pause/unpause vizlayer
- editor: Notify of ongoing maintenance mode, disallow saving while in maintenance
- editor: Op search dialog: Show suggestions to dragged port etc.
- editor: Op selection area works again with pressing shift to add and ctrl to remove ops from selection
- editor: Op.outBoolNum() new numeric boolean output port, should be used instead of op.outBool from now on
- editor: Patch settings tab: Showing progress indicator while saving
- editor: Redesigned port tooltips
- editor: Remote viewer improved
- editor: Removed assimp json converter
- editor: Removed obj2gltf converter
- editor: Send proper mime-type when loading op-code to prevent firefox warning
- editor: Settings buttons show activity indicator when waiting for server response
- editor: Show code example when creating attachment, use modal dialog instead of alert
- editor: Show object type in param panel if available
- editor: Show progress bar while loading assets
- editor: Speed up loading of libs and corelibs
- editor: Subpatch list now shows a treeview of subpatch hierarchy
- editor: Team members now have read-only access to all team patches
- editor: Op crashing when loading patch should not stop loading of patch, op will be removed and error shown
- editor: Added downgrade selected op command
- editor: Show op shortname in parameter panel and not full namespace name
- editor: Format button in editor now only appears for javascript syntax
- editor: Ops using subtract blendmode fixed typo and added correct subtract blendmode method
Core
- core: Better handling of big meshes > 64k vertex indices
- core: Added meyda.js to list of available libs to use meyda.js.org
- core: Fixed handling of dataurls and assetPrefix
Website
- website: /mypatches now properly ordered by date, creation date shown in "created"-sorting
- website: Add info to team-page when team has no patches yet
- website: Add pagination to all huge lists of patches
- website: Add speedtest option to /browser
- website: Autosuggestions fields (teams/usernames) are now case insensitive
- website: Better ipad/safari compatibility
- website: Disallow login/register while being in maintenance mode
- website: Disallow reset/forgot-password when still being logged in
- website: Do not show dev and deprecated ops in searchresults
- website: Fix centering of uploaded avatar images for users and teams
- website: Fix holes in grid layout with big patchnames
- website: Fix markdown style in patch-descriptions
- website: Fix setting and reading of locationhash information on patch-page and viewer
- website: Fixed casesensitiveness for patchinvites
- website: Load projectlibs only once in patch-viewer
- website: Make licencing information more prominent on patchpage
- website: Maximize button to show patch in maximum size while keeping 16:9 ratio
- website: Move patch-templates-overlay to make space for more
- website: Only show current version of ops in searchresults
- website: Overview-page for assets and uploaded libraries
- website: Patch page and exported patches have alpha enabled by default
- website: Proper thumbnails and titles for public patches when sharing editor link
- website: Redirect forum.cables.gl to github discussions
- website: Show github discussions on /home instead of forum posts
- website: Show patches on userprofile when not logged in
- website: Show top patches of last six months on dashboard
- website: Speed up loading of patchsettings for huge patches
- website: Speed up patch-overviews and search
- website: Update code-block style on documentation-pages to work better in darkmode
- website: Use browser native lazy-loading of images instead of library
Docs
- Added faq entry for social media profile
- Updated "reporting bugs" faq
- Updated "working with files" chapter
- Faq for videoplayback, recording, screenshots creation
- Faq about supporting cables.gl
- Exporting instructions now have video tutorials
Renamed Ops
- Renamed cannon ops to Ops.Physics.Cannon namespace
- Renamed Object2json to ObjectStringify
- Deprecated all Ops.json3d ops
- Deprecated RgbeToHdrTexture
- Deprecated IBLMaterial
- Deprecated WipeTransition
- Deprecated GrassWobble
- Deprecated SvgPathes
- Deprecated MeshSequence
- Deprecated CircleMovement
New ops
- new op: Ops.Array.FilterArray - compare elements from an array and remove not matching ones
- new op: Ops.Gl.Meshes.GeometryToTexture - convert vertices of a mesh to a data texture
- new op: Ops.Gl.Meshes.MeshInstancerFromTexture_v2 - Draw the same mesh multiple times on the GPU based on XYZ Textures
- new op: Ops.Gl.Meshes.PointCloudFromTexture - visualize a RGB texture as XYZ coordinates as points
- new op: Ops.Gl.Pbr.PbrEnvironmentLight - PBR image based lighting setup
- new op: Ops.Gl.Pbr.PbrMaterial - PBR/Physical Based Rendering Material for realistic materials
- new op: Ops.Gl.TextureEffects.ImageComposeSnapshot - capture the current state of an imageCompose branch by copying the texture
- new op: Ops.Gl.Textures.CombineTextures - combine multiple textures into one by copying colorchannels
- new op: Ops.Gl.Textures.ExrTexture - load .exr floating point texture files
- new op: Ops.Gl.Textures.RgbeToHdrTexture - convert a RGBE texture to HDR/floating point texture
- new op: Ops.Gl.Textures.TextureToCoordinateGrid - convert a texture to a 3d coordinate grid storing coordinates in texture RGB channels
- new op: Ops.String.SaveTextFile - download a textfile containing the input string
- new op: Ops.Values.FreezeArray - capture the current input and copy it to the output, even after a reload
- new op: Ops.Values.FreezeNumber - capture the current input and copy it to the output, even after a reload
- new op: Ops.Values.FreezeString - capture the current input and copy it to the output, even after a reload
Fixes and enhancements
- op enhancement: Ops.Systems.ArraySpray - fix bug with centering axis parameters
- op enhancement: Ops.Anim.Smooth - fix bugs with NaN values
- op enhancement: Ops.Api.ThingSpeak.ReadEntries - fixed a typo that would lead to not reading entries at all
- op enhancement: Ops.Array.TransformArray3 - tweakes parameter ui
- op enhancement: Ops.Audio.BpmTap - do not reset to default-bpm while recording
- op enhancement: Ops.Cables.CustomOp_v2 - clean up old out-ports on load
- op enhancement: Ops.Cables.CustomOp_v2 - fix error when copy pasting
- op enhancement: Ops.Cables.CustomOp_v2 - loading libs from uploaded files respects prefixAssetPath in export now
- op enhancement: Ops.Cables.PatchInfo - now outputs last saved and last export timestamp
- op enhancement: Ops.Gl.CubeMap.Skybox - support for RGBE textures, added exposure and gamma controls
- op enhancement: Ops.Gl.Geometry.BoundingBoxVisible - fixed a case where it outputed wrong result
- op enhancement: Ops.Gl.GLTF.GltfDracoCompression compression will show info modal on error
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - use colors and other material properties from gltf with current set material
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - color conversion linear space vertex colors
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - compatibility with more glb files
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - error dot/message when file cant be found
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - fix animation not playing when using skinned mesh with assigned material shaders
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - fix problems with different animation interpolation settings
- op enhancement: Ops.Gl.Matrix.OrbitControls - remove pointerlock functionality
- op enhancement: Ops.Gl.Matrix.WASDCamera_v2 - added active toggle to completly disable it
- op enhancement: Ops.Gl.MediaRecorder - fixed bug using wrong file extension
- op enhancement: Ops.Gl.MediaRecorder - fixed bug where it wont handle a canvas resize after initialized once
- op enhancement: Ops.Gl.MediaRecorder - output list of available mimetypes/codecs
- op enhancement: Ops.Gl.Meshes.FullscreenRectangle - option to keep correct aspect ratio and make it fit into canvas area (letterbox)
- op enhancement: Ops.Gl.Meshes.PointCloudFromArray - fix bug when connecting texcoord port it did not update correctly
- op enhancement: Ops.Gl.Meshes.SimpleSpline - vertex color array input
- op enhancement: Ops.Gl.Shader.BasicMaterial_v3 - use vertex color checkbox
- op enhancement: Ops.Gl.Shader.PickingMaterial - now works with instanced meshes
- op enhancement: Ops.Gl.Shader.VertexColorMaterial - fix: now works with meshinstancer
- op enhancement: Ops.Gl.TextureEffects.CircleTexture_v3 - Warn Overflow is disabled by default
- op enhancement: Ops.Gl.ShaderEffects.TransformVertex - can be stacked now
- op enhancement: Ops.Gl.TextureEffects.ImageCompose_v2 - fix problem when having imageCompose in animageCompose
- op enhancement: Ops.Gl.TextureEffects.Noise.CellularNoise - added offset texture / harmonics parameter / aspect ratio toggle / blend mask input
- op enhancement: Ops.Gl.TextureEffects.Noise.PerlinNoise - added offset texture / harmonics parameter / aspect ratio toggle / blend mask input
- op enhancement: Ops.Gl.TextureEffects.Noise.SimplexNoise - added offset texture / harmonics parameter / aspect ratio toggle / blend mask input
- op enhancement: Ops.Gl.Textures.GraphTexture - added linewidth
- op enhancement: Ops.Gl.Textures.GraphTexture - output canvas element
- op enhancement: Ops.Json.CsvColumnArray_v2 - added option to force number type
- op enhancement: Ops.Json.CsvColumnArray_v2 - show warning if column does not exist
- op enhancement: Ops.Sidebar.Sidebar - all the sidebar ops now react properly do disconnecting their parent
- op enhancement: Ops.Sidebar.DropDown_v2 - size option for multi-line display mode
- op enhancement: Ops.Sidebar.LocalTextureFile - added texture wrap and filter modes
- op enhancement: Ops.Sidebar.XYPad - also reacts on mousedown without dragging
- op enhancement: Ops.Sidebar.XYPad - also reacts on mousedown without dragging
- op enhancement: Ops.Trigger.TriggerCounter - has current count in extended title now
- op enhancement: Ops.Trigger.TriggerCounterLoop - has current count in extended title now
- op enhancement: Ops.Trigger.TriggersPerSecond - has current count in extended title now
- op enhancement: Ops.Vars.VarTriggerArray - triggered objects and arrays were not always updated even if object was changed
- op enhancement: Ops.WebAudio.Output - un-suspending the audiocontext via integrated play-button does not "pop" volume anymore
- op enhancement: Ops.WebAudio.Waveshaper - fix: use default values on creation
Editor/ui
- editor: fix bug where port hover does not work immediately after using port suggestion menu
- editor: add instant notification when patch was saved in different window/by other user
- editor: add lastSaved and lastExported to patch-export
- editor: area ui element in subpatches is not visible from outside
- editor: array inputs and outputs can print the stride (e.g. Array2, Array3 etc)
- editor: big patches with many subpatches will load much faster, initializing ui elements only when op visible in current subpatch
- editor: cables CSS is scoped better and less interfering with custom html element classnames, e.g. "button"
- editor: case insensitive sorting of variables
- editor: create var shortcut creates texture getter/setter for texture ports
- editor: disable selection in patchfield while resizing panels
- editor: file-manager: files can now be duplicated
- editor: file-manager: files can now be renamed
- editor: fix bug, when in some cases the order of cables was saved wrongly
- editor: fix library loading of tonejs
- editor: fix timeline icons / new general timeline iconbar
- editor: fix tooltips not always showing up in some cases
- editor: fix undoing moving multiple ops
- editor: fix visual bugs when using scaled canvas
- editor: fix: bugs which caused connections to dissappear
- editor: fix: clicking output value copies whole value into clipboard not a shortened string
- editor: fix: not show cable add button circle when hovering an op lying over a line
- editor: fix: pasting subpatches will not change current visible subpatch
- editor: fix: undo deletion of subpatch will not make ops visible in current subpatch
- editor: fix: when creating subpatch cables were hidden bug
- editor: fixalt+esc to unminimize left tab panel
- editor: fixed flickering of vizTexure and other viz ops
- editor: flow visualization can be toggled off completly
- editor: flow visualization now also shows changes in ports not only in links
- editor: gizmo axis drags can be undone
- editor: idlemode will not start when not in fullscreen or focussed the rendering canvas
- editor: improve suggestion dialog for tags
- editor: new command: save patchfield screenshot
- editor: new info area with better docs/hotkeys
- editor: op more menu now has option "make op resizable" toggle
- editor: patchfield: better antialiasing for lines and circles
- editor: patchfield: performance improvements when selecting and moving many ops at the same time
- editor: remove image preview from parampanel - i.e. in Ops.Gl.Texture
- editor: show proper error message when user tries to add/remove libs on ops that he/she is not allowed to
- editor: subpatch in/out ports can be now created from inside a subpatch
- editor: toggle texture preview between sticky and temporary (temp means: click into patchfield (unselect any op) to remove preview)
- editor: uploaded .hdr files get converted to rgbe encoded .png files
- editor: viztexture. vizgraph can now be resized
- editor: warn user when cloning patch with "private" userops
- website: add "created by me" filter to mypatches page
- website: add "feature" badge on all patch-overview pages
- website: add FAQ for running cables patches on your local machine
- website: allow for selection of light/dark mode in account settings (for session only now)
- website: allow for unsubscribe of newsletter in account settings
- website: dark mode and rework design/layout
- website: make autosuggest dropdown scrollable and limited size
- website: op docs: ops can now have links to caniuse.com queries
- website: patch page iframe/canvas now catches touch-events properly
- website: switch to dark-mode as a default
editor/ui
- editor: tab panel: after reloading open last used editor tab again
- editor: tab panel: on page load, the editor set the tab panel to minimized if it was minimized by the user
- editor: all sidebar ops can now be inspected like div elements: hold ctrl and hover over sidebar element, then click it to focus op
- editor: enable browser context menu for images and selectable text
- editor: fix blurry display of gl patchfield when using os display scaling (win/mac)
- editor: added command to create a visual area around a group of ops
- editor: op search dialog: "shortcut buttons" for creating/using variables now available for all types and triggers
- editor: allow upload of files with any suffix
- editor: fix file selector shows image preview whenever possible
- editor: changed lots of icons to modern look
- editor: parameter panel changed checkbox icon
- editor: adjusted warning alert colors
- editor: allow access to and manual creation of backups from menu
- editor: allow removal of libs and corelibs
- editor: command palette icons now has mouse over tips
- editor: comment title can be colorized
- editor: fix broken image when sending error report
- editor: fix bug when selecting ops when resizing renderer
- editor: fix headline in keyboard-shortcuts window
- editor: fix multiple windows of keyboard shortcuts opened
- editor: fix right click on port did not disconnect cables
- editor: fix bug when search dialog was not finding extended title strings
- editor: fix bug where patch was jumping/moving random ops when interacting in the patch, after having the canvas focused
- editor: fix bug with dragging text interpreted as file upload
- editor: fix bug with transform gizmo
- editor: improved custom op copy pasting between patches
- editor: keep already entered tags when picking suggestions from dropdown
- editor: midi messages will cancel going into idle mode
- editor: new command: "Logging" filter console logging from different components
- editor: output value inspect dialog now allows you to copy content to clipboard
- editor: preferences - hide patch bounds option added
- editor: remember port parameter text editor tabs and reopen them correctly again
- editor: removal of old svg based patchfield renderer
- editor: save patch-license on click without reload
- editor: visually indicate active tab in patch settings
- editor: suggest "related" tags in patch settings
- editor: added tips to tips dialog
- editor: add pako.js to available libraries (github.com)
new ops
- new op: Ops.Ui.VizTexture - patchfield: vizualize textures in an op in the patchfield
- new op: Ops.Ui.Area - patchfield: create areas/groups of ops and move them around together
- new op: Ops.Ui.VizGraph - patchfield: vizualize multiple numbers as curves
- new op: Ops.Ui.VizNumber - patchfield: display numbers as curves
- new op: Ops.Ui.VizString - patchfield: display numbers as curves
- new op: Ops.Json.ObjectSetObjectSimple - set an object in an object
- new op: Ops.Array.AnglesBetweenPoints - calculate euler angles between every point and its next in an array
- new op: Ops.Array.ArrayUnshiftString - add string to beginning of array
- new op: Ops.Gl.GLTF.GltfHierarchy - export positions of lines of a hierarchyfrom a branch structure as an array , e.g. a skeleton bones
- new op: Ops.Gl.GLTF.GltfNodeTransform_v2 - set an absolute transform of a node, e.g. joints of a skinned/skeleton
- new op: Ops.Gl.GLTF.GltfSkin - render a skinned mesh animation
- new op: Ops.Gl.ShaderEffects.VertexWobble_v2
- new op: Ops.Gl.TextureEffects.PixelDifference - calculate pixel differences as color values
- new op: Ops.Html.QuerySelectorAll - returns an array of elements matching the "CSS query"
fixes and enhancements
- op enhancement: Ops.Api.SoundCloud.SoundCloud - fixed for new SoundCloud API, added ports for format select
- op enhancement: Ops.Array.GetValuesFromArrayOfObjects - add option to filter out invalid values
- op enhancement: Ops.Array.GetValuesFromArrayOfObjects - now walks all the parent-properties of objects as well
- op enhancement: Ops.Boolean.MonoFlop - added trigger output when ending activation
- op enhancement: Ops.Cables.CustomOp - fix copy-paste issue
- op enhancement: Ops.Gl.CanvasInfo - output 1 if hdpi displays is turned off in mainloop operator
- op enhancement: Ops.Gl.GLTF.GltfDracoCompression - now uses webworkers and WASM for some speedup
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 can now load multiple layers of uv coordinates
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 fixed files that use uint16bit vertex colors would not render correctly
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 input field for switch between multiple animation actions/tracks
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 material input now accepts object where key is material name and value is a shader
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 skinning/rigging
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 structure view meshes now shows nodename and number of nodes where its being used
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 structure view show correct number of vertices for multimaterial meshes
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 fix bug with duplicated nodes in structure view
- op enhancement: Ops.Gl.GradientTexture - added parameters: texture filter/wrap modes / step / flip
- op enhancement: Ops.Gl.GradientTexture - was flipped in some cases
- op enhancement: Ops.Gl.Matrix.WASDCamera_v2 - added reset trigger
- op enhancement: Ops.Gl.Matrix.WASDCamera_v2 - can now also be rotated by touch devices
- op enhancement: Ops.Gl.Matrix.WASDCamera_v2 - input ports for moving the camera by setting Booleans
- op enhancement: Ops.Gl.Meshes.Polyhedron_v2 - uses proper string input now
- op enhancement: Ops.Gl.MeshMorph - added easing parameter
- op enhancement: Ops.Gl.RandomCluster - fix crash when in round mode and size <= 0
- op enhancement: Ops.Gl.RenderAnim_v2 - disabling zip files not working correctly
- op enhancement: Ops.Gl.RenderAnim_v2 - workaround webm compression bug doing nothing when 100%
- op enhancement: Ops.Gl.Shader.CustomShader_v2 - added output port - true if shader has errors
- op enhancement: Ops.Gl.Shader.CustomShader_v2 - op displays error dot, if shader does not compile
- op enhancement: Ops.Gl.Shader.WireframeMaterial - fix initial colors after creating op not showing correctly
- op enhancement: Ops.Gl.ShaderEffects.ColorArea_v3 - added discard mode
- op enhancement: Ops.Gl.ShaderEffects.InstancedDisplacementMap - added abs mode
- op enhancement: Ops.Gl.ShaderEffects.TextureProjection - fix multiply mode
- op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v4 - fix colorize crashing
- op enhancement: Ops.Gl.TextMeshMSDF_v2 - fixed bug outline and shadow not working at the same time
- op enhancement: Ops.Gl.Texture_v2 - added option to save device memory
- op enhancement: Ops.Gl.Texture_v2 - fix bug texture op was creating two loading jobs
- op enhancement: Ops.Gl.TextureArrayLoader_v2 - add URL as string in-port instead of number
- op enhancement: Ops.Gl.TextureEffects.RGBMath - added mask/multiplier texture input
- op enhancement: Ops.Html.QuerySelector - now can work with strings, xml and update on trigger
- op enhancement: Ops.Html.VideoElement - prevent loading empty video during init of op
- op enhancement: Ops.Physics.Body.PhysicsSphere_v2 - added name string input port
- op enhancement: Ops.Sidebar.DropDown_v2 - fix bug, input was ignore in some cases
- op enhancement: Ops.Sidebar.SidebarText_v2 - now also accepts html code
- op enhancement: Ops.Sidebar.XYPad - fix range change bug
- op enhancement: Ops.String.StringEditor - fix JavaScript syntax highlighting
- op enhancement: Ops.Systems.ArraySpray center axis controls
- op enhancement: Ops.Templates.UiTestOp - more example how to log/show dialogs/open tabs programmatically
- op enhancement: Ops.WebAudio.AudioBufferPlayer_v2 - show error when audiocontext is suspended...
- op enhancement: Ops.WebAudio.Output_v2 - fix state handling of muted/volume etc
- op enhancement: Ops.WebAudio.Output_v2 - shows a button if the audio context is suspended by the browser, so users can turn on sound by an user interaction more easily
- op enhancement: Ops.WebAudio.SamplePlayer - added option to define buffersize
- op enhancement: Ops.WebAudio.AnalyzerTexture_v2 - add current y position output
- op enhancement: Ops.Anim.RandomAnim - fix: use same timing methods as other anim ops
- op enhancement: Ops.Cables.CustomOp_v2 - better exception-handling and error-display
web
- web: display explore/learn/community links when not logged in
- web: fix long nicknames in author-overlay
- web: fix tags page
- web: fix viewer for public patch using user operators
- web: link to documentation on user-ops list in account settings (to check where it's used)
- web: show ribbons for example patches on all pages
- web: team patches now ordered by last updated on teams overview page
- web: teams now ordered by last updated
- web: remove all external services and third party cookies/tracking services
- web: remove push notification service
- web: remove google analytics tracking
- web: show accepted invitations as patch-grid
core
- core: fix animated values of ops without trigger ports
- core: fix multiple webgl console warnings
- core: patchsilent is on by default / reduced unnecessary console logging
docs
renamed ops
- renamed VertexSinusWobble to VertexWobble
- deprecated Ops.Deprecated.Math.ApproachInterpolation - use smooth
- deprecated Systems.Spray - use ArraySpray
- deprecated TriggerBetween - confusing op, better use between and iftruethen
- deprecated instanced Indexed ops - confusing ops, better workflows available
Editor / UI
- editor: op search dialog: reduced size: more compact
- editor: fix: ports can be animated, even without having updating trigger inputs
- editor: fix: customShader ports can now be animated or assigned to variables
- editor: fix: visual glitches when switching subpatches
- editor: fix: possible to completly remove existing comments on ops
- editor: fix canvas icon/infobar positioning when canvas is scaled by command "scale canvas"
- editor: closing tabs does not loose focus of selected op
- editor: tweaks and fixes for bright editor mode
- editor: lots of little ui tweaks
- editor: suggest "related" tags in patchsettings
- editor: allow for access to and manual creation of backups from menu
- editor: fix multiple windows of keyboarshortcuts opened
- editor: save patch-licence on click without reload
- editor: fix broken image when sending error report
- editor: allow for removal of libs and corelibs
Ops
- new op: Ops.Gl.GLTF.GltfDracoCompression - support for [draco] compressed glb files (blender: just check compression in export dialog)
- new op: Ops.Array.ArrayUnshiftString - add string to beginning of array
- op enhancement: Ops.Sidebar.XYPad - 2d draggable point in rectangular area input element
- op enhancement: Ops.Api.SoundCloud.SoundCloud - fixed for new soundcloud api, added ports for format select
- op enhancement: Ops.Sidebar.ColorPicker_v3 - not using native colordialog anymore / colors change immediately
- op enhancement: Ops.Gl.ForceCanvasSize - works in exported patches without changing css rules
- op enhancement: Ops.Gl.MainLoop - fix: added clear option again
- op enhancement: Ops.Array.AnimArray_v2 - fixes
- op enhancement: Ops.Gl.LineFont_v2 - array output / tweaks
- op enhancement: Ops.Gl.TextureEffects.SSAO_v2 - added blendmodes / fix multiply default mode
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - fix bug with reopening structure view
- op enhancement: Ops.Gl.ShaderEffects.AreaTranslateMeshes_v3 - fix bug where meshes where jumping to new position
- op enhancement: Ops.Gl.Textures.Base64ToTexture - filter/wrap modes
- op enhancement: Ops.Gl.TextureArrayLoader_v2 - add url as string in-port instread of number
- renamed Math.Phyllotaxis2 to Ops.Array.Phyllotaxis
- renamed Gl.TextureEffects.SSAO2 to Ops.Gl.TextureEffects.SSAO
- deprecated WebAudio.WebAudioContextRunner
- deprecated Gl.ShaderEffects.CubeMapReflection
- deprecated Gl.Phyllotaxis
Website
- web: fix long nicknames in author-overlay
- web: link to documentation on user-ops list in account settings (to check where it's used)
- web: display explore/learn/community links when not logged in
- op enhancement: Ops.Physics.CastRay - fix problem with order of overlapping bodies
- op enhancement: Ops.Physics.CastRay - fix problem with not hitting bodies with zero mass
- op enhancement: Ops.Gl.ShaderEffects.ColorArea_v3 - fix bug crashing when using it with certain materials
- editor: patchfield - fixed small bugs where elements where not correctly removed after deleting ops
- editor: fix color selector create cable bug
- editor: fix bug Ops.Device.* ops where not showing
- editor: fix bug when deleting subpatch that contain subpatches result in crash
- editor: fix bug cable add button was not showing up when ops selected
- editor: alt+drag / alt+shift+drag copy/reconnect cables from port nearby the cursor
- editor: fix bug where it wast not possible connecting a port with the same port to output of a subpatch
- editor: fix bug with overlapping ops and vertical align funciton (shift+a)
- editor: fix bug crashing pixel value inspector spreadsheet opening multiple times
- editor: cmd+p menu allows for display of buildinfo
- editor: do not allow editing of patches that have ops in the Ops.Dev namespace on live server
- web: fix patch licence not showing
- web: invite page now shows old accepted invites to patches for easier finding
- editor: patchfield fix international character set
- editor: fix msdf font converter
- editor: better drag area when dragging ports from the param panel
- op enhancement: Ops.Gl.Shader.PointMaterial_v4 - fix bug antialiasing did not work with alpha input
new ops
- new op: Ops.Array.AnimArray - animate values in an array to another array
- new op: Ops.Array.ArrayFromNumbers - simple way to create small arrays of numbers
- new op: Ops.Array.ArrayIndexMinMax - find lowest/highest numbers in an array
- new op: Ops.Array.ArrayIteratorStrings - iterate over an array of strings
- new op: Ops.Array.ArrayMergeTrigger - merge /concatenate arrays by trigger
- new op: Ops.Array.SortArrayWithIndices - sorts an array of numbers and also get sorted indices
- new op: Ops.Debug.GlLogErrors - execute glGetError after every gl command and log to console
- new op: Ops.Gl.GLTF.GltfCameraViewMatrix - get view matrix from a GLTF camera
- new op: Ops.Gl.GLTF.GltfNodeSineAnim - sine animate GLTF nodes by a filter
- new op: Ops.Gl.Matrix.AnimMatrix - animate values in a matrix to a new matrix
- new op: Ops.Gl.Matrix.InvertMatrix - outputs an inverted matrix
- new op: Ops.Gl.Phong.ResetLights - reset the lights for the following ops
- new op: Ops.Gl.ShaderEffects.TransformVertex - transform vertices of a mesh via vertex shader
- new op: Ops.Gl.TextureEffects.MultiDrawImage - draw multiple images at once
- new op: Ops.Gl.TextureEffects.RGBMath - apply simple mathematical functions on pixel color values
- new op: Ops.Gl.TextureEffects.TexMathModulo - modulo pixel color values
- new op: Ops.Json.ObjectSetObject - set object as value in an object
- new op: Ops.Json.ObjectValues - Extract all object values as an array
- new op: Ops.Libs.ECharts.ECharts - add ECharts library functionality
- new op: Ops.Libs.ECharts.EChartsEvent - add ECharts library functionality
- new op: Ops.Math.IsNumberRising - detect if a number is rising or falling
- new op: Ops.Math.RandomCounter - add up random numbers by triggering
- new op: Ops.Net.SocketCluster.SocketClusterTopicInfo - gives information on clients on a socketcluster topic
- new op: Ops.Sidebar.SideBarStyle - adjust appearance of sidebar
- new op: Ops.Sidebar.SideBarSwitch - add tabs or switchbar to a sidebar
- new op: Ops.String.NumberSwitchByString - associate numbers by strings
- new op: Ops.String.StringReplace - replace occurrences of a string with another string
- new op: Ops.Templates.UiTestOp - UI indicators example op
- new op: Ops.Time.Milliseconds - current time/date in milliseconds
- new op: Ops.Trigger.RouteTriggerString - route trigger output by string
- new op: Ops.Trigger.TriggerSendNamed - send a named trigger by string (to receive with TriggerReceiveFilter)
- new op: Ops.Value.DelayStringSimple - delay the output of a string by n seconds
- new op: Ops.Vars.VarTriggerArray - set array variable by trigger
- new op: Ops.Vars.VarTriggerNumber - set number variable by trigger
- new op: Ops.Vars.VarTriggerObject - set object variable by trigger
- new op: Ops.Vars.VarTriggerString - set string variable by trigger
- new op: Ops.WebAudio.AudioRecorder - record, playback and download audio
- new op: Ops.WebAudio.Waveshaper - add waveshaping (distortion, overdrive, fuzz) to an audio stream
- new op: Ops.Website.LocationHashRoute - read data from "location hash" of browser
- new op: Ops.Website.SetLocationHash - allows for manipulation of window.location.hash
op enhancements
- op enhancement: Ops.Physics.CastRay - fix bug now always returns closest object to the camera
- op enhancement: Ops.Math.Modulo - fix bug wrong integer values when using ping pong mode
- op enhancement: Ops.Array.TextureBufferArray - fixed bug when using mipmapped textures
- op enhancement: Ops.Gl.TextureEffects.Noise.PerlinNoise - add switch to toggle between grey/rgb colors
- op enhancement: Ops.Gl.TextureEffects.ColorMap - min and max input to clamp mapping / added blendmodes
- op enhancement: Ops.Anim.FrameRangeAnim_v2 - changed input port type for "frames" to string
- op enhancement: Ops.Array.Array3PushNumbers_v2 - fix bugs/add reset button
- op enhancement: Ops.Array.ArrayContains_v2 - remove old value input for search value and replace with new number
- op enhancement: Ops.Array.ArraySetNumber_v2 - fixed bugs when chaining op multiple times, fix bug when used in a repeater
- op enhancement: Ops.Array.SmoothArray - fixed a bug that lead to null/NaN in the resulting array
- op enhancement: Ops.Cables.CustomOp_v2 - fix crash when op-id starts with number
- op enhancement: Ops.Cables.CustomOp_v2 - now it's possible to load uploaded library or CDN url
- op enhancement: Ops.Cables.PatchInfo_v2 - now tries a few places to get the patch id, also added proper string outputs
- op enhancement: Ops.Devices.Mouse.MouseWheel_v2 - fix flip direction toggle
- op enhancement: Ops.Devices.Mouse.MouseWheel_v2 - trigger out when wheel was moved
- op enhancement: Ops.Gl.CubeMap.CubemapToEquirectangularTexture - add width and height ports for output texture
- op enhancement: Ops.Gl.ForceCanvasSize - fix bug not working with browser internal cmd+/- zoom in
- op enhancement: Ops.Gl.GLTF.GltfNodeTransforms_v2 - fixed translation etc, matrix output
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - embedded textures can be exposed even without filename information
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - fix bug when rendering meshes >64k vertices
- op enhancement: Ops.Gl.GLTF.GltfScene_v3 - better camera support
- op enhancement: Ops.Gl.MeshInstancer_v4 - texture coordinate input array / optimized amount of data uploaded to gpu
- op enhancement: Ops.Gl.Phong.AmbientLight_v4 - fix crash when used with shadow op
- op enhancement: Ops.Gl.Phong.PhongMaterial_v6 - fix bug not working on older android phones/mali gpus
- op enhancement: Ops.Gl.Phong.PhongMaterial_v6 - new version, emissive texture now blends correctly with diffuse color
- op enhancement: Ops.Gl.Phong.PhongMaterial_v6 - dynamically changing environment map performance bug fix
- op enhancement: Ops.Gl.Phong.PhongMaterial_v6 - add emissive mask texture, add greyouts to texture intensities
- op enhancement: Ops.Gl.Phong.PhongMaterial_v6 - add greyouts to emissive textures when emissive is not active
- op enhancement: Ops.Gl.Phong.PhongMaterial_v6 - fix bug where not all texture update methods would be called on initialization
- op enhancement: Ops.Gl.Phong.PointLight_v5 - resizing the shadow cubemap now works properly
- op enhancement: Ops.Gl.Render2Texture : webgl1 bug ignoring "clear" option
- op enhancement: Ops.Gl.Shader.CustomShader_v2 - support for cubemap uniform input
- op enhancement: Ops.Gl.Shader.Picker - increase resolution of pick texture (fix bug where picked objects at top screen border would not be picked)
- op enhancement: Ops.Gl.Shader.PickingMaterial - increase resolution of pick texture (fix bug where picked objects at top screen border would not be picked)
- op enhancement: Ops.Gl.Shader.PointMaterial_v4 - now works with alpha channels
- op enhancement: Ops.Gl.Shader.PointMaterial_v4 - fixed bug of wrong colorchannels when using round+antialias switch
- op enhancement: Ops.Gl.Shader.Shader2Texture - fix bug when rendering into alpha channel
- op enhancement: Ops.Gl.ShaderEffects.FogEffect - toggle for modify color op opacity
- op enhancement: Ops.Gl.ShaderEffects.InstancedDisplacementMap - added channel selection input
- op enhancement: Ops.Gl.ShaderEffects.InstancedDisplacementMap - added rgb channel mode
- op enhancement: Ops.Gl.ShaderEffects.InstancedDisplacementMap - added rotation mode
- op enhancement: Ops.Gl.ShaderEffects.InstancedPerlinPosition_v2 - added minimum scale option
- op enhancement: Ops.Gl.ShaderEffects.Shadow_v2 - set default uniform for shadow properties when creating it
- op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v4 - added scaling and source mapping from mesh coordinates
- op enhancement: Ops.Gl.Texture_v2 - when changing filenames, it keeps old image in memory until new file is loaded
- op enhancement: Ops.Gl.TextureEffects.ColorMap - added method input to map via luminance and per channel value
- op enhancement: Ops.Gl.TextureEffects.FastBlur - texture mask input
- op enhancement: Ops.Gl.TextureEffects.Hue - texture inputs for offset and masking hue
- op enhancement: Ops.Gl.TextureEffects.Invert - texture mask input
- op enhancement: Ops.Gl.Textures.Histogram - fixed bug preventing it from working
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix bug in some settings empty lines where nor rendered
- op enhancement: Ops.Gl.Textures.VideoTexture_v2 - fix several bugs on playback and jumping
- op enhancement: Ops.Html.BrowserInfo_v3 - output device has touchscreen
- op enhancement: Ops.Html.ScrollPosition - scroll position is already set when loading the patch
- op enhancement: Ops.Html.SetCssVariableString - has an option to return "quoted strings" as values for use in
content:
rules - op enhancement: Ops.Json.AjaxRequest_v2 - added a boolean to stop loading request immediately
- op enhancement: Ops.Lottie.LottieSVGPlayer - added new progress outputs / option for playing backwards
- op enhancement: Ops.Lottie.LottieSVGPlayer and Ops.Lottie.LottieTexturePlayer now work in the same patch and use an updated version of Lottie library (5.7.11)
- op enhancement: Ops.Math.Incrementor - added default value input
- op enhancement: Ops.Math.PerlinNoise_v2 - better noise function and seeding etc.
- op enhancement: Ops.Math.RandomNumbers_v3 - faster when using it a lot in loops
- op enhancement: Ops.Math.RoundEven - now allows for selection of ceil/floor for rounding up or down
- op enhancement: All Net SocketCluster - ops now show error when connected to non-socketcluster objects
- op enhancement: Ops.Net.SocketCluster.SocketCluster_v2- now allows for sending additional data alongside the payload to be read by server (i.e. auth-token)
- op enhancement: Ops.Patch.Function_v2 - allows for sending parameter from external functions, adds default parameter functionality
- op enhancement: Ops.Patch.Function_v2 - new string input type
- op enhancement: Ops.Patch.LoadingStatus_v2 - simpler version and easier to show a different loading when firstloading has finished
- op enhancement: Ops.Sequence - cleanup button shows only when needed
- op enhancement: Ops.Sidebar.DropDown_v2 - fixed bug with default value overwriting the input value
- op enhancement: Ops.Sidebar.Sidebar - added a boolean output to indicate when the sidebar is opened
- op enhancement: Ops.Sidebar.Slider_v3 - suffix input
- op enhancement: Ops.Sidebar.TextInput_v2 - Placeholder text
- op enhancement: Ops.Sidebar.Toggle_v3 - fixed default value
- op enhancement: Ops.String.Base64Encode_v2 - has new string input and output
- op enhancement: Ops.Value.RouteNumber - add option to reset unused ports to default value
- op enhancement: Ops.Value.SwitchFile_v2 - string port type fixes
- op enhancement: All WebAudio OPs - disconnect nodes on removal so they get garbage collected, add type checking to object inputs and outputs, remove old connection warnings
- op enhancement: Ops.WebAudio.AudioAnalyzer_v2 - add warning for high FFT sizs
- op enhancement: Ops.WebAudio.AudioBuffer_v2 - bugfixes: now properly loads files & sets status on changing strings, add loading output, add possibility to load audio via Data URL
- op enhancement: Ops.WebAudio.AudioBuffer_v2 - reinitialize output values when file url is changed, add possibility to load audio from data url
- op enhancement: Ops.WebAudio.AudioBufferPlayer_v2 - bugfixes: restart would crash at times, fix errors on start/stop, add loading output, add ui hints for offset, when starting errors do not throw full exception just print the message
- op enhancement: Ops.WebAudio.AudioBufferToSplineArray - better UI hints
- op enhancement: Ops.WebAudio.AudioPanner - now sets null to the output when input is not connected
- op enhancement: Ops.WebAudio.BiquadFilter_v2 - remove unused node, fix magnitude & phase response output
- op enhancement: Ops.WebAudio.Convolver_v2 - better UI hints
- op enhancement: Ops.WebAudio.Gain - smoother transition when changing gain (linear ramp)
- op enhancement: Ops.WebAudio.Output_v2 - fix wrong muting states, fix bug where mute would not go through when audiocontext is suspended
- op enhancement: Ops.WebAudio.WaveformMesh mesh is now disposed when buffer disconnected
- op enhancement: Ops.Website.InfoURL - trigger when hash part changed
- op enhancement: Ops.Website.UrlQueryParams_v2 - now updates in editor on first load
- op enhancement: subpatch ops - newly created object ports store objtype to give better warnings if wrong object is connected to subpatch
Editor / UI
editor: gl ui patchfield is now default
editor: assigned variables dropdown only contains variables that fit
editor: better caching-logic for core and ui in editor
editor: better explanation of external-exports (github, netlify, exe)
editor: bugfix where users using glui could not edit code
editor: CABLES.API.build, CABLES.build, and CABLES.UI.build now contain information for the last build
editor: canvas icon and info area cleanup
editor: exporting "single javascript file" now minifies patchconfig and blueprints to optimize filesize
editor: file upload: brackets in filenames will be replaced with _ to reduce problems with css properties
editor: find: can now search for duplicate assets
editor: find: can now search for multiple words
editor: fix browser crash/epic load when "inspecting" really huge json structure
editor: fix bug not being able to type out decimal values in an animated input
editor: fix bug patch not showing when toggle fullscreen mode
editor: fix bug when port default value indicator was not working
editor: fix bug where exporting assets set as "none" still had all the assets in the export
editor: fix bug where numbers where converted to strings after pressing ctrl+z
editor: fix copy to clipboard when clicking on value outputs in chrome
editor: fix export when using socketcluster library and combined files option
editor: fix warnings about textures in texture previewer
editor: fixed bug not showing changes after pressing ctrl+z in some cases after typing in numbers
editor: GPU Profiler - profile what uses most GPU performance
editor: infoarea can be minimized and the state is saved per user
editor: make sure connected ports are always greyed out in the parameter panel, even if op says it shouldn't be
editor: namespaces and collaborator textfields now are suggesting matching names for users/namespaces
editor: new colorpicker dialog / op param panel: color preview box now always up to date
editor: profiler - subpatch performance data is more correct over time / show number of port actions per frame / table design
editor: properly copy collaborators to new project when using save as
editor: rare cases of patch not being saveable because an op can't be serialized, it now shows which op is the culprit
editor: show commitmessage in loading screen on dev
editor: show licence information for library files in filemanager
editor: show texture size when hovering texture preview
editor: show visually which op changed when pressing ctrl+z
editor: store creation and lastchange of op and add :history to search
editor: subpatch creation: fix bug where input/output ops were positioned wrong
editor: texture spreadsheet preview button to see first RGBA number values
editor: timeline fix: show correct state when auto playing after loadingstatus
editor: tweak tooltip styles
editor: warning on save and coming back from "idle" if/when cables has been updated in the meantime
editor: creating ops by pressing shift+enter in the op select dialog lets you continue adding more ops
core: add empty cubemap texture
core: remove cubemap corelib
core: add tangent, bitangent & vertex index to shadow pass vertex shader (fix bug where displacement would not work in shadow pass)
core: cgl_shader: add tangent & bitangent to default vertex shader body
core: cubemapframebuffer & texture: add mipmap generation possibility, better default naming
Website/docs/misc
web: as a user it is possible to rename your own ops now from the /settings page
web: fix wrong example shown on op page
web: cables.gl warns visually if your browser has major performance caveat or uses a software renderer (swiftshader)
web: patch invitation mail now shows name of initiator
web: patch invitations are no longer shown for patches that already got deleted
web: oembed endpoint now displays "made with cables" icon when embedding on reddit/figma/...
web: patchview now shows invitation screen instead of 403 for pending invitation
web: remove bell icon because it was not really useful / alerts are shown using a red numbers in navbar
docs: updated documentation for export-options (cables.gl)
docs: added documentation on how to contribute code to cables (cables.gl)
docs: update writing shaders documentation
docs: update Shadertoy documentation
WebGl Ops
- new op: Ops.Gl.ShaderEffects.UseVertexColor - Use vertex color as basecolor/diffuse color with phongmaterial
- new op: Ops.Trigger.ProbabilityTrigger - trigger by given probability
- op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v4 - complete rewrite and much more posibilities and control
- op enhancement: Ops.Gl.SaveScreenShot_v2 - fixed wrong resolution when using HDPI resolutions
- op enhancement: Ops.Gl.GLTF.GltfNodeTransforms - also output node names / sorting
- op enhancement: Ops.Gl.Textures.CopyTexture - added options to invert / convert to greyscale by color channel / if no trigger is connected it will copy when the texture is changed
- op enhancement: Ops.Gl.TextureEffects.Fog_v3 - support 2d background texture
- op enhancement: Ops.Gl.ShaderEffects.PerlinAreaDeform_v4 - add switch to use input current shader pos or original pos attribute
- op enhancement: Ops.Gl.ShaderEffects.VertexPositionFromTexture_v2 - fix op was only working after changing mode
- op enhancement: Ops.Gl.ShaderEffects.TextureProjection - fix: can now be used multiple times / use image alpha switch
- op enhancement: Ops.Gl.Shader.SetUniformValue_v2 - update shader uniform number values and textures of the current bound shader/material,
- op enhancement: Ops.Gl.Shader.CustomShader_v2 - uniform mat4 datatype is detected and can be set using an array of 16 floats
- op enhancement: Ops.Gl.TextureFromColorArray - add filter and wrap options
- enhancement: Ops.Gl.TextureEffects.Fog_v3 - updated example to smaller scene so iOS looks good, added documentation for dealing with iOS resolution of depth buffer
- op enhancement: gltf fix: bug with huge indexed meshes
- op enhancement: gltf fix: normal mapping: use exported tangents and calculate correct bitangents, otherwise calculate them
Audio Ops
- enhancement: Ops.WebAudio.AudioBuffer_v2 - add ui hint if audiobuffer is not connected
- enhancement: Ops.WebAudio.AudioBufferPlayer_v2 - added helping hints and warnings, works with timeline, various fixes
- enhancement: Ops.WebAudio.SamplePlayer - add ui hint if audiobuffer is not connected to input or output is not connected
- enhancement: Ops.WebAudio.Mixer - add pan control for each input
- enhancement: Ops.Webaudio.Convolver_v2 - add wet output port, add dry wet control, fix crash on empty string, add predelay
- enhancement: Ops.WebAudio.AudioAnalyzer_v2 - add time domain average volume, fix wrong default value for FFT size shown in UI
- new op: Ops.Array.ArrayQuantizer - quantize input value to nearest value in array
- new op: Ops.WebAudio.ClockSequencer - sequence BPM-based triggers
- new op: Ops.WebAudio.ClockSequencerPattern - sequence triggers by a given pattern in an array
- new op: Ops.WebAudio.Delay - add a delay effect to an audio stream
- new op: Ops.WebAudio.MusicalScales - outputs a musical scale as strings, steps and midi note values
HTML Ops
- new op: Ops.Html.ElementClientRect - get html element absolute position and size in pixels on screen
- new op: Ops.Html.ElementsPositionsByClass - Get html element absolute position and size in pixels on screen as arrays of all elements by classname
- new op: Ops.Html.ElementCssTransform - translate,scale and rotate a HTML element using css transform
- op enhancement: Ops.Html.DivElement_v2 - css class management not removing outside assigned classes when changing class string
- op enhancement: Ops.Html.TransformElement - added option to hide element if out of current viewport
- op enhancement: Ops.Html.DivElement now has a toggle to stopPropagation of click events
Data Ops
- new op: Ops.Trigger.TriggerOnChangeTexture - triggers when texture has changed
- new op: Ops.Trigger.TriggerOnChangeObject - triggers when object has changed
- new op: Ops.Website.LocalStorageNumber - Store and retreive a number in browser localstorage
- new op: Ops.Website.LocalStorageString - Store and retreive a string in browser localstorage
- new op: Ops.Array.Array1toX - convert an array1 to array2,3,4 by choosing content for new axis
- new op: Ops.Array.ArraySumPrevious - Sum up every number in an array with the sum of the previous
- new op: Ops.Array.ArrayIndexBetween - output index where value is greater than number and smaller then next number
- new op: Ops.Json.ObjectSetArray - Set array by key in an object
- new op: Ops.Json.ObjectFilterContentByKey - remove values from an object if key starts with input string
- new op: Ops.Value.DelayBooleanSimple - Delay the input/output of a boolean by x seconds
- op enhancement: Json Path ops - add "found" out-port and warn on wrong values / various tweaks fixes
- op enhancement: Ops.String.Base64Decode_v2 - correctly handle dataurl input strings
- op enhancement: Ops.Array.StringToCharArray - warn on null input and handle correctly
- op enhancement: Ops.Net.SocketCluster.SocketClusterRecieveTrigger - can now work with triggers created with TriggerSend by using it's name
- op enhancement: Ops.Net.SocketCluster.SocketClusterSendTrigger - now can send trigger name with payload
Cables Ops
- new op: Ops.Cables.CustomOp - create in-place ops and javascript snippets
- new op: Ops.Trigger.TriggerReceiveFilter - receives all namedtriggers and allows for prefix filtering
- op enhancement: Ops.Sequence - clean up button: disentangle ports with more then one connections
Editor / UI
- editor: rework of menubar and iconbar
- editor: command palette: add zoom in/out commands
- editor: patch is now marked as unsaved when changing content of an text editor tab
- editor: saving a patch to the server is now compressed and much faster with bigger patches
- editor: better saving animation
- editor: fix cases where pressing shift+e to open first op text-editor did not work
- editor: multiple text editors of same op/port is possible now. e.g. (1) is appended to title
- editor: fix minimap positioning
- editor: new patch navigation iconbar
- editor: patch settings: toggle between automatic screenshots and manually saving screenshots
- editor: icon bars show help in infoarea
- editor: many ui improvements and optimizations
- editor: drag dropping audio files now adds an AudioBuffer to the patch
- editor: op param panel and meta panel are now merged into one tabbed panel, when there is not enough space for both
- editor: pressing ctrl/cmd+enter now cycles canvas modes: normal, patch background and fullscreen
- editor: exported patches are more mobile friendly / added css for disabling ontouch highlights/outlines and prevent default scrolling rubberband behaviour
- editor: "save as" dialog now takes given name as opposed to "copy of" when saving
- editor: invitation list is no longer shown when empty
- editor: patch invite shows error message when invite fails (with unknown user)
- editor: include echart library
- editor: publishing of patches is now only allowed on cables.gl, not on dev
- editor: keyboard shortcut tab now shows full content
- editor: added p5.js to userlibraries
- editor: fix bug where users where not able to view op attachments
Website/misc
web: new patch invites are shown in mypatches dropdown and via red bubble
web: all screenshots get converted to webp and are much smaller now
web: admins and staff now also are able to accept invitations
web: fix link to newest/used op version on example patch page
discord bot: publishing a patch will now show a teaser image and author avatar
discord bot: will post when a public patch receives lots of likes and comments
backend: api reloads when changing handlebar templates
backend: change default permission for api endpoints to "forbidden"
wordpress plugin: fix warnings and notices with php 7.3
Ops
new op: Ops.WebAudio.SamplePlayer - plays back one shot samples on trigger (useful for interaction sound)
new op: Ops.Html.ElementInteraction - Html element interaction events
new op: Ops.Gl.Meshes.QuadWarpTexture - Warp a texture mapped quad, useful for simple projection mapping
new op: Ops.Gl.Textures.Base64ToTexture - converts base64/data url to texture
new op: Ops.Gl.Textures.TextureToBase64 - converts texture to base64/data url
new op: Ops.Json.ArrayGetArrayByPath - returns the array at the position defined by a path
new op: Ops.Json.ArrayGetNumberByPath - finds a number at a position in an array defined by path
new op: Ops.Json.ArrayGetObjectByPath - returns the object at the position defined by a path
new op: Ops.Json.ArrayGetStringByPath - finds a string at a position in an array defined by path
new op: Ops.Json.ArrayGetArrayValuesByPath - outputs all the values of the properties of an array of objects given a path
op enhancement: Ops.WebAudio.AudioAnalyzer_v2 - add average volume back again
op enhancement: Ops.Gl.TextureEffects.Fog_v3 - remove fog modes, keep linear mode as default
op enhancement: Ops.WebAudio.AudioBuffer_v2 - set output to null when file URL is empty
op enhancement: Ops.WebAudio.Mixer - op would sometimes error when disconnecting an audio stream
op enhancement: Ops.WebAudio.Output_v2 - now shows a warning message when multiple inputs are connected
op enhancement: TypeOf now takes proper string input
op enhancement: LeftPad now takes proper string input
op enhancement: many sidebar ops now reset to default value on doubleklick
op enhancement: sidebar op now has a "undo" button to restore default values
op enhancement: Ops.Gl.ShaderEffects.VertexNumberLimit_v2 - add min parameter and invert toggle
op enhancement: renderGeometry - fix problem with vertex number indices not always updated
op enhancement: border - control individual sides
op enhancement: webcam fix bug where webcam is not updating when loading patch in a hidden tab
- deprecated: Ops.Json.CsvJsonFile - please use CsvArray
- deprecated: Ops.WebAudio.MediaPlayer - problems with some browsers, please use audiobufferplayer/sampleplayer
- deprecated: Ops.Deprecated.WebAudio.AudioPlayer_v2 - problems with some browsers, please use audiobufferplayer/sampleplayer
Editor / UI
- editor: output hover graph fixed
- editor: gradient editor colorpicker fixed
- editor: pointCloudfromArray and Splinemesh: show warning when using an incompatible material
- editor: filemanager: convert png/jpg to webp files
- editor: filenames of converted files do not contain the old file extension anymore
- editor: support for .avif file format images
- editor: patchsettings load faster, lazyloading namespaces
- editor: json structure viewer now works with arrays
Web
- web: cables editor can now be tried without being registered with limited functionality
- web: mypatches menu reworked, switch between last patches and invited to patches
- web: patch lists: hover patch title to see full length name
- web: added more showcase projects to cables.gl
- web: faster "my patches" and "create" dropdowns
- web: faster loading times using webp screenshots
- web: database/file server upgraded to faster cpu and more ram
- web: userops in account-settings are linked to documentation page
- web: fix examples not being shown on documentation page
- web: allow for comments on apikeys, show creation date
- web: fix patch page opengraph thumbnail
- web: op example patches are easier to spot by using an example badge
- web: fix display of summary user-op page
Ops
new op: Ops.WebAudio.AudioBufferToSplineArray - analyze audio buffer to extract peaks as an array of points for spline rendering
new op: Ops.WebAudio.CutFilter - DJ style cut filter, lowpass & highpass in one op (up to 48dB steepness)
new op: Ops.WebAudio.Mixer - 8 channel mixer with independent gain controls (to sum audio signals)
new op: Ops.WebAudio.ThreeBandEqualizer - 3 band equalizer for low - mid - high with different filter types for each band
new op: Ops.Color.RgbToHex - convert RGB float values to HEX color String
new op: Ops.Gl.OrTexture - outputs the first valid texture of the input ports
new op: Ops.Website.FilenameInfo - information about a filename, like url protocol, suffix etc
new op: Ops.Html.LoadingIndicator - show a typical web loading/progress indicator animation
new op: Ops.Gl.Shader.GetShader - get current set shader
new op: Ops.Physics.Body.PhysicsGeometryBody - create a physics body from any geometry
new op: Ops.Cables.ExitError - stop executing patch and show an error message
op enhancement: Audio ops: fix crashes when not connected properly
op enhancement: Ops.WebAudio.Gain - add UI hints, add mute button
op enhancement: Ops.WebAudio.AutoPanner - add UI hints
op enhancement: Ops.WebAudio.Convolver_v2 - add UI hints, add gain control for convolved signal, add file format hints
op enhancement: Ops.WebAudio.AudioAnalyzer_v2 - add parameters to be able to control analyzation more fine-grained
op enhancement: Ops.WebAudio.AudioAnalyzer_v2 - add both amplitude & frequency output arrays, correct average volume (RMS) calculation
op enhancement: Ops.WebAudio.AudioBuffer_v2 - add UI hints for file formats
op enhancement: Ops.WebAudio.BiquadFilter_v2 - add frequency array, input for filter response, add phase and magnitude filter response output
op enhancement: Ops.WebAudio.FFTAreaAverage_v2 - better description of input ports, choose texture size input added
op enhancement: Ops.WebAudio.Output_v2 - add mute when patch turns inactive, mute audio when patch is paused
op enhancement: Ops.WebAudio.Waveform - Add UI hints
op enhancement: Ops.WebAudio.MediaPlayer_v2 - updating to new ports, better UI
op enhancement: Ops.Gl.TextureEffect.Fog_v3 - correct density calculations, add different fog modes
op enhancement: Ops.WebAudio.WaveformMesh - creates a mesh from an audio buffer
op enhancement: Ops.WebAudio.AnalyzerTexture - creates a texture from an audio FFT array (merging of FftTexture and AnalyserTexture)
op enhancement: Ops.Gl.ShaderEffects.InstancedTextureColorize - added switch between add/mul blend modes
op enhancement: Ops.Devices.Mouse.MouseDrag - captures movement outside of element/window
op enhancement: Ops.Physics.World - added world solver iterations parameter
op enhancement: Ops.Physics.World - added simulate toggle to pause simulation
op enhancement: Ops.Gl.RenderAnim_v2 - create zip file for image sequences
op enhancement: Ops.Gl.Textures.TextureInfo - outputs if is hdr texture
op enhancement: Ops.Gl.Textures.TextureInfo - output identify default textures
op enhancement: Ops.Gl.Render2Texture - show error when using mipmap and hdr at the same time
op enhancement: Ops.Gl.TextureEffects.DrawImage_v3 - fixed bug with transparent textures
op enhancement: WASD camera: can work without pointerlock now
op enhancement: Ops.Sidebar.Slider_v3 - takes real string as an input parameter
op deprecated: DocumentURL op - please use: Ops.Website.InfoURL
op renamed: RingBufferTextures to Ops.Array.TextureBufferArray
op deprecated: DynamicsCompressor
Core
- core: edit webaudio.js to not crash when not connecting an audio context
- core: better patch crash error messages on screen, e.g. local file access warning / error in code
- core: tweak rendering of cube bounding boxes
- core: current shader source code contains info of order of active modifiers (visible in shaderInfo op e.g.)
Editor / UI
- editor: export: allow for loading of userops in iframe when on cables server
- editor: export now has an option for iframe embed code
- editor: export to github and build electron executables
- editor: click on filename in asset details leads to page that shows patches with this asset
- editor: do not show userops of other users that start with the same username-letters
- editor: fix backend errormessage when cloning ops
- editor: string output port preview now uses available width
- editor: show error icon in menu bar when any op has an error
- editor: fix crash where editor not loading correctly when switching tabs rapidly while loading a patch
- editor: when cloning a patch title proposal is "clone of xxx"
Web
web: new screenshots are now delivered as webp files which are way smaller
web: do not copy colloaborators on public7example patches
web: examples on documentation pages are not longer shown for ops that start with the same characters
web: everything now runs on ipv6 as well
docs: added page to explain how to report bugs in forum
- op enhancement: fix ios/safari bug with instancing/phongmaterial etc.
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - round points antialias option
- op enhancement: Ops.Gl.ForceCanvasSize: added "scale to fit" option
- op enhancement: Ops.Gl.Textures.TextTexture_v4: wheight input
- op enhancement: Ops.Gl.Matrix.OrbitControls also captures mousemovement outside of canvas/window
- op enhancement: Ops.Gl.TextureEffects.CircleTexture_v3 - better y coordinates
- op enhancement: Ops.Array.ArrayMerge_v3 - allow more arrays to be merged
- op enhancement: Ops.Gl.Shader.Shader2Texture - fix crash when no shader is connected
- op enhancement: Ops.Gl.GLTF.GltfScene_v2 - added "loaded" output port
- op enhancement: Ops.Gl.Phong.DirectionalLight_v5 - framebuffer only gets instantiated when cast shadow is active, code optimization
- op enhancement: Ops.Gl.Phong.SpotLight_v5 - framebuffer only gets instantiated when cast shadow is active, code optimization
- op enhancement: Ops.Gl.Phong.PointLight_v5 - framebuffer only gets instantiated when cast shadow is active, code optimization
- op enhancement: Ops.Net.Mqtt.Mqtt_v2 - new string inputs, connection error handling, works with new shiftr.io #
- op enhancement: Ops.Net.Mqtt.MqttReceive_v2 - removed message type, added typed out-ports, renamed out-object
- op enhancement: Ops.Net.Mqtt.MqttSend_v2 - renamed out-object to not conflict with in-object
- editor: fix annoying bug when changing a value looses input field focus when op shows error message
- editor: renamed ops and adjusted naming
- web: better lazy load of user icons
- web: community dropdown / feature discord more prominent
- web: better preview meta images when sharing URLs
read our blog post about the november update: blog.cables.gl
Editor / Ui
- editor: op search: fixed lag and unexpected change of results... / grey out while searching/waiting
- editor: op search: penalty points for old version of ops
- editor: op search: when pressing enter while still searching wait for result to show up then add upmost op
- editor: search: show extended title content in search results
- editor: fix shift resizing (to keep aspect ratio) not working every time
- editor: faster canvas resize
- editor: preference to hide the icon sidebar
- editor: fix infoarea resize/close problems
- editor: helper meshes only drawing when op is really selected
- editor: subpatch list highlights active subpatch
- editor: subpatch list now also shows main subpatch
- editor: better handling of large strings in param panels
- editor: fix boolean display, always true or false now (not 0)
- editor: user preferences: choose background pattern for transparent canvas
- editor: patch asset loading will now start only after the editor is fully initialized
- editor: op selector fix: some information was hidden
- editor: bright mode button color
- editor: upgrade button works better with ports that changed capitalization
- editor: texture preview is now sticky / must be closed via new close button
- editor: keyboard shortcuts are now scrollable
- editor: texture previewer now also shows cubemaps and depthmaps
- editor: disabling ops now only disables selected ops, not childs / fix crash
- editor: profiler: shows how many ops are active currently
- editor: profiler: group by subpatches functionality
- editor: profiler: group ops by name (e.g. see all time used by "transform ops")
- editor: better warning when upgrading ops
- editor: canvas magnifier lens and colorpicker helper
- editor: file library: fbx and obj files are not automatically converted to glb/gltf files after upload
- editor: file library: add GLTF/GLB versions of example 3d files
- editor: file library - added new head gltf model
- editor: file library: use newest version of AudioPlayer as default op for audio files
- editor: find - search for ops with errors/warnings/hints
- editor: pressing shift+e opens the 1st string port on an op
- editor: timeline splitter element no longer renders over the editor tab
- editor: patch settings now show legal information
- editor: json-explorer on outObject and outArray
- editor: attachments are now correctly loaded after edit and reload of editor
- editor: on cloning an op markdown documentation and layout information is retained
- editor: json is now being syntax-highlighted in ParseObject and StringEditor
- editor: cloning an op copies libs and corelibs over to the new op
- editor: "you dont own this patch" no longer shown for collaborators
- editor: show which collaborators are being copied over on "save as"
- editor: export now allows for not exporting backup files, default is to include them
- editor: export of patches with url-reserved characters now possible
- editor: saving patch when someone else makes changes works now (again)
New Ops
- new op: Ops.Gl.ShaderEffects.InstancedTextureColorize - colorize instanced meshes using a texture
- new op: Ops.Gl.ShaderEffects.InstancedDisplacementMap - displace positions of instanced meshes using a texture
- new op: Ops.Gl.TextureToPointArray3 - Generate an array3 of grid positions from a texture
- new op: Ops.Gl.Identity.ResetTransform - reset current transforms to initial value (identity)
- new op: Ops.String.UUID - outputs a unique identifier
- new op: Ops.Array.Array3FlipAxis - flip xyz axis of an point array
- new op: Ops.Gl.ShaderEffects.VertexColorAsAlpha - Use mesh vertexcolor as Alpha/Opacity
- new op: Ops.Gl.TextureColorPick - get the color of a pixel in a texture
- new op: Ops.Boolean.OrNumber - Output another number if input number is zero/false
- new op: Ops.Gl.GLTF.GltfMeshSequence - Switch between meshes e.g. like a stop motion animation
- new op: Ops.Gl.TextureEffects.SkewStretchImage -skew / stretch an image by rendering scaled sides
- new op: Ops.Sidebar.LocalFileToDataUrl - load a local file and output as data url
- new op: Ops.Vars.VariablesAsObject - outputs an object containing all variables
- new op: Ops.Gl.TextureEffects.Alpha - Modify current alpha/opacity
- new op: Ops.Date.DateFormatter - String representation of a date
- new op: Ops.Date.DateCalc - Perform date calculations
- new op: Ops.TimeLine.PreRender - Render the patch at certain times
- new op: Ops.Array.ArrayPushString - Push/Append a string to the end of an array
- new op: Ops.Array.CutArray - Cut an array from the beginning and/or the end
- new op: Ops.Array.Array3AreaRemove - remove points from an array3 with different shapes
- new op: Ops.WebAudio.AudioPanner - pan an audio signal from left to right
- new op: Ops.Array.StringToCharArray - converts a string to an array of characters
- new op: Ops.Points.PointsPlane_v2 - now has correct rows and columns. Can now have a row or column length of 1
- new op: Ops.Trigger.SwitchTrigger - route triggers in to a single output
- new op: Ops.Gl.TextureEffects.RGBOffset - offsets xy components of an rgb texture
- new op: Ops.Gl.ShaderEffects.AreaScaler_v3 - added clamp mode
- new op: Ops.HTML.Notification - Simple pop up notification which fades in and out.
- new op: Ops.Points.PointsHexagonGrid - generates a hexagonal grid of points
- new op: Ops.Gl.TextureEffects.Noise.LayerNoise_v2 - exponent parameter now works.
- new op: Ops.Json.ObjectGetArrayByPath gets an array at the "path" of a json object or array
- new op: Ops.Json.ObjectGetNumberByPath gets a number at the "path" of a json object or array
- new op: Ops.Json.ObjectGetObjectByPath gets an object at the "path" of a json object or array
- new op: Ops.Json.ObjectGetStringByPath gets a string at the "path" of a json object or array
- new op: Ops.Json.ObjectGetArrayValuesByPath gets the values of each element at a "path" in a json object or array
- new op: Ops.Api.TeachableMachines.AudioClassifier - Use the Teachable Machines audio classifier for your microphone. Insert the uploaded model URL.
- new op: Ops.Api.TeachableMachines.ImageClassifier - Use the Teachable Machines image classifier. Insert the uploaded model URL.
- new op: Ops.Api.TeachableMachines.PoseDetection - Use the Teachable Machines pose detection with your webcam. Insert the uploaded model URL.
Op enhancement and fixes
- op enhancement: Ops.Html.FontFile_v2 - ops that use fonts will refresh after font has finished loading
- op enhancement: Ops.Gl.Textures.WebcamTexture_v2 - fix problems on ios and firefox
- op enhancement: Ops.Gl.Textures.WebcamTexture_v2 - can be used as html element (and styled)
- op enhancement: Ops.Gl.Textures.WebcamTexture_v2 - now outputs html video element
- op enhancement: Ops.Gl.FontMSDF_v2 better error handling when using invalid files
- op enhancement: mesh3d output no geometry when no trigger connected, or invalid file
- op enhancement: Ops.Patch.PlayButton - button style sheet can now be edited
- op enhancement: Ops.Html.BackgroundImage_v2 - correctly reload updated files after uploading
- op enhancement: Ops.Physics.CastRay - option to change cursor to pointer when hovering
- op enhancement: Ops.Physics.CastRay - now also continues to work when changing the array constantly
- op enhancement: Ops.Physics.CastRay world/raycast debug bounding box changes color on hover
- op enhancement: Ops.Html.Cursor_v2 - cursor ops are more reliant to use and can be used in normal rendering flow
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - colorize checkbox for texture
- op enhancement: Ops.Gl.ShaderEffects.AreaTfirranslateMeshes_v2 - axis multiply
- op enhancement: Ops.Gl.Meshes.TextMesh_v2 - fixed vertex order for face culling
- op enhancement: Ops.Gl.Textures.VideoTexture_v2 - better error handling / string file input etc
- op enhancement: Ops.Gl.ShaderEffects.ColorArea_v3 - opacity mode
- op enhancement: Ops.Gl.Meshes.Cylinder_v2 - added flat shaded option
- op enhancement: Ops.Gl.Matrix.ScreenCoordinates - fix to work with hdpi displays
- op enhancement: Ops.Gl.Performance - do now show anything when not connected
- op enhancement: Ops.Html.AppendChild_v2 / elementchilds ./ divelement: fixed buggy behaviour when changing parent of an element
- op enhancement: Ops.Gl.Shader.Shader2Texture render to multiple textures with one shader
- op enhancement: Ops.Gl.Texture_v2 / Ops.Gl.Textures.VideoTexture_v2 - filename port now also works with data urls/base64 encoded images (see Ops.Sidebar.LocalFileToDataUrl)
- op enhancement: Ops.Gl.Textures.VideoTexture_v2 - better error handling
- op enhancement: Ops.Gl.GradientTexture - now has radial mode
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - texture input for pointsize
- op enhancement: Ops.Html.TransformElement - optimized performance
- op enhancement: Ops.Gl.Render2Texture - wrap mode select
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix: lineheight should not apply to first line
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix: better height vertical calculation
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix: lineheight directly bound to fontsize
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix: line offset : offset to adjust line size rendering problems with crazy fonts...
- op enhancement: Ops.Html.VideoElement - finished trigger
- op enhancement: Ops.Html.VideoElement - error message and bool output
- op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v3 - fixed colorize option crashing
- op enhancement: Ops.Gl.TextureEffects.Waveform_v2 - fix for webgl1
- op enhancement: Ops.Gl.PixelProjection: fixed on hdpi displays
- op enhancement: Ops.Gl.TextureEffects.ImageCompose_v2 - correct transparent background by default
- op enhancement: Ops.Gl.TextureEffects.DrawImage_v3 - fixed bugs with transparent images
- op enhancement: Ops.Gl.MeshMorph - fix shader compile problem / show warning when meshes dont have the same amount of vertices
- op enhancement: Ops.Physics.PhysicsBodiesArray - basic physics simulation
- op enhancement: Ops.Anim.InOutInAnim - now has a hold duration
- op enhancement: Ops.Gl.Shader.Shader2Texture - displays a warning when Mipmap and HDR is enabled
- op enhancement: Ops.Gl.Matrix.WASDCamera_v2 - pointerlock can now be enabled or disabled
- op enhancement: Ops.Gl.Shader.CustomShader_v2 - fix: no longer crashes when creating vec4 uniforms
- op enhancement: Ops.Gl.Textures.VideoTexture - fix: updates textures correctly when they change
- op enhancement: Ops.Gl.Textures.VideoTexture - fix: no longer crashes when filter or wrap modes change
- op enhancement: Ops.Gl.Meshes.Circle - fix: no longer crashes when percent is less than zero
- op enhancement: Ops.Points.PointsPlane - fix: no longer divides by zero when rows or columns is set to 1
- op enhancement: Ops.Gl.Meshes.Cube_v2 - fix: now outputs the geometry object again when trigger in is reconnected.
- op enhancement: Ops.Array.ArrayMathArray - fix: now outputs null if only one array is connected
- op enhancement: Ops.Gl.TextureEffects.Noise.LayerNoise - fix: scale, layers and factor parameters now work again
- op enhancement: upgraded many ops to new URL input / String type ports
- op enhancement: Ops.Array.ArrayUnique - add xy & xyz option to uniqability, add length output, optimized
- op enhancement: Ops.Gl.Meshes.Cone - deactivating "active" now triggers next ops
- op enhancement: Ops.Gl.ShaderEffects.Shadow_v2 - fix bug where op would start triggering when switching discard option, better warnings
- op enhancement: Light Ops: add "Cast Light" option to disable light casting,
- op enhancement: Light Ops: add "Rendering Active" input to be able to render shadow map only once,
- op enhancement: Light Ops: change default parameters for shadows,
- op enhancement: Light Ops: add world position XYZ out,
- op enhancement: Light Ops: fix bug where clear color was not set with cast shadow option enabled
- op enhancement: Ops.Html.BrowserSpecificFile_v2 - updated old ports, properly detecting browsers now using platform.js
- op enhancement: Ops.Html.BrowserCheck_v3 - updated old ports, properly detecting browsers/os/platform now (with platform.js) on any OS
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - output texture now always updated when colors are changed, minor tweaks
- op enhancement: Ops.Gl.Textures.TextTexture_v4 - fix bug where output texture would not update colors
- op enhancement: Ops.Gl.Phong.LambertMaterial_v2 - add "Cast Light" options to shader, minimize amount of uniforms, speedup
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - you can now set an environment reflection map
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - fix WebGL1/iOS compatibility, minimized amount of uniforms, speedup
- op enhancement: Ops.Gl.Shader.MatCapMaterialNew_v3 - rework material rendering, correct screen space normals & normal map
- op enhancement: Ops.Gl.Shader.MatCapMaterialNew_v3 - add normal map intensity, works properly with mesh instancer now
- op enhancement: Ops.Gl.Shader.MatCapMaterialNew_v3 - rename ports so its clearer what they do
- op enhancement: Ops.Gl.CubeMap.CubeMapMaterial_v2 - add tex coords to vertex shader so displacement works
- op enhancement: Ops.WebAudio.AudioBufferPlayer_v2 - better error handling, add restart button, added isPlaying output, removed hasFinished output
- op enhancement: Ops.WebAudio.AudioBufferPlayer_v2 - now prevent clicks and pops when restarting
- op enhancement: Ops.Gl.TextureEffects.DepthTextureFocus_v2 - use real distances instead of 0 - 1 range, better usability
- op enhancement: Ops.Gl.TextureEffects.Fog_v3 - use real distances instead of 0 - 1 range, better usability
Website
- web: possiblity for user to delete own account
- web: order by patchname on "my patches" page
- web: namespaces of shared patches are now selectable in namespace dropdown on "my patches"
- web: allow for admins to schedule release/maintenance and show to logged in users
- web: bigger warning for users that are on the dev environment
- web: landingpage is no longer shown on dev/nightly, redirect to /login
- web: searchfield in top-nav now includes shared patches in extra tab
- web: speedup of "my patches" dropdown and all pages showing lot's of screenshots
- web: stop scrolling when using mousewheel on patch
- web: fps not dropping to 30 when watching a patch fullscreen
- web: docs: styling and formatting tweaks
- web: docs: link to github page
- documentation : Added section how to convert shadertoy patches into the cables equivalent.
- documentation : Added guide on how to get started with VR inside of cables
- documentation: add webgl1 & 2 differences section to docs
Core
- core: shaderEffects keeping gl primitive setting (e.g. pointmaterial did not work with certain shadereffects)
- core: put under MIT licence
- core: remove duplicate unused uniforms before compiling shader
- core: copy extensions to new shader when copying a shader
- core: corelibs - cubemapframebuffer - remove clear color at renderEnd() (for PointLight clear color fix)
Export
- exported patch: canvas now has tabindex property/ so that it can receive kreypresses
- exported patch: fixed a bug when embedding and initializing non existing variables
- exported patch: finishedLoading callbacks first parameter is now patch object
- exported patch: now include legal.txt with licence information
- cables-cli: command line export now allows for skipping of backup export using the
-b
switch
New Ops
- new op: Ops.Gl.Meshes.SplineMesh_v2 - draw splines/lines - new spline rendering system
- new op: Ops.Gl.Meshes.SplineMeshMaterial_v2 - material for new spline meshes
- new op: Ops.Gl.ShaderEffects.Shadow_v2 - new shadow rendering system - add shadow receiving capabilities to any material
- new op: Ops.Gl.ShaderEffects.FresnelGlow - add fresnel glow to any material
- new op: Ops.Gl.ShaderEffects.TextureProjection - texture projection on meshes
- new op: Ops.Gl.GLTF.GltfTexture - load textures from inside a .glb file
- new op: Ops.Gl.GLTF.GltfNodeTransform - get current transformation of a gltf node
- new op: Ops.Gl.GLTF.GltfTransformNode - Set transformation of a gltf node
- new op: Ops.Gl.GLTF.GltfPhysicBodies - create physics bodies/bounding boxes for gltf nodes
- new op: Ops.Math.MathExpression - calculate a mathematical function with up to 4 values
- new op: Ops.Gl.CubeMap.EquirectangularTextureToCubemap - convert equirectangular texture to cubemap
- new op: Ops.Gl.CubeMap.CubemapToEquirectangularTexture - visualize cubemap (either as equirectangular or as folded cubemap)
- new op: Ops.Gl.CubeMap.Skybox - add skybox to scene with equirectangular or cubemap texture
- new op: Ops.Array.ArrayMathExpression - calculate a mathematical function with up to 3 arrays and 3 numbers
- new op: Ops.String.ArrayContainsString - Check if an array contains a string
- new op: Ops.Gl.Matrix.QuaternionCamera - Set up a camera, rotated by a quaternion
- new op: Ops.Array.ArrayOfArrays - Create an array filled with other arrays
- new op: Ops.Array.ArraySetString - set string in an array
- new op: Ops.Array.ArrayGetString - get string from an array
- new op: Ops.Gl.Geometry.GeometryBoundingBox - Calculate a bounding box from a geometry
- new op: Ops.Gl.Geometry.BoundingBoxVisible - Test if a boundingbox could be visible in the current viewport
- new op: Ops.Geometry.BoundingBox - create a simple bounding box from width,height,depth
- new op: Ops.Physics.PhysicsBodiesArray - create an array of physics bodies and add them to current world
- new op: Ops.Html.VideoElement - html video player element
- new op: Ops.Array.ArrayGetTexture - get a texture from an array
- new op: Ops.Gl.SurfaceScatter_v2 - outputs arrays to use with e.g. meshinstancer
- new op: Ops.Gl.ValidTexture - output current input texture or if invalid an empty/default texture
- new op: Ops.Geometry.GeometryToWireframeArray3 - generate an array of lines from a mesh to render a wireframe
- new op: Ops.String.StripHtml - remove html tags from a string
- new op: Ops.Gl.Geometry.GeometryMergeSimple - merge two geometries
- new op: Ops.Values.SequenceObjects - control order and flow of objects
- new op: Ops.Values.SequenceNumbers - control order and flow of numbers
- new op: Ops.Values.SequenceStrings - control order and flow of strings
- new op: Ops.Html.CSSPropertyString - Modify a CSS property with a string.
- new op: Ops.Trigger.TriggerIfIncreased - Outputs a trigger if the value of a number increases.
Op Enhancements and fixes
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - speedup (shader code generation on the fly)
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - default light at cam position, warning when default light is used,
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - new falloff modes
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - add emissive color parameters
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - various fixes (new op version)
- op enhancement: Ops.Gl.Phong.PhongMaterial_v5 - environment reflection maps
- op enhancement: Ops.Gl.Phong.PointLight_v5 - add shadow casting capabilities
- op enhancement: Ops.Gl.Phong.SpotLight_v5 - add shadow casting capabilities
- op enhancement: Ops.Gl.Phong.DirectionalLight_v5 - add shadow casting capabilities
- op enhancement: Ops.Sidebar.Sidebar is correctly positioned when choosing position "right"
- op enhancement: Ops.Gl.TextureEffects.LumaKey_v2 - now has a high and low threshold to refine selection.
- op enhancement: Ops.Gl.GLTF.GltfScene_v2 - expose whole a transformation hierarchie tree
- op enhancement: Ops.Gl.GLTF.GltfScene_v2 - camera support
- op enhancement: Ops.Gl.GLTF.GltfNode_v2 - fix bug with transformation being applied even when option is unchecked
- op enhancement: Ops.Physics.World - world draws bodies
- op enhancement: Ops.Physics.CastRay - fix various things for better raycasting/picking of objects
- op enhancement: Ops.Physics.Body.PhysicsCube_v2 - name input for easier identification of picked objects
- op enhancement: Ops.Html.IFrame_v3 - update to behave like other html element ops
- op enhancement: Ops.Gl.Shader.ShaderInfo - more information about the current state (uniforms/defines/texturestack etc)
- op enhancement: Ops.Gl.Shader.ShaderInfo - now can show information about uniforms
- op enhancement: Ops.Gl.Textures.TextTexture_v3 - has gl filter selection / color
- op enhancement: Ops.Gl.Textures.TextTexture_v3 - added automatic line wrapping when maximize size is disabled
- op enhancement: Ops.Gl.Textures.TextTexture_v3 - added option to limit number of lines
- op enhancement: Ops.Gl.Textures.TextTexture_v3 and textMesh - now have texture filter and anisotropy options
- op enhancement: Ops.Gl.Performance - shows how long it took to compile all shaders
- op enhancement: Ops.Gl.ShaderEffects.MeshPixelNoise_v2 - added blendmodes switch
- op enhancement: Ops.Gl.Performance - shows total number of glPrimivites (triangles/points) currently rendered
- op enhancement: Ops.Gl.Matrix.OrbitControls - reset moves to initial values, not to zero, also takes the shortest way to the goal
- op enhancement: Ops.Gl.MainLoop - option to reduce FPS when window is not focussed to reduce load
- op enhancement: Ops.Gl.Shader.CustomShader_v2 - not connected uniform texture ports now bind striped defaulttexture
- op enhancement: Ops.Gl.TextureEffects.DrawImage_v2 - clip repeat is now transparent, not just black
- op enhancement: Ops.Gl.GradientTexture - fix bug where colors in gradient did not change / firefox compatibility
- op enhancement: Ops.Html.FullscreenMode - switch between whole document or just canvas becoming fullscreen
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - removed premultiplied alpha option - use blendmode op!
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - select alpha method (R/A/Luminance)
- op enhancement: Ops.Gl.Shader.PointMaterial_v3 - added option to set the absolute pixel size of points
- op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v3 - "calculate normals" parameter for better lighting
- op enhancement: Ops.Gl.MeshInstancer_v4 - can switch between euler/quaterion array input
- op enhancement: Ops.Net.WebSocket.WebSocket - updated string type input
- op enhancement: Ops.Value.DelayedValue - fixed memory leak, does not slow down after a while
- op enhancement: Ops.Gl.Phong.LambertMaterial_v2 - add warning when default light is used
- op enhancement: Ops.Midi.MidiNote - Add normalization of velocity values to array output
- op enhancement: Ops.Gl.Debug - add boolean for shadowpass
- op enhancement: Ops.Array.ShuffleArray3 - better random randomness
- op enhancement: Ops.Html.DivElement_v2 - now updates to the CSS style in patch when css property ops are disconnected.
- op enhancement: Ops.Html.DivElement_v2 - gives a warning if external CSS and inline CSS styles are used at the same time.
- op enhancement: Ops.Sidebar.Toggle_v2 - now displays all text correctly
- op enhancement: Ops.Trigger.TriggerString - fix: Will always output the string when triggered.
- op enhancement: var getter/setter - fixed bug where var list was not up to date
- op enhancement: var getter/setter - array,object,texture / better ui / rewrite internally
- op enhancement: Ops.Html.CSSProperty_v2 - now shows the property next to the opname
- op enhancement: Sidebar ops - many new versions with new string input port for text
- op enhancement: Ops.String.StringEditor now has "html" and "xml" option for syntax checking/highlighting
- op enhancement: Ops.Net.CorsProxy handles (multiple) redirects now
- op enhancement: Ops.Gl.TextMeshMSDF now hints at the font data being created/provided by Ops.Gl.FontMSDF
- op enhancement: Ops.Json.AjaxRequest_v2 - now is able to do more parameters for HTTP requests (method, contenttype, ...)
- op enhancement: Ops.Json.AjaxRequest_v2 - can now be told to not parse the output as JSON and always gives a string
User interface Editor
- UI: upgrade button for outdated ops
- UI: fix "create variable" button in op select dialog
- UI: texture preview is now behind patchfield
- UI: when leaving a port value input field with an invalid value, reset value to last valid
- UI: pressing shift while resizing renderer will keep aspect ratio
- UI: filemanager: better automatic file type to op assignment
- UI: you can now upload and use webp files as textures
- UI: inspect output objects: values are now syntax highlighted
- UI: inspect output objects: now show unescaped html characters
- UI: inspect output objects: can now be searched using browser search (ctrl/cmd+f)
- UI: "patch statistics" command
- UI: when copy pasting linked values, the current value of the link is copied (when output op is not selected)
- UI: ops can now filter by file suffixes, not only by file type
- UI: command palette: scrolling via cursor keys now also scrolls the whole list
- UI: fixed problem where parameter panel was too large, when using the command "scale renderer" < 1
- UI: fix: backups were not showing up anymore when patch gets bigger
- UI: op attachment editor now can open multiple editor for attachments that have the same name
- UI: fix a bug where it showed an nonsense exception when opening an op attachment editor
- UI: fixed bug where changing the title did not work
- UI: fix crash when clicking (+) button to add a texture op
- UI: fix syntax highlighting/error checking for plain text editors
- UI: fix FPS counter below renderer when limiting FPS
- UI: port values in parameter panel are now always displayed without exponent notation
- UI: object output parameter panel now indicates if a object is null
- UI: file library: removed old files/nonsense files etc. / added glb example files
- UI: editor: url parameters are copied to editor frame, so you can use UrlQueryParams ops to read parameters in the editor
- UI: texteditor: core-ops now format code on save, userops present a "format" button on the editor
- UI: when adding a lib or corelib to an op a modal suggests a reload of the page
Serverside and Access Rights
- server exporter: skip duplicate files in zip file
- server exporter: exported patches show an error message when trying to load files without a webserver
- server: "make owner" now works for non-admins, button is only being shown for owner
- server: collaborators are now copied over to projects when using "save as"
- server: userops are now "shareable" in public patches and between collaborators
- server: corelibs and libs that are attached to userops are now being loaded for collaborators
- server: userops are now available for collaborators on a project
- server: userops are now shared between live/dev/nightly
Core changes
- core: shader respect the hierarchy and extend copies of current shader
- core: patches with lots of ops load a lot faster now
- core: fix bug with blendmode problems/premultiplied colors
- core: fix rare bug producing corrupted textures when loading a new one while old url was still being loaded
- core: fix problems with google swiftshader compatibility
- core: new way of using internal core libs for ops
- core: rewrite cubemap handling
Website
- web: udpated showcase page: cables.gl
- web: /browser rewrite / more params and linkable results
- web: docs also show "hidden" ports
- web: patch page: show edit button only if user has rights to edit (e.g. secret urls)
Docs
- docs: docs are now more integrated: cables.gl
- docs: open sourced documentation: github.com
- docs: added faq transparent patch dev.cables.gl
Editor user interface
- UI: undo/redo - fix bugs/add many more actions
- UI: undo/redo - grouping of multiple actions
- UI: undo/redo - Visual undo history list in meta tabs
- UI: preferences - new option for wheelmode - set this to mousewheel if your mousewheel is scrolling / not zooming
- UI: preferences - switch between minimalistic or full op search dialog
- UI: search results - highlight subpatch name when in current subpatch
- UI: search for :outdated - show ops that could be replaced with a newer version or are deprecated
- UI: patch-export - now shows patch variables and exports them to docs.md (again)
- UI: patch-export - now shows callbacks provided by the patch and exports them to docs.md
- UI: op params - show value for connected string input ports
- UI: op params - download button next to file inputs
- UI: subpatch navigation fix positioning
- UI: canvas info area - show webgl version, if not default/v2
- UI: subpatch list is now sorted by name
- UI: fix bug where FPS was counted wrong and too big
Website
- Web: more projects were added to "made with cables" dev.cables.gl
- Web: better signup email confirmation workflow
- Web: repository for docs: github.com
- Web: fix: loggedin users can now see patches that they have a secret-url for
Ops enhancements and fixes
op enhancement: Ops.Gl.GLTF.GltfScene_v2: hide nodes by names that are in input string array
op enhancement: Ops.Gl.TextureEffects.RectangleTexture_v3 - added centered mode for easier positioning
op enhancement: Ops.Gl.ShaderEffects.VertexDisplacementMap_v2 - colorize options fixed and better control via min/max parameters
op enhancement: Ops.Gl.Meshes.Cube_v2 - select which sides to show / texture mapping bias input / correct mapping of cubemaps
op enhancement: Ops.Devices.Mouse.Mouse_v2 - added parameter to en/disable touch support
op enhancement: Ops.Gl.Shader.PointMaterial_v2 - new texture port for colorize
op enhancement: Ops.Array.Array_v2 - change order of ports, so length is first port
op enhancement: Ops.Gl.TextureEffects.FastBlur - clamp functionality to stop overbleeding
op enhancement: Ops.Gl.TextMeshMSDF_v2: - better converting
op enhancement: Ops.Gl.TextMeshMSDF_v2: - border around characters
op enhancement: Ops.Gl.FontMSDF_v2: - reload files when reuploaded
op enhancement: Ops.WebAudio.TextToSpeech.Say_v2 - has string type input for text
op enhancement: Ops.Value.TriggerOnChangeNumber outputs the current number, for convenience
op fix: Ops.Gl.GLTF.GltfScene_v2 - bug when centering was not working when loading the patch
op fix: Ops.Gl.GLTF.GltfScene_v2 - switch normals checkbox is respected by gltfnode child ops
op fix: Ops.Json.ObjectIsNull now updates nullcheck on change
op fix: Ops.Array.ReduceArray3_v2 - does not add null objects to array
op fix: Ops.Boolean.IfTrueThen_v2 - will no longer trigger output ports without input trigger connected
op fix: Ops.Gl.FontMSDF_v2 fix error when exporting patches using library fonts
op fix: Ops.Points.PointsSphereRandom - fix negative array length bug
op fix: Ops.Points.PointsSphereRandom - generate output array when creatign op
op fix: Ops.Gl.Textures.VideoTexture show error message if video is not loadable
op fix: Ops.Gl.CubeMap.CubeMapMaterial_v2: - works with WebGL1 now
New ops
- new op: Ops.Array.ArraySetNumber3 - set number values in an array3
- new op: Ops.String.OrString - outputs the first valid string
- new op: Ops.Gl.Textures.TextTexture_v3 : can now render text directly / includes hard edges shader
- new op: Ops.Gl.GLTF.GltfNodeTransforms - get transforms of multiple nodes as an array
- new op: Ops.Array.RouteArray - Route an array to an output port
- new op: Ops.Json.RouteObject - Route an object to an output port
- new op: Ops.String.RouteString - Route a string to an output port
- new op: Ops.Boolean.RouteBoolean - Route a boolean to an output port
core
- core: fix: it was possible to create textures bigger than allowed by webgl implementation
- core: fix: cases when op libraries where not loaded
- core: core is now able to load "modules" seperatly, export only consinsts of used modules
- core: ability to load and export core libraries as they are used
New ops
- new op: Ops.Gl.TextMeshMSDF_v2 - Draw text using MSDF rendering
- new op: Ops.Gl.FontMSDF - Define a MSDF font
- new op: Ops.Gl.TextureEffects.Noise.HexagonNoise - Hexagonal Noise texture
- new op: Ops.Lottie.LottieTexturePlayer - Play a Lottie animation in a texture
- new op: Ops.Gl.Shader.BasicMaterial_v3 - Internal changes optimized shader/better texture handling
- new op: Ops.Gl.Meshes.FloorGrid - draw a grid on the floor
- new op: Ops.Html.YoutubePlayer - play a youtube video in a HTML element
- new op: Ops.Html.ModalOverlay - create a modal HTML overlay with a darkened background
- new op: Ops.Html.WindowClose - Close current window
- new op: Ops.Website.ForceHttps - will redirect to same URL using https protocol
- new op: Ops.String.LoremIpsum - Lorem ipsum dolor sit amet
- new op: Ops.String.AddLineBreaks - Insert a linebreak after n characters
- new op: Ops.String.LineBreaksHtml - Convert linebreaks to html breaks
- new op: Ops.Array.ArraySetNumber - set a number at index in an array
- new op: Ops.Trigger.IsTriggered - outputs true if was triggered last frame
- new op: Ops.Trigger.TriggerString - trigger a string
- new op: Ops.Debug.ConsoleLog - output values to the console
- new op: Ops.Vars.VarSetTexture - Set a texture variable
- new op: Ops.Vars.VarGetTexture - Get a texture variable
- new op: Ops.String.FilterValidString - Filter valid strings (not null,undefined or empty)
- new op: Ops.Value.FilterValidNumber - Filter valid numbers
- new op: Ops.Array.FilterValidArray - Filter valid arrays
- new op: Ops.Json.FilterValidObject - Filter valid objects
- new op: Ops.Json.ObjectSetString - set string value in an object by key
- new op: Ops.Boolean.BoolToString - convert boolean to string
- new op: Ops.Gl.Textures.SwitchTextures_v2 - now only works when triggered
- new op: Ops.Gl.TextureEffects.Stripes_v3 - draws on top of other textures without blend modes
- new op: Ops.Gl.TextureEffects.Waveform_v2 - draws on top of other textures without blend modes
- new op: Ops.Gl.TextureEffects.WaveformGradient_v2 - draws on top of other textures without blend modes
- new op: Ops.Value.Integer - Stores an integer and allows it to be reused in other parts of the patch.
- new op: Ops.Array.ArrayOfObjectsFilterByKeyValue: filter objects in array of objects by key & value
- new op: Ops.Array.ArrayOfObjectsFilterKeys: remove keys from objects in array of objects
- new op: Ops.Array.ArrayOfObjectsToString: turn an array of objects into a string
- new op: Ops.Net.SocketCluster.SocketCluster - websocket functions
- new op: Ops.Sidebar.Incrementor - Steps through numerical or array values one by one
Editor user interface
- UI: canvas menu for seting up which op transform gizmos and helper are shown
- UI: canvas focus button to quickly change aspect ratio or resolution of renderer
- UI: better support and automatic detection of touchpads and apple mouse
- UI: file view: more file type icons / library files can now be downloaded/searched etc
- UI: ops working with files now show filename in op extenede title
- UI: search: pressing shift clicking bookmarks/search results will only show op parameters, without scrolling to op (or switching to subpatch)
- UI: search: ctrl+f/cmd+f always shows search tab
- UI: search: see all recently used ops
- UI: better error display of ops
- UI: fix: editor does not show save button when in read-only mode
- UI: code tab edit op button reads "edit" when user has rights to edit the op
- UI: op history: press j/k to cycle between last selected ops
- UI: editor will pause rendering after 60 seconds of inactivity
- UI: fixed bug when cursor keys did not work in parameter input fields
- UI: op parameter header shows if there is a newer version of op available / better warning message and link on op doc page.
- UI: export patch: option to include all files of the patch
- UI: command palette: added timeline play/pause/rewind commands
- UI: varGet/varSet ops filter variables only show by correct type
- UI: better cache invalidating when uploading json or gltf files
- UI: performance optimizations of animated op output parameters
- UI: Mesh helpers now work in WebGL1 aswell
- UI: cables code-editor now adheres to es2017 standards (async/await)
- UI: fix bug with "show/hide helpermeshes" not being followed
- UI: Comment op can no longer throw an error due to MathParser.eval()
Op enhancements and fixes
new op version: Ops.Gl.ShaderEffects.ColorArea_v2 - internally copying the shader / fixing the shaderStack
new op version: Ops.Vars.VarSetNumber_v2 - added a button for creating new variables / removed invalid variables
new op version: Ops.Devices.Mouse.MouseWheel_v2 - new version / more compatible values between browsers and os's
new op version: Ops.Gl.Meshes.Rectangle_v2 - rebuild only when needed / needs trigger to build geometry
op enhancement: Ops.Gl.Phong.LambertMaterial_v2 - add diffuse texture, add lighting calculations for all lights, new falloff mode, works on iOS
op enhancement: Ops.Gl.TextureEffects.PseudoLensFlares - add iOS compatibility
op enhancement: Ops.Devices.Midi.MidiMonitor: add device name info
op enhancement: Ops.Net.CorsProxy_v2 now urlencodes given strings to always make them work with the actual proxy
op enhancement: Ops.Json.AjaxRequest_v2 now has a trigger to reload data
op enhancement: Ops.Gl.ShaderEffects.ColorArea_v2 - added box area shape
op enhancement: Ops.Gl.Textures.WebcamTexture - added parameters: resolution and facing direction(user/environment)
op enhancement: Ops.Gl.Performance - shows gpu performance when possible (chrome) / better colors / more options
op enhancement: Ops.Html.CSS_v2 - You can now use {{ASSETPATH}} to get a URL to file Assets
op enhancement: Ops.Gl.Shader.ShaderInfo - works now even if shader is not used
op enhancement: Ops.Json.ObjectSetObject - fix string input
op enhancement: Ops.Value.Preset - move preset up/down
op enhancement: Ops.Gl.Texture_v2 - op active boolean input, handy for loading textures later
op enhancement: Ops.Gl.Texture_v2 - new URL string input field
op enhancement: Ops.Gl.MeshInstancer_v3 - performance improvement / uploads only data that has changed
op enhancement: Ops.Devices.Mobile.MotionSensor_v2 - added rotation rate outputs
op enhancement: Ops.Html.TransformElement - new parameters: scale / rotate / alignment
op enhancement: Ops.Gl.RenderAnim_v2 - transparency checkbox
op enhancement: Ops.Gl.InteractiveRectangle - option to not render the rectangle, but still be interactive...
op enhancement: Ops.Sidebar.ColorPicker - now has hex out
op enhancement: Ops.Cables.FPS - get averaged fps over n seconds
op enhancement: Ops.Boolean.ParseBoolean_v2 - new string port type
op enhancement: Ops.Gl.MeshInstancer_v3 - added material blend modes - Multiply, add and Normal
op enhancement: Ops.Gl.Shader.Shader2Texture - Custom resolutions can now be used again
op enhancement: Ops.Devices.Mouse.Mouse_v2 - Keeps mouse on the last position when it leaves the canvas and smooth is enabled.
op enhancement: Ops.Html.IFrame_v2 - shows border correctly when "show border" option is enabled
op enhancement: Ops.Exp.Gl.DeviceOrientationCamera - works correctly on IOS and android
op enhancement: Ops.Gl.TextureEffects.Blur - Gives a warning if a full screen blur is used.
op enhancement: Ops.Gl.Meshes.RectangleFrame - Rendering can now be disabled
op enhancement: Ops.Points.PointsSphereRandom and Ops.Points.PointsCube now output total amount of points and array length
op enhancement: Ops.Array.SimplexArray now has an array input for time based values
op enhancement: Ops.Array.PerlinArray now has an array input for time based values
op enhancement: Ops.Array.ArrayGetNumber - now checks if the array value is a number
op enhancement: Ops.Gl.TextureEffects.WaveformGradient_v2 - now has a 'square' mode.
op enhancement: Ops.Gl.Meshes.Cone - Now has texture co-ordinates
op enhancement: array math, array logic , math and comparison ops are much faster now.
op enhancement: Ops.Array.InterpolateArrays - is much faster now
op enhancement: Ops.Gl.ShowNormals_v2 - rework op, add color & fix geometry input
op enhancement: multiple HTML and CSS ops now use the correct string input ports
op fix: Ops.Array.ArraySetArray no longer crashes if 2nd array is not connected
op fix: Ops.Array.ArrayLogicBetween_v2 - now checks the max value correctly
op fix: Ops.Math.Math - is much faster and no longer redraws UI elements every frame
op fix: Ops.Systems.Lsystem_v2 - now works again with string inputs for rule fields.
op fix: Ops.Sidebar.TextInput_v2 - displays default text when TextArea is selected.
op fix: Ops.Devices.Mobile.MotionSensor2 - now works with android and IOS. RENAME it to Ops.Devices.Mobile.MotionSensor_v2 before the next update
op fix: Ops.Array.ArrayChunk - No longer crashes when chunk size is greater than the length of the incoming array
op fix: Ops.Gl.CubeMap.CubeMapFromTextures_v2: fix asynchronous loading bug, add Y-Up feature
op fix: Ops.Gl.CubeMap.CubeMapCamera_v2: fix wrong cubemap face renders
op fix: Ops.Devices.Midi.MidiInputDevice_v2: now only tracking input devices, not output devices anymore
op fix: Ops.Gl.MeshInstancer_v3 rendering problems cone and torus
op fix: Ops.Gl.ForceCanvasSize - fixed bug: not updating the first time changing to aspect ratio
op fix: Ops.Gl.ForceCanvasSize - fixes for retina/hdpi displays
op fix: Ops.Audio.SpeechRecognition - works continously now
op fix: Ops.Gl.Textures.WebcamTexture - now works on ios
op fix: Ops.Ui.Comment_v2 - fix bug when it was not showing correct text
op fix: Ops.Gl.MeshInstancer_v3 - removing color array resets color to material color, fix blend modes for alpha channel
op fix: Ops.Array.ParseArray_v2 op now updates error-state for "numbers" correctly on change
op fix: Ops.Gl.Phong.PhongMaterial_v4 - correct lighting with mesh instancer
op fix: Ops.Gl.Phong.LambertMaterial_v2 - correct lighting with mesh instancer
op fix: Ops.Gl.CubeMap.CubeMapMaterial_v2: render sides correctly for cubemap & equirectangular, inside or outside of a mesh, flip option for each axis
Website
- web: util page to debug browser events: dev.cables.gl
- web: tweak front page for mobile devices
- web: my patches list: by default ordered by date of last change
- web: my patches list: tabs for ordering by create/changed date
- web: properly integrated "top of the month" to the search and linked to it from the dashboard (cables.gl)
- web: likes no longer go off-screen when they are "too many" (cables.gl)
- web: images on search/overview now load for the first few patches
- web: secret url now loads userlibs and userops
- web: invite collaborator to patches sending mails, not only add them
Core
- core: vars: create variable helper functions also work for strings now
- core: vars: getter ops: only show vars compatible to the selected type
- core: vars: list always sorted by alphabet
- core: performance optimizations
Github
- github: updated coding with cables repo with clear examples of creating port types which are now up to date
Cables CLI
- cables-cli: now supports -h switch to hide "made with cables" (github.com)
- cables-cli: bugfix: make cables-api export return proper 404 and json on "project not found" error
- cables-cli: now supports "--assets" to download all/auto/none assets in export
Daplaya
- daplaya: daplaya no longer displays "made with cables" (github.com)
Discord
- discord: forum/published patches/social media are posted on our new discord - discord.gg
- New op: Ops.Gl.GLTF.GltfScene - GLTF File Loader and renderer
- New op: Ops.Gl.TextureEffects.ClampTexture - Clamp texture values with remap and smooth remap options
- New op: Ops.Gl.TextureEffects.LensScratches - procedural lens scratches texture generator
- New op: Ops.Gl.TextureEffects.LensDirt - procedural lens dirt texture generator
- New op: Ops.Math.Crossfade - crossfade between 2 values
- New op: Ops.Array.ArrayUnique - filters duplicate items form an array and returns unique values
- New op: Ops.Array.ArrayUniqueItemInfo - gives information about the appearance of items in an array
- New op: Ops.Devices.Mobile.MotionSensor2 - get motion sensors/ gyroscope etc. now works with ios 13 permission system
- New op: Ops.Array.CopyArray - Copy an array with a trigger, reset to use a default array
- New op: Ops.Array.HSBtoRGBArray - generates RGBA array from up to 4 arrays (HSBA)
- New op: Ops.Array.RandomArrays - create 1-, 2-, 3- or 4-dimensional array
- New op: Ops.Array.RandomNumbersArray4_v2 - create random array of 4-tuples
- New op: Ops.Array.SplinesToLineStripArray - Convert an array of splines to one "line stripped" array
- New op: Ops.Gl.ForceCanvasSize - Resize canvas element to a specific pixel size or aspect ratio
- New op: Ops.Gl.Matrix.CameraInfo - get camera attributes
- New op: Ops.Gl.ShaderEffects.AreaScaler_v2 - Scales the size of meshes within the area of influence
- New op: Ops.Gl.ShaderEffects.AreaTranslateFBMNoise - Translate object positions by noise
- New op: Ops.Gl.Array3ToTexture - Convert an array of RGB values to a texture
- New op: Ops.Gl.ShaderEffects.AreaTranslateMeshes - Change the position of all meshes inside of the area of influence
- New op: Ops.Html.ElementSize - Get size and position of a HTML element
- New op: Ops.Math.Compare.CompareNumbers - Performs logical comparisons on numbers (compare, operators)
- Editor: Ops.Sidebar.Sidebar - complete redesign, hopefully looking much better/modern now
- Editor: Search dialog (cmd/ctrl+f) - reworked and put into tabs
- Editor: Search dialog - quickfilter functionality by color/bookmarks/user ops etc.
- Editor: all ops with an inSwitch and inValueSelect now expose an in-port that takes the position of the desired dropdown-value as an input
- Editor: Click link circle to replace link with a new variable (make little VIDEO)
- Editor: export now includes external libraries in single-file-export, some cleanup
- Editor: external libraries can be added to user-ops again
- Editor: FileManager: jpg/png files imagemin optimize button
- Editor: Hold alt/meta and drag mouse/tablet pencil to zoom in/out
- Editor: Mathparser - Number input fields now have a simple math expression parser - VIDEO
- Editor: More accessible bookmark icon
- Editor: New command "create number variable"
- Editor: Open code editor from the op search dialog, handy when your op has code errors...
- Editor: Ops.Value.Preset - many ui tweaks to make it easier to work with
- Editor: Patch settings load and save faster
- Op enhancement: Ops.Gl.FaceCulling_v2 - fix: behaves correctly when using stacked cull modes
- Op enhancement: mouse/touchscreen ops: add element event switch
- Op enhancement: Ops.Anim.Bang - output can be inverted to count from 0-1
- Op enhancement: Ops.Anim.SineAnim - Added cosine mode
- Op enhancement: Ops.Array.Array_v2 - Now has reversed normalized mode going from 1.-0.
- Op enhancement: Ops.Array.CropArray - add startindex parameter
- Op enhancement: Ops.Gl.GradientTexture now takes array as input and can work with alpha (if in array)
- Op enhancement: Ops.Gl.Matrix.CircleTransform - added absolute number parameter
- Op enhancement: Ops.Gl.Matrix.ScreenCoordinates - boolean output if visible in canvas
- Op enhancement: Ops.Gl.Meshes.Cone - rendering can now be disabled.
- Op enhancement: Ops.Gl.Meshes.Cube - switch mapping methods
- Op enhancement: Ops.Gl.Meshes.SimpleSpline - added switch to generate texture coords
- Op enhancement: Ops.Gl.Meshes.TextMesh_v2 - texture mask input
- Op enhancement: Ops.Gl.Meshes.TextMesh_v2 - texture multiply input
- Op enhancement: Ops.Gl.MeshInstancer_v3 - add color array input to MeshInstancer
- Op enhancement: Ops.Gl.Shader.MatCapMaterialNew - tex offset params / tex lookup performance optimization
- Op enhancement: Ops.Gl.ShaderEffects.AreaDiscardPixel - added box shape
- Op enhancement: Ops.Gl.ShaderEffects.AreaDiscardPixel - scale area per axis
- Op enhancement: Ops.Gl.ShaderEffects.MeshPixelNoise - noise has xyz parameters
- Op enhancement: Ops.Gl.Texture - anisotropic texture filtering switch
- Op enhancement: Ops.Gl.TextureEffects.BarrelDistortion_v2 doesn't distort the image when intensity is set to 0
- Op enhancement: Ops.Gl.TextureEffects.CheckerBoard - Added scale from center mode
- Op enhancement: Ops.Gl.TextureEffects.Noise.PixelNoise_v2 - Added scale from center mode
- Op enhancement: Ops.Gl.TextureEffects.Rectangle_v3 - better color drawing / better coordinate system / aspect ratio
- Op enhancement: Ops.Json.AjaxRequest now takes a key/value-object of additional headers (i.e. for authorization tokens)
- Op enhancement: Ops.Json.ParseObject_v2 - better error handling
- Op enhancement: Ops.Math.Sign - Now has a mode to not output zero.
- Op enhancement: Ops.Net.CorsProxy_v2 - refactored to use new string instead of old
- Op enhancement: Ops.Gl.Phong.AmbientLight_v4 - changed default color to
- Op enhancement: Ops.Gl.Phong.PhongMaterial_v4 - works on iOS (light limit on iOS: 6), add more control to Fresnel (width, exponent)
- Op enhancement: Ops.Sidebar.TextInput_v2 - toggle between single input line or multiline textarea- UI: Screenshot button can now produce transparent images
- Op enhancement: Ops.String.LimitLineBreaks_v2 - force number of lines / amount of lines now shown is correct / fix crash
- Op enhancement: Ops.Value.Preset - presets can now be renamed / deleting a preset op will delete internally used variable connections from ports
- Op enhancement: RandomNumber Array Ops - now reaches max value when set to integer mode. Outputs null when array length is set to zero
- Op enhancement: Sidebar input ops have greyout/visible toggles
- Web: a core jsdoc page, this will be improved in the future - jsdoc.cables.gl
- cables-cli: new version allows for deployment to netlify
- core: cables now fires
CABLES.jsLoaded
event when all javascript libraries are loaded to allow for async loading of the patch, updated export and docs accordingly - core: fix bug in some cases disconnected arrays were still acting as being connected
- From now on, you can now read a full summary of our updates on our blog: blog.cables.gl
- Web: Welcome page shows latest news from our blog.
- Editor: Text editor colorcoded content type display in tab
- Editor: fix open renderer in new window
- Editor: new background color
- Editor: Attach variables directly to ports without having to add extra ops
- Editor: help nav - list of keyboard shortcuts
- Editor: fix text-editor height bug
- Editor: fix and tweak colorpicker hex input
- Web: You can find cables updates in out blog from now on: blog.cables.gl
- Web: Welcome page header is now connected to our new blog
- new op: Ops.Gl.PixelProjection
- new op: Ops.Math.MapGeoCoordsSpherical - Map geo locations (latitude - longitude) to spherical coordinates
- new op: Ops.Gl.TextureEffects.GrowPixels - Make one pixel lines thicker via postprocessing
- new op: Ops.Array.MapRangeArray - map numerical values in an array from one range to another
- new op: Ops.Array.SortArrayObjectsByKey - sort objects in an array by value of key (also nested)
- new op: Ops.Date.DateIsoToTimestamp - parse a iso formated date string to javascript timestamp
- new op: Ops.Array.GetValuesFromArrayOfObjects - Get an array of values by key of objects in an
- new op: Ops.Devices.Midi.MidiOutputDevice - Connect to MIDI device input port
- new op: Ops.Devices.Midi.MidiCCOut - Send MIDI CC data to a midi output
- new op: Ops.Devices.Midi.MidiNoteOut - Send midi note data to a midi output
- new op: Ops.Devices.Midi.MidiNRPNOut - Send midi NRPN data to a midi output
- new op: Ops.Gl.Phong.PhongMaterial_v4 - A shaded material for lighting objects
- new op: Ops.Gl.Phong.PointLight_v4 - Point light for phong shading
- new op: Ops.Gl.Phong.DirectionalLight_v4 - Directional light for phong shading
- new op: Ops.Gl.Phong.SpotLight_v4 - Spot light for phong shading
- new op: Ops.Gl.Phong.AmbientLight_v4 - Ambient light for phong material shading
array - op enhancement: Ops.Gl.Orthogonal_v2 - added axis switch
- op enhancement: Ops.Array.ParseArray_v2 - shows error indicator when invalid numeric values
- op enhancement: Ops.Gl.TextureEffects.DrawImage_v2 - transforms also apply to alpha mask
- op enhancement: Ops.Trigger.Repeat_v2 - now direction of index can be selected
- op enhancement: Ops.Devices.TouchGesture - added active bool input
- op enhancement: Ops.Gl.Meshes.SimpleSpline - performance improvement
- op enhancement: Ops.Json3d.Mesh3d - can now load meshes with vertexColors
- op enhancement: Ops.Gl.Meshes.PointCloudFromArray - performance improvement when updating coordinates regularly
- op enhancement: Ops.Devices.TouchScreen has force output - tested with apple pencil pressure/ipad pro
- op enhancement: Ops.Math.AddUp - reset trigger
- op enhancement: Ops.Gl.Shader.MatCapMaterialNew - added opacity texture
- op enhancement: Ops.Gl.TextureEffects.ScaleTexture - now has a mask input to control the scale with a texture
- op enhancement: Ops.Devices.Midi.MidiNote - added array out option for multiple notes
- op enhancement: Ops.Devices.Midi.MidiCC - added array out option for multiple cc values
- Rename Ops.Gl.Matrix.ViewMatrixTranslation to Ops.Gl.Matrix.cameraPosition
- Rename Ops.Gl.CanvasSize to Ops.Gl.CanvasInfo
- Rename Ops.Value.ValueBoolean to Ops.Value.Boolean
- Rename Ops.Gl.TextureEffects.Scroll to Ops.Gl.TextureEffects.ScrollTexture
- Rename Ops.Gl.TextureEffects.Circle to Ops.Gl.TextureEffects.CircleTexture
- Rename Ops.Value.ValueHub to Ops.Value.NumberSequence
- Rename Ops.Gl.Textures.Text_v2 to Ops.Gl.Textures.TextTexture_v2
- Rename Ops.Gl.Textures.Graph to Ops.Gl.Textures.GraphTexture
- Rename Ops.Json3d.Json3dScene2 to Ops.Json3d.Scene3d_v2
- Deprecated Ops.Devices.Midi.MidiKeyPressed
- Deprecated Ops.Value.ValueChanged
- Deprecated Ops.Value.ValueStringEditor
- Deprecated Ops.Gl.Particles.PointCloudFile
- Deprecated Ops.Devices.Midi.MidiSend
- Deprecated Ops.Devices.Midi.LaunchPadScroller
- Editor Preferences: added zoom speed option
- Editor Op port output values: click to copy to clipboard
- Editor: Timeline: easing selection works again
- Editor: Filemanager filters correct files for current port
- Editor: Export compatibility option: ES5 transpilation for older browsers
- Editor: Middle click for quicker linking
- Editor: Fixed text editor tabs height/cutoff problem
- Editor: Op search dialog search algorithm improved, e.g. order of words does not really matter anymore
- Editor: Hold shift key to add ops to selection
- Editor: canvas resolution field now also shows browser zoom level
- Web: user settings op page now is now ordered by date of creation
- Web: Added Github/Coding with cables link to Learn section.
- Cables-cli: updated github.com
- Cables-cli: added "combine-js" and "old-browsers" options to cables-cli
- Core: Fix webgl console warnings in firefox
- new op: Ops.Value.Preset - State management of all parameters connected to it - Create presets of multiple ops
- new op: Ops.Systems.ArraySpray - Particle Spray simulation
- new op: Ops.Mesh.Triangulate2dPath - Triangulate a 2d path to a flat and filled 3d geometry
- new op: Ops.Devices.OSC.OscNumber - Outputs a single number from a user defined OSC address
- new op: Ops.Devices.OSC.OscNumbers - Outputs up to 4 numbers from a user defined OSC address
- new op: Ops.Devices.OSC.OscArray - Outputs an array of data from a user defined OSC address
- new op: Ops.Devices.OSC.OscMessage - Shows the current active address of an incoming OSC message
- new op: Ops.Array.GetValuesFromArrayOfObjects - Get an array of values by key of objects in an array
- new op: Ops.Math.MercatorCoordsArray - Mercator map and center an array of latitudes and longitudes to a local coordinate system
- new op: Ops.Sidebar.LocalTextureFile - Let the user select a local file as a texture
- new op: Ops.Array.ArrayPack - Packs multiple arrays into a new array
- new op: Ops.Array.ShuffleArray3 - Shuffle an array of triplets
- new op: Ops.Array.FlattenArray - Creates a new array with all sub-array selements concatenated into it
- new op: Ops.String.CharacterRotate - String rotate characters like a split-flap display
- new op: Ops.Array.InfoArray2 - min,max and average values of an array3
- new op: Ops.String.NumTotalLineBreaks - Count number of line breaks in a string
- Op Enhancement: TextureEffects.Circle - Circle fix position
- Op Enhancement: Timer op can now be synched to timeline
- Op Enhancement: pointcloudfromarray input for texture coordinates
- Op Enhancement: pointmaterial - lookup texture now also affects mask texture
- Op Enhancement: ObjectGetNumber_v2 - new string type
- Op Enhancement: ObjectGetObject_v2 - new string type
- Op Enhancement: ParseObject_v2 - new string type
- Op Enhancement: SetObjectKeyValue - new string type
- Op Enhancement: TextureEffects.Scroll - mask parameter
- Op Enhancement: PointCloudFromArray - fix crash when switching scramble texcoords
- Op Enhancement: MouseDrag - added input type selection
- Op Enhancement: ShuffleArray rewrite - now works without any triggers
- Op Enhancement: Customshader2 - fix bug where vec3 was not updated after saving shadercode
- Op Enhancement: Array.ArrayLogic user can set value if condition evaluates to true
- Op Enhancement: Array.ArrayLogic now shows selected mode in UI
- Op Enhancement: Array.ArrayLogicArray user can set value if condition evaluates to true or false
- Op Enhancement: Array.ArrayLogicBetween allows pass value when it evaluates to true
- Op Enhancement: Math.RandomNumbers now generates random numbers when op is created and if seed,min and max. "is changed" Option to output floats or integers.
- Op Enhancement: Array.ArrayPack2 - Speed optimization.
- Op Enhancement: Array.ArrayPack3 - Speed optimization.
- Op Enhancement: Array.ArrayPack4 - Speed optimization.
- Op Enhancement: Array.TransformArray3- Speed optimization.
- Op Enhancement: Multiple random number ops can now output floats or integers.
- Op Enhancement: Array.Array3Average now outputs the correct average values of the array
- Op Enhancement: Anim.Smooth doesn't break anymore when inc/dec factor is set to zero
- Op Enhancement: TextureEffects.Shapes2d - now renders correctly on macos
- Op Enhancement: Array.RandomNumbersArray_v2 - Doesn't output an array of 100 when numValues is set to zero.
- Op Enhancement: Gl.MainLoop - Now shows in op title, if it's active or inactive
- Op Enhancement: WebAudio.BiquadFilter - Frequency can now go higher than 1
- Op Enhancement: Exp.Lsystem_v2 - Fixed bug in rule string creation.
- Old Op Gl.ShaderEffects.Fog has been renamed to Ops.Gl.ShaderEffects.FogEffect
- Old Op Gl.TextureEffects.Repeat has been renamed to Ops.Gl.TextureEffects.RepeatTexture
- Old Op Array.Array3Transform has been renamed to Ops.Array.TransformArray3
- Old Op Json3d.Json3dMesh has been deprecated. Please use Ops.Json3d.Mesh3d
- Old Op Trigger.SwitchTrigger has been renamed to Ops.Trigger.RouteTrigger
- Old Op Math.Array3x2dProjection has been renamed to Ops.Math.Array3To2dProjection
- Old Op Array.ArrayPushValue3x has been renamed to Ops.Array.Array3PushNumbers
- Old Op String.Join_v2 has been renamed to Ops.Array.ArrayToString_v3
- Old Op Points.PointsField3d has been renamed to Ops.Points.PointsCube
- Old Op Array.PointArray.Field has been renamed to Ops.Points.PointsPlane
- Old Op Value.Value3 has been renamed to Ops.Value.Trigger3Numbers
- Old Op Math.Random2 has been renamed to Ops.Math.TriggerRandomNumber
- Old Op Array.ArrayRotate has been renamed to Ops.Array.RotateArray
- Old Op Array.Array3Average has been renamed to Ops.Array.Array3GetAverage
- Old Op Array.ArraySmooth has been renamed to Ops.Array.AverageArray
- Old Op Gl.OnResize has been renamed to Ops.Gl.TriggerOnCanvasResize
- Old Op Color.RGBtoHSV has been renamed to Ops.Color.RGBtoHSB
- Old Op Json3d.Json3dMesh2 has been renamed to Ops.Json3d.Mesh3d
- Old Op Json.ObjectGetValue has been renamed to Ops.Json.ObjectGetNumber
- Old Op Array.AverageInterpolationArray has been renamed to Ops.Array.SmoothArray
- Old Op Array.ContinuousNumberArray has been deprecated. Please use Ops.Array.Array_v2
- Old Op Math.Array3xTransform has been renamed to Ops.Array.Array3Transform
- Old Op Array.Array3xAverage has been renamed to Ops.Array.Array3Average
- Old Op Value.Value has been renamed to Ops.Value.Number
- Old Op Math.Array3xMultiplyMatrix has been renamed to Ops.Math.Array3MultiplyMatrix
- Old Op Array.Array3xInterpolateDistributed has been renamed to Ops.Array.Array3InterpolateDistributed
- Old Op Array.Array3xRandomSelection has been renamed to Ops.Array.Array3RandomSelection
- Old Op Array.Array3xGetValues has been deprecated. Please use Ops.Array.Array3GetNumbers
- Old Op Array.ArrayUnpack4x has been renamed to Ops.Array.ArrayUnpack4
- Editor: User settings are now called preferences and have a completly new UI (cables->preferences)
- Editor: You now have to select a license to publish your patch, this license will be shown on the patch page.
- Editor: Show warning icon indicator, when network is disconnected
- Editor: Straight lines mode: cables now have edges
- Editor: Search: (cmd/ctrl+f) now shows where it found the query
- Editor: Search shows you selected ops and last clicked entries
- Editor: Search results can now be navigated using cursor keys
- Editor: Filemanager can switch between icon or list display again
- Editor: Filemanager list mode shows file size and date
- Editor: Filemanager list can be sorted by name/size/date
- Editor: Filemanager search/filter functionality
- Editor: Filemanager shows size when selecting multiple files
- Editor: Exported patch better minification
- Editor: Added LUTmap example files
- Editor: SVG path point converter: Now also parses polygons elements
- Editor: Many tweaks
- Web: browser info page now checks for WebGPU - cables.gl
- Web: Basic examples page has been cleaned up and has new sections and examples - cables.gl
- New op: Ops.Array.ArrayPack2 - Packs two individual arrays into a new array
- New op: Ops.TimeLine.TimeLinePlayer - Bundled timeline controls and timeline information
- New op: Ops.Gl.TextureEffects.Shapes2d - Generates lots of 2d shapes as a texture
- New op: Ops.Array.ArrayClamp - Clamps array values to a min and max value
- New op: Ops.Gl.TextureEffects.PaletteTexture - Generate a palette texture with an array input
- New op: Ops.Array.PaletteLibrary - Huge palette library in array form. Use with Palette texture op.
- New op: Ops.Array.ArrayMerge_v2 - Only merges 2 arrays together when 2 are present.
- New op: Ops.Array.ArraySqrt - Calculates the square root of an array
- New op: Ops.String.LimitLineBreaks - Limit number of lines in a string
- New op: Ops.Math.IndexFraction - Return fraction of value by index
- New op: Ops.Gl.Matrix.RandomGridPlacementArrays - Generate recursive random grid positions for instancing
- New op: Ops.Array.ArrayLogicBetween - outputs an array of 0 and 1 if array value is between of min and max or not
- New op: Ops.Html.WindowInfo - size of browser window in pixels
- Enhancement: Mesh Instancing now also works with non-indexed meshes
- Enhancement: Ops.WebAudio.AudioAnalyzer - User can now pick FFT size
- Enhancement: Ops.Gl.Meshes.TriangleArray_v2 - Now renders normals correctly with all materials.
- Enhancement: Ops.Array.ArrayLogic - User can now define a default value when it evaluates to true
- Enhancement: Ops.Gl.Matrix.WASDCamera_v2 - Added speed parameter
- Enhancement: Ops.Gl.TextureEffects.Fog_v2 - Complete overhaul. Much easier to use now. Accepts color gradient texture to control fog color over distance.
- Enhancement: Ops.Array.InterpolateNumbersArray3 - Doesn't output NaN when index is larger than array length
- Op Enhancement: New string version: Ops.String.Join - Join array values to a string
- Op Enhancement: New string version: Ops.Sidebar.SidebarText_v2
- Op Enhancement: Ops.Gl.Meshes.Cylinder_v2 - option flip mapping to horizontal mode
- Op Enhancement: Ops.Gl.TextureEffects.Stripes_v2 - added circular mode
- Op Enhancement: Ops.Gl.TextureEffects.ColorChannel - new alpha masking option
- Op Enhancement: Tweak scaling of Mesh and renamed JsonMesh3d to Ops.Json3d.Mesh3d
- new op: Ops.Gl.Meshes.ParametricSurface - Creates a 3d mesh from Math expressions
- new op: Ops.Array.InterpolateNumbersArray - interpolate between all values of an array
- new op: Ops.Gl.Shader.Shader2Textures - Render a shader to multiple textures
- UI: remove + button/add button / doubleclick on ops in opselect list
- UI: subpatch ports can now be renamed
- UI: fix connecting subpatch outputs in both directions
- UI: fix copy/pasting of whole subpatches
- UI: hovering ports now shows values of arrays/strings etc.
- UI: new tab icons for meta area
- Fix: mainloop active toggle
- Fix: Ops.Math.Random2 - replaced rounding of number to floor for correct random distribution
- API: ops can change title of ports via
render.setUiAttribs({title:"do the rendering"});
- Enhancement: Ops.Gl.Matrix.OrbitControls - reset trigger now also resets position from panning
- Enhancement: customshader2 show uniform types as ports: int,vec2,vec3,vec4
- Enhancement: customshader2 better parsing of uniforms
- Enhancement: Ops.Gl.Phong.LambertMaterial - Added double-sided option
- Enhancement: Ops.Gl.ShowNormals - Added show tangent & bitangent functionality
- Rename: Ops.Json.ObjectGetValue renamed to Ops.Json.ObjectGetNumber
- UI/Web: create patch: more and better patch templates to choose from
- UI: fix bug when no ops are visible anymore, after pressing c
- UI: fix/workaround on chrome mac - big value jumps when dragging parameter
- new op: Ops.Array.SmoothArray - performs average interpolation on array with varying up and down speeds
- new op: Ops.Array.PerlinArray - Creates an array filled with controllable Perlin noise
- new op: Ops.Array.SimplexArray - Creates an array filled with controllable Simplex noise
- new op: Ops.Array.SubdivideArray1 - Subdivides a single array
- new op: Ops.Math.RoundEven - Round to the next even number
- new op: Ops.String.StringEquals - check if content of two strings is the same
- new op: Ops.Gl.ShaderEffects.VertexPositionFromTexture - Set vertex positions from texture color values
- new op: Ops.Sidebar.SidebarVariables - show values of all variables in a sidebar
- new op: Ops.String.RightPadNumber_v2 - Converts a number to a string with x decimal places
- enhancement: Ops.Gl.TextureEffects.Interlace - added X or Y direction to scan lines
- enhancement: Ops.Array.ShuffleArray - now has a shuffle trigger so user can define when shuffle occurs
- enhancement: Ops.Array.Array_v2 - added extra mode for normalized values between 0-1
- enhancement: Ops.Gl.TextureEffects.Noise.PixelNoise_v2 - now has a controllable seed parameter
- enhancement: Ops.Gl.TextureEffects.RotateTexture - texture input for multiplier of the effect
- enhancement: Ops.Gl.TextureEffects.Pixelate - texture input for multiplier of the effect
- enhancement: Ops.Math.PerlinNoise - added seed parameter
- enhancement: fix Ops.Gl.TextureEffects.Noise.PixelNoise_v2 - black and white mode seed now always works
- many renamed ops to new naming guidelines, list of all changes: cables.gl
- Web: Filter Ops By Collections cables.gl
- Web: Clean up Layout of op detail page
- UI: show Op Modes in the title, e.g. Blendmodes of TexturEffects
- UI: new inSwitch UI Element for faster switching instead of dropdown element
- UI: Scroll in patch using mousewheel and alt/shift keys
- UI: Coding Ops: checking syntax for errors when coding before saving
- UI: code editor much better auto completion
- UI: Fix more cases of overlapping ops
- UI: newly created user ops should now show up in op search immediately
- UI: create variable shortcut in op select now works for all types
- UI: fixed browser crash/infinite loop when deleting parent op of a newly created port using subpatch "create port"
- Core: cleaned up port create functions docs.cables.gl
- new op: Ops.Gl.Meshes.RectangleRounded - Draws a rectangle with rounded corners
- new op: Ops.Gl.TextureToPoints - Create points by sampling texture
- new op: Ops.Array.ArrayLogic - Performs logical comparison operations on a single array of numbers
- new op: Ops.Array.ArrayLogicArray - Performs logical comparison operations on two arrays
- new op: Ops.String.ConcatMulti.js - Joins multiple strings together
- new op: Ops.Array.SortArray - Sorts an array of numbers with one of two modes - ascending or descending
- new op: Ops.Array.Array3VectorLength - Returns the length of a vector for every triplet in an array
- new op: Ops.Devices.Midi.MidiTranspose - transposes midi notes by given number
- new op: Ops.Array.Array4toArray3 - convert an array4 to array3 by dropping every 4th number
- Enhancement: Ops.Gl.Meshes.PointCloudFromArray - Array Input for Vertex Colors / control color of every particle
- Enhancement: Ops.Anim.SineAnim - now has trigger out
- Enhancement: Ops.Array.ArrayPack3 - now has trigger out
- Enhancement: Ops.Array.Array_v2 changed dropdown to switch
- Enhancement: Ops.Array.Array_v2 - now shows selected mode in op view
- Enhancement: Ops.Devices.Midi.* - add output port grouping to all Midi ops
- Enhancement: Ops.Devices.MidiNote - add toggle functionality
- Enhancement: Ops.Devices.Midi.MidiNRPN - add clear functionality
- Enhancement: Ops.Gl.Meshes.SimpleWireframe - now also works with unindexed meshes
- Fix: Ops.Html.FontFile - Fixed file loading problems when viewing outside of the editor
- Fix: Ops.Gl.Shader.WireframeMaterial - fix bug when other Materials stop working after using WireframeMaterial
- Lots of smaller tweaks and fixes
- UI: user can change size of texture previewer
- UI: tweaked high contrast mode for cabling outside in sunlight
- new op: Ops.Array.ArrayPack4x - Pack 4 arrays into one array
- new op: Ops.ArrayRandomSelection - Extract a definable amount of values from an array
- new op: Ops.Array.ArrayMath - mathematical modes can be applied to a single array
- new op: Ops.Devices.Midi.MidiInputDevice_v2 - receives midi data from hardware or daw
- new op: Ops.Devices.Midi.MidiCC - receives midi CC data
- new op: Ops.Devices.Midi.MidiNote - receives midi note data
- new op: Ops.Devices.Midi.MidiClock - receieves midi clock signal
- new op: Ops.Devices.Midi.MidiChord3 - maps 3 midi notes to values
- new op: Ops.Devices.Midi.MidiMonitor - detailed information about midi events coming into cables
- new op: Ops.Devices.Midi.MidiNRPN - Read NRPN values from a controller
- new op: Ops.Devices.Midi.MidiNoteFilter - Reads only a specific range of midi notes
- new op: Ops.Array.GateArray - Only allows an array through if pass through is true
- new op: Ops.Array.Array_v2 - combines the old array op and ContinuousNumberArray op into one
- new op: Ops.Array.ArrayToByteBuffer - convert an array to a bye buffer (Uint8ClampedArray)
- new op: Ops.Trigger.TriggerReceive - Send/receive wireles triggers, similar to variables
- new op: Ops.Trigger.TriggerSend - Send/receive wireles triggers, similar to variables
- new op: Ops.Array.Array3 - create an array of num triplets set to default values xyz
- new op: Ops.Json.ObjectSetNumber - set number at key in an object
- new op: Ops.Array.Array4toArray3 - convert an array4 to array3 by dropping every 4th number
- new op: Ops.Bodymovin.LottieSVGPlayer - play lottie/bodymovin animations as SVG in a HTML element
- many new op versions with new string port type
- UI: texture ports: shortcut for creating a texture op
- UI: hide ui elements when maximize renderer
- feature: simpleWireframe now has normals/texturecoordinates
- feature: noise dithering and noise amount added to Ops.Gl.TextureEffects.SSAO2
- feature : Scale array now works with triplets on instanced meshes with Ops.Gl.MeshInstancer_v2
- cleanup: deprecation of ops that are not needed any longer
- cleanup: deprecation of tone.js ops
- fixed safari render to hdr/floaring point textures
- added tons of documentation/examples/etc.
- UI: Only latest op version will be shown from now on
- UI: Op version number hidden in op list/selector (e.g. Ops.Anim.Timer2 is now listed as Ops.Anim.Timer (v2))
- UI: Exporting option to export a patch as a single js file including json data, for faster loading of exported patches
- UI: op add dialog now also searches for multiple keywords, e.g. "interpolate array"
- UI: -/+ keys zoom in/out patch
- UI: touchpadmode tweaks / now in user settings menu
- UI: use cursor keys to change selection of ops (experimental)
- new op: Ops.Gl.Shader.IBLMaterial3 - v3 - Overall improvements and extra options
- new op: Ops.Gl.ShaderEffects.PerlinAreaDeform3 - v3 - Calculate normals and more/better modes
- new op: Ops.Exp.Gl.Physics.CastRay - Cast a ray and test intersection with physics bodies
- new op: Ops.Points.PointsField3d - Create a 3d point field with a definable amount of xyz points
- new op: Ops.Gl.Shader.CustomShader2 - Now parses uniforms from source code, uniforms don't disappear when not in use
- new op: Ops.Gl.Geometry.AlignGeometry - Align a geometry / change pivot/center point of geometry
- new op: Ops.Gl.SurfaceScatterInstanced3 - v3 - Scatter object on the surface of a mesh - more distribution modes / etc.
- new op: Ops.Gl.Matrix.ScreenPosTo3d2 - v2 - Convert screen coordinates to 3d coordinates
- new op: Ops.Gl.TextureFromColorArray - Create a texture from an array of numbers
- new op: Ops.Gl.Vr.MainloopWebVr - Rewritten WebVR Mainloop works with or without vr / added vr start button / etc.
- new op: Ops.Gl.TextureEffects.Wobble - Waving wobble motion effect
- new op: Ops.Json.GetStringFromObject - Get string from object
- new op: Ops.Value.SwitchFile - switch between files
- new op: Ops.String.StringNew2Old - temporary string port converter
- new op: Ops.String.StringOld2New - temporary string port converter
- new op: Ops.String.SwitchStringBoolean - Switch between two strings with a boolean
- new op: Ops.String.GateString - Output string if pass through is true
- new op: Ops.Json.GateObject - Output object if pass through is true
- new op: Ops.String.SwitchString - Switch between multiple strings with an index
- new op: Ops.Website.InfoURL - Information about the current URL
- new op: Ops.Cables.AssetPathURL - outputs the path to the assets
- new op: Ops.Html.BackgroundImage - Set a background image of a HTML element
- new op: Ops.Html.ToggleClass - Add or remove css class from a HTML element
- new op: Ops.Html.ElementChilds - Set childs of a HTML Element
- new op: Ops.Math.Compare.GreaterOrEquals - Result is true if number 2 is greater or equals number 1
- new op: Ops.Gl.Shader.ShaderDefine - Set shader defines
- new op: Ops.String.StringEditor - Editor op for large strings with syntax highlighting
- new op: Ops.Trigger.SetNumberOnTrigger - Putput number when triggered
- new op: Ops.Trigger.TriggerOnChangeArray - Triggers when array has changed
- new op: Ops.Trigger.TriggerOnChangeString - Triggers when string has changed
- new op: Ops.Array.ArrayCeil - Round numbers up
- new op: Ops.Array.ArrayFloor - Round numbers down
- new op: Ops.Array.ArrayFract - Each number in an array becomes the fractional remainder
- tweak: Ops.Gl.Shader.CustomShader: now works with uniform float arrays as input
- tweak: Ops.Gl.TextureEffects.DrawImageNew - added new aspect correct mode, also image scrolling
- tweak: Ops.Gl.MorphGeometries - now also morphs normals and tangents
- tweak: Ops.Gl.MainLoop: show transparent background checkerboard when clear checkbox is unchecked
- tweak: Ops.Array.ParseArray - By default array content is parsed as numbers
- tweak: Ops.Gl.ShaderEffects.AreaDiscardPixel - added repeat and diagonal modes
- tweak: Ops.Gl.Meshes.Cylinder2 - toggle mesh top/bottom caps
- tweak: Ops.Gl.TextureEffects.ScaleTexture - more parameters for positioning and origin of scaling
- tweak: Ops.Exp.Gl.ShaderEffects.LimitMeshByTexCoord - added more axis options
- fix: Ops.Gl.MeshMorph - Geometry parameter being below 0 or above 7 no longer throws an error
- fix: Ops.Array.PointArray.Field - now updates the array correctly when columns and rows parameter is changed.
- fix: Ops.Gl.Meshes.Cylinder2 - now renders correctly with IBLMaterial
- fix: Ops.Array.Array3xRandomSelection - doesn't output the same co-ordinates twice
- fix: Ops.Array.RandomArray - can now have a length of 0
- fix: Ops.Array.Array3xGetValues - now accepts floats as input for the index and makes it an integer
- fix: Ops.WebAudio.MicrophoneIn - working again
- UI: fix bug where new string type output preview was not updating
- UI: fix comment collision positioning with other ops
- UI: fixed bugs with HDPI displays
- web: fix link to my likes in "my" menu
- converted json3d files are smaller now, saving float arrays base64 encoded
- Embedding: pre initializing variable values (docs.cables.gl)


- New op: Ops.Array.ArrayRotate - Rotates the contents of an array
- New op: Ops.Array.ArraySmoothStep - Applies a smoothstep function to the contents of an array
- New op: Ops.Array.ArrayPow - Applies a pow function to the contents of an array
- New op: Ops.Array.ArrayAbs - turns all array contents into positive numbers
- New op: Ops.Array.FillArrayRandomDuplicates - fill up array to reach given size
- New op: Ops.Array.PointArray.FillPointArrayDuplicates - fill up points array to reach given size
- New op: Ops.Points.PointsSphereRandom - Creates random points mapped to a sphere
- Fix: Ops.Gl.Shader.PointMaterial - now has correct sizes
- Fix: customshader better uniform management
- Fix: image compose bugs when using triggeronce
- Fix: ios artifacts when patch is running in iframe
- Feature: Ops.Gl.Textures.VideoTexture - output transparent texture while loading
- Feature: BoolAnim animate only one direction
- UI: add comments attached to any op in your patch
- UI: texture preview button for incoming texture ports
- UI: quick way of adding variables
- UI: fix wrong unlinking of ops when inserting non fitting op into link center
- UI: undo of deleting op restores old values
- Web: patch page menu show qr code for faster mobile access
- Web: fullscreen button resizes canvas, no fullscreen mode available on ios
- Web: better navigation menus
- new op: Ops.Gl.Meshes.SimpleWireframe - very simple wireframe renderer
- new op: Ops.Gl.TextureEffects.Emboss - emboss image effect
- new op: Ops.Gl.Textures.NoiseTexture - simple noise texture generator
- new op: Ops.Gl.AspectRatio - set aspect ration (replaces viewport/letterbox ops)
- feature: Ops.Gl.Texture2ColorArray now has floating point output from 0. to 1. works with HDR textures
- feature: Ops.Gl.TextureEffects.ChromaticAberration - added blendmodes
- feature: Ops.Gl.TextureEffects.Kaleidoscope - added blendmodes
- feature: Ops.Gl.TextureEffects.Vignette2 - added blendmodes
- feature: Ops.Gl.TextureEffects.Posterize - added blendmodes
- feature: Ops.Gl.TextureEffects.Rectangle2 - added blendmodes
- feature: Ops.Gl.TextureEffects.Twirl3 - added blendmodes
- web: ops can be assigned to collections - cables.gl
- web: op page can now list related ops
- web: op page list of latest changes to this op
- web: op page can now list op issues, e.g. not working on mobile
- web: fix order of op reference list
- UI: undo/redo now also works for parameter inputs
- UI: undo/redo tweaks/fixes
- new op: Ops.Gl.TextureEffects.WaveformGradient - Generate different texture waveforms. Sine, sawtooth and triangle.
- new op: Ops.Gl.TextureEffects.ScaleTexture - scale texture in an image compose
- new op: Ops.Gl.TextureEffects.GammaCorrection - Allows for Gamma correction of a texture
- new op: Ops.Gl.TextureEffects.Noise.PixelNoise2 - pixelated noise
- new op: Ops.Array.ArrayPack3 - pack 3 arrays into one
- new op: Ops.Array.ArrayUnpack3 - Splits a xyz array into 3 individual arrays
- new op: Ops.Array.ArrayUnpack4 - Splits a xyzw array into 4 individual arrays
- new op: Ops.Array.PointArray.Field - generate coordinates for a rectangular field of points
- new op: Ops.Array.Spline.RedistributeSplinePoints - recalculate a spline / change number of points
- new op: Ops.Math.PowerOfTwoSize - Return the value as next power of two
- new op: Ops.Math.FlipSign - positive numbers become negative and vice versa
- new op: lots of new ops with new string ports
- feature: Ops.Gl.TesselateGeometry - also tesselates tangents/bitangents
- feature: Ops.Gl.MeshInstancer - input for rotations / limiting etc
- fix: Ops.Gl.Meshes.TextMesh3 - center align correct
- fix: Ops.Gl.Textures.WebcamTexture - handle all new super awesome funny security restrictions of browsers
- fix: Ops.Gl.Shader.CustomShader - hides default internal uniforms/matrices
- UI: snappier UI - performance optimizations in big patches / less patch redraws
- UI: ( X ) mark not working ops when minimum link requirements are not met
- UI: Firefox UI Fixes/Tweaks, now should work 100%
- UI: texture preview now visualizes transparency
- UI: new texture previewer as overlay
- UI: new upload dialog
- UI: new UI tips & tricks dialog
- UI: many performance optimizations
- UI: mousewheel zooming viewbox rewrite / general patch tweaks and optimizations
- UI: of small tweaks and fixes
- WEB: shorter patch URL/id
- new op: Ops.Math.Sign - get sign of value (-1 if negative or 1 if positive)
- new op: Ops.Gl.TextureEffects.RotateTexture - rotate image in imagecompose
- new op: Ops.Html.SetCssVariableColor - set CSS variable color value
- new op: Ops.Html.SetCssVariableString - set CSS variable value
- new op: Ops.Html.GetCssVariable - read value of CSS variables
- new op: Ops.Array.SortArray3xByDistance - sort an array by distance to previous point
- ui: new patch settings user interface
- web: tweaked sections on home page, fixed "top of the month" and added "all time top patches"
- better validity check for opname when creating an ops
- high contrast theme better
- deprecated ops and renamed newer version
- lots of tweaks/changes/cleanups
- new op: Ops.Gl.TextureEffects.Waveform - New op to create different waveform textures
- new op: Ops.Patch.PlayButton - wait until user pressed the play button
- new op: Ops.Gl.Orthogonal2 - easier isometric/orthogonal projection rendering
- new op: Ops.Gl.DownloadTexture - download a texture as image file
- new op: Ops.Gl.TextureEffects.RotateTexture - rotate current state of image compose
- tweak op: Ops.Gl.TextureEffects.Repeat - blend modes added
- tweak op: Ops.Gl.TextureEffects.Stripes2 - Color values now work with gradient enabled
- tweak op: Ops.Gl.TextureEffects.Desaturate - added mask parameter
- tweak op: Ops.Gl.TextureEffects.Color - new mask parameter
- web: cables.gl homepage - display of latest videos/news/forum entries and user activity
- web: updated made-with-cables cables.gl
- editor: clone op now also copies op attachments
- core: new String port type - soon there will be an extra port type for strings
- fix simplespline performance issue
- fix webgl 1.0 compatibility issues
- copy cat cables video: elite dangerous loading screen youtube.com
- Render2Texture op tutorial youtube.com
- Random Numbers op tutorial youtube.com
- Average Interpolation op tutorial youtube.com
- Basic material op tutorial youtube.com
- Transform and Scale op tutorial youtube.com
- How to add custom controls tutorial youtube.com
- Switch trigger op tutorial youtube.com
- new op: Ops.Gl.TextureEffects.GlitchNoise - creates glitched black and white textures
- new op: Ops.Gl.TextureEffects.PseudoLensFlares - simulate lensflare effect
- new op: Ops.Gl.TextureEffects.PixelDisplacement3 - mirror wrap mode and input modes selectable / added blendmodes
- new op: Ops.Gl.Meshes.Cylinder2 - rewrite - inner radius parameter to make holes in cylinders
- new op: Ops.Gl.Meshes.Sphere2 - rewrite - fixed some problems with duplicate faces
- Ops.Gl.TextureEffects.Stripes2 - free rotation + added blendmodes
- Ops.Gl.TextureEffects.Noise.Noise Ops.Gl.TextureEffects.Noise.PixelNoise - added new RGB color noise switch
- added blending and blendmodes to existing ops: TriangleNoise CheckerBoard EdgeDetection2 SimplexNoise CellularNoise Border Pixelate Vignette2 Depthtexture
- mesh ops: fixing most primitives with correct tangents/bitangents
- UI: snap to grid - snap ops to grid - usersettings and shortcuts docs.cables.gl
- UI: click in background to find ops by colors if you have colored ops
- UI: comments can now be colored
- UI: copy+pasted ops are selected and can be moved together
- UI: click parameter name to create and link op docs.cables.gl
- UI: texture previewer tweaks
- VIDEO: youtube.com - Depth Texture Focus tricks tutorial
- VIDEO: our new channel "Byte Size Tutorials" youtube.com
- new op: Ops.Gl.Matrix.Billboard - Rotate an object to always face the camera
- new op: Ops.Exp.Lsystem - An LSystem is a parallel string rewriting system see: youtu.be
- new op: Ops.Trigger.Past - Triggers only once when threshold is crossed
- new op: Ops.Json.ObjectSwitcher.js - Allows switching between objects
- new op: Ops.Gl.Meshes.Cross - Draws a cross mesh with controllable thickness and length.
- new op: Ops.Array.ArraySin - Performs a sin or cos operation on the contents of an array
- new op: Ops.Array.ArraySum - Adds one number to all values in an array
- new op: Ops.Array.ArraySubtract - Subtracts one number from all values in an array
- new op: Ops.Array.ArrayDivide - Divides all values in an array by one number
- new op: Ops.Array.ArrayModulo - Applies a modulo operation to all values in an array
- new op: Ops.Array.ArrayMin - Applies a min operation to all values in an array
- new op: Ops.Array.ArrayMax - Applies a max operation to all values in an array
- new op: Ops.String.RightPadNumber - number to a string, adds zeroes to reach num decimal places
- new op: Ops.Audio.MidiJsonNote - Filter midiJson for notes
- rectangle can now have more than 64k vertices
- web: "my patches"-page can now be filtered
- web: menu nav now optimized for mobile devices
- new command: "find unconnected ops"
- new command: "find user ops"
- fix: render2texture: check for max number of MSAA samples
- UI: you can set color marker for ops manually docs.cables.gl
- UI: find better score for ops in current subpatch / show color marker in results
- UI: fix bug (wrong axis) when pressing A to align ops
- UI: show multiple lines when dragging multiple links at the same time
- UI: reset op parameters to default values via op contextmenu
- UI: added user ops namespace color for better visibility
- UI: clone op dialog if you don't own the patch
- UI: many little fixes and tweaks
- javascript: op coding: better error handling
- javascript: reduced global scope vars
- updated made with cables cables.gl
- better browser info / responsive layout cables.gl
- new tutorial: how to use LSystem youtu.be
- new tutorial: custom shader youtube.com
- documentation: added "Creating attachments" section
- see new features in our blog: blog.cables.gl
- new op: Ops.Gl.Shader.IBLMaterial2
- new op: Ops.Gl.TextureEffects.DepthTextureFocus
- new op: Ops.Gl.DirectionalTranslate
- new op: Ops.Array.ArraySmooth
- new op: Ops.Gl.Render2Textures
- new op: Ops.Gl.ShaderEffects.Render2TexturesSlots
- new op: Ops.Html.CSSFilter
- new op: Ops.Html.TransformElement
- new op: Ops.Html.CSSProperty
- new op: Ops.Html.CSS3DElement
- new op: Ops.Value.PreviousValueStore
- new op: Ops.Array.ArrayMath
- new op: Ops.Website.LocalStorage
- new op: Ops.Gl.Matrix.InterpolateMatrix
- new op: Ops.Array.ArraySwitch
- new op: Ops.Json.ObjectIsNull
- new op: Ops.Value.FileInput
- new op: Ops.Exp.Gl.Shader.SetMaterialParameters
- feature: editor is now minimizable (via button or escape)
- feature: better serverside file editor support
- feature: ops using cubemaps now supports single texture equirectangular maps
- feature: new file operation: resize image to next power of two width/height
- feature: new file operation: resize image to 50% of original size
- feature: new file operation: convert png to jpg
- tweak: json3dscene - overwrite material
- tweak: new multi texture preview
- tweak: better preview image quality
- tweak: executing crashed op code will show dialog to reload patch
- tweak: file browser: show file suffix in icon view
- tweak: better visual "saving" indicator
- fix: multi level subpatch backbutton now switches to parent subpatch
- fix: editor stays open after reload for all type of files
- fix: "stuck cursor image" issue
- fix: executing op code will reload multiple instances properly
- doc: more in-depth op coding documentation at docs.cables.gl
- new op: Ops.Gl.GlPrimitive - Force rendering of meshes using points,lines or triangles
- new op: Ops.Gl.Texture2ColorArray - Extract colors from a texture [thanks @lj]
- new op: Ops.Gl.Canvas2Texture - Convert a canvas to texture [thanks @lj]
- new op: Ops.Math.Degrees , Ops.Math.Radians - convert radians to degrees and vice versa [thanks @action]
- worley/cellular/fbm/layer-noise added switch to be tileable
- patch embedding: new option
glCanvasResizeToParent:true
- fix: customshader bug: not able to save project after editing uniforms
- fix: webgl 1.0 framebuffer forgetting selected filtering
- loaded projects now contain all ops of all users of this patch
- texteditor fix undo history/seperate editor instances for every tab
- new commands
pause
/resume execution
- fix cursor scrolling in op search dialog
- show "edit code" button when selecting user owned op
- edit string parameter button bigger
- possibility to copy patch (and error message) when saving a patch, without having write access
- many little tweaks and fixes
- new op * Ops.Gl.Matrix.Camera* - easier camera op by @action
- editor: use browser default antialias setting
- web: layout op reference page
- web: users will stay logged in, even when restarting the browser
- embedding patches: quicker way to set variable values:
patch.setVariable(name,value)
- ui: linking an input port to Ops.Value.Value will adopt the previous value and set a title
- ui: dragging the patch (right click or pressing space) will not loose selection anymore
- ui: fix "view op code"
- doc: added 9 tipps to UI walktghrough docs.cables.gl
- new op: * Ops.Gl.TextureEffects.Noise.WorleyNoise*
- new op: * Ops.Gl.Shader.CustomShader*
- new op: * Ops.Gl.Shader.Shader2Texture*
- web: you can now set your password in settings
- UI: project settings: owner is able to change the patch owner
- UI: new value dragging user interface / dragging values now works on whole field / from left to right
- UI: op parameter: spacing between value groups
- UI: text-editor: switch between files via dropdown menu
- fixed: webgl warning VertexAttribDivisor
- fixed op textmesh border (premultiplied blendmode)
- new op: * Ops.WebAudio.WebAudioContextRunner* - Helper op for unmuting on iOS & Chrome
- new op: * Ops.Sidebar.ColorPicker* - Lets you enter / pick a color in the sidebar
- new op: * Ops.Sidebar.DropDown* - Drop-down for the sidebar
- new op: * Ops.Sidebar.TextInput* - Enter text in the sidebar
- fix: chrome 66 automatically muting audio playback (sigh)
- web: improved search functionality cables.gl
- web: added possibility to search for ops
- ui: changed default file list view to list
- ui: changing file list view will be set after reload
- ui: file view and timeline opened state will be set after reload
- ui: new command:
create new file
- ui: it is now possible to edit files on the server (
.json
,.csv
,.frag
,.vert
)
- new op: * Ops.Gl.Textures.Histogram* - Graphical representation of distribution of color in a texture
- new op: * Ops.Math.Phyllotaxis2* - Coordinate generation like arrangement of leaves in some plants
- new op: * Ops.Anim.LFO* - Low-frequency oscillation for animations
- example: * Ops.Array.ArrayInterpolate* - interpolate between two arrays
- example: * Ops.Exp.Gl.VectorFieldArray*
- mini howto: convert files, e.g. SVG to Mesh: youtube.com
- web: better changelog / tweaked acces rights examples
- ui: much better sidebar ui style / can be minimized
- new op: * Ops.Gl.ShaderEffects.SplineRepeatInstanced* - repeat a mesh along a spline using instancing
- new op: * Ops.ShaderEffects.TransformInstanced* - transform instanced meshes
- new op: * Ops.Gl.MorphGeometries* - morph between two geometries
- new op: * Ops.Gl.TextureEffects.Noise.PixelNoise* - pixelated noise
- new op: * Ops.Gl.TextureEffects.Noise.PolkaDotNoise* - noise circles
- new op: * Ops.Trigger.SceneMixer* – enable / disable multiple triggers with a boolean
- new op: * Ops.Value.ValueHub* – Sequence for values
- new op: * Ops.Anim.AverageInterpolation* - replaces old approachInterpolation
- op * Ops.Json3d.Json3dMesh* - new option to merge and draw all meshes at once
- op * Ops.Gl.MainLoop* - fix HDPI support
- new tutorial: How to use send data from an Arduino to cables: <docs.cables.gl>
- ui: timeline
b
/n
hotkeys to mark loop area begin and end - ui: new command: scale renderer canvas
- web: you can update your email in settings->account
- core: performance optimizations when drawing many objects
- serverside: svg converter can now hndle multiple pathes
- serverside: exports contain doc.txt with list of used variables
- serverside: cables moved to a new server
- secret url: share URL to patch viewer without publishing / needing a login
- cli-update: Version 0.2.0 of the cables command line tool (npmjs.com) has been released with some new features
- ui: search in patch : score system / ranking of renamed ops better
- ui: show warning when patch was saved on server and your current version is out of date
- file info: .3d.json files - see what uses how much space in 3d files
- file converter: .3d.json files - remove unwanted content for size optimization (texcoord/tangents, etc...)
- new op: * Ops.Gl.ShaderEffects.GrassWobble* - simulate grass motion in wind vertex shader
- new experimental op: * Ops.Anim.Snap* - Snap at certain points (e.g. while scrolling)
- new experimental op: * Ops.Exp.RenderAnim* - export an animation as webm video or png image sequence
- new op: * Ops.Gl.Geometry.ScaleGeometry* - uniform scaling of geometry vertices
- new op: * Ops.Boolean.TriggerBoolean* - trigger true or false values
- new op: * Ops.Gl.TextureEffects.Twirl2* - better twirl texture effect
- new op: * Ops.Gl.Geometry.SortGeometry* - sort geometry triangles by position
- new op: * Ops.Trigger.IfEqualsThen* - trigger if values re equal
- new op: * Ops.Gl.GlInfo* - information about webgl/canvas
- new op: * Ops.Math.Speed* - Measure speed of how much a value changes
- new op: * Ops.Vars.SetVariableByTrigger* - set variable only after being triggered
- new op: * Ops.Json.ObjectRelay* - Let’s a object through only if control bool is true
- new op: * Ops.Boolean.Not* - better op name / result is false if input is true and vice versa
- tweak new op version - * Ops.Math.Max2* - Returns the biggest number
- tweak new op version: * Ops.Gl.Shader.BasicMaterialNew* - alpha mask channel method selection
- tweak new op version: * Ops.Gl.ShaderEffects.PerlinAreaDeform2* - normals calculation (experimental) / different methods
- Tweak: Ops.Exp.Gl.MatCapMaterialNew - simple default matcap texture
- Op search: faster / score: additional score for shorter namespaces / better sorting
- UI: safari fixes for search/op search and correct mousebuttons
- UI: new basic gradient editor
- UI: timeline mousewheel valuescale / several fixes/tweaks
- Update Tone.js library to r11
- new op: * Ops.Gl.TextureEffects.LUTMap* - Apply color filter/effects by using a lookup texture
- new op: * Ops.Gl.GradientTexture* - gradient texture and new gradient ui editor
- new op: * Ops.Gl.ShaderEffects.AreaDiscardPixel* - Do not draw pixels inside a 3d area
- new op: * Ops.Array.Array3xSplinePositionAtDistance* - Get position in array3x/spline at distance from start
- new op: * Ops.Value.ValueRelay* – Let’s a value through only if control bool is true
- new op: * Ops.Array.ArrayBreakOut* – Breaks out the values of an array
- new op: * Ops.Array.ExclusiveBoolStateArray* – Array filled with “0”, only one can be “1"
- new op: * Ops.Value.MinimumSafeInteger* – Returns the minimum safe integer
- new op: * Ops.Value.MaximumSafeInteger* – Returns the maximum safe integer
- new op: * Ops.Patch.LoadingStatusTask* - Creates custom loading tasks
- new op: * Ops.Value.TriggerOnChange* - triggers next everytime the input value changed
- new op: * Ops.Cables.PatchConfig* - Read patch config when embedding on another page
- new op: * Ops.Json.ObjectTrigger* - set output object when triggered
- new op: * Ops.Json.ObjectOr* - result is first connected valid object
- new op: * Ops.Gl.ShaderEffects.InstancedPerlinPosition* - displace position of instanced object by perlin noise value
- new op: * Ops.Html.ElementFadeInOut* - fade html elements in and out
- new op: * Ops.Array.ArrayMergeSimple* - merge two arrays
- new op: * Ops.Math.Random2* - generate random number between min and max
- new op: * Ops.Anim.FrameRangeAnim* - Parses string containing ranges of frames and play as coherent animation
- new op: * Ops.Gl.InteractiveRectangle* - simple interaction op without picker/pickingmaterial
- new op: * Ops.Json3d.SceneInfo* - Information about the current 3d scene
- new op: * Ops.Net.CorsProxy* - cables experimental cors proxy
- new op: * Ops.Html.DivElement* - html div element
- new op: * Ops.Array.ArrayInterpolateOffset* - Interpolate between two arrays, only a few numbers at the same time
- new op: * Ops.Debug.GlDebug* - See current gl states and error message
- new op: * Ops.Gl.Depth2* - set Depth testing parameters
- new op: * Ops.Sidebar.Button* - display a button in the sidebar
- new op: * Ops.Sidebar.DisplayValue* - display a value in the sidebar
- new op: * Ops.TimeLine.TimelineValue* - Get timeline value at [time]
- new op: * Ops.Math.Ease* - Map a value to an easing curve
- new op: * Ops.Math.Pi* - pi number
- new op: * Ops.Math.DeltaSum* - Add delta values to an clamped absolute value
- new op: * Ops.Trigger.RandomTrigger* - Randomly trigger output ports
- new op: * Ops.Array.RingBuffer* - Array of fixed size, index is automatically incremented and restarts after reaching the end
- new op: * Ops.Gl.Textures.CopyTexture* - Copy a texture and optionally resize it
- new op: * Ops.Array.Array3xGetValuesInterpolated* - Get interpolated values between the indices of an array3x
- new op: * Ops.Value.ValueSwitchBoolean* - Switch between two values by a boolean
- new op: * Ops.Json.ParseObject* - parse string into object
- new op: * Ops.Array.Array3xSplineLength* - Sum of distances between points/items in an array3x
- new op: * Ops.Array.Array1xTo3x* - Convert array to array3x
- new op: * Ops.Array.Array3xGetValues* - Get 3 values from an array3x
- new op: * Ops.Array.Array3xMultiply* - Multiply every XYZ member of array3x
- new op: * Ops.Array.ArrayMerge* - Merge/concat two arrays
- new op: * Ops.String.HashIdDecode* - read back integers from a hashid
- new op: * Ops.String.HashIdEncode* - generate short unique ids from integers
- new op: * Ops.String.Base64Decode* - decode base64 string
- new op: * Ops.String.Base64Encode* - encode base64 string
- change default depth test method to LESS OR EQUAL for easier 2d stuff
- experimental open renderer in new window button
- Editor user settings: hide minimap option
- Editor user settings: straight lines option
- File selector button much better and more readable
- new op: * Ops.Array.ArraySum*
- new op: * Ops.Gl.Meshes.Star*
- new op: * Ops.Exp.Gl.ShaderEffects.Fur*
- new op: * Ops.Math.MercatorCoord*
- new op: * Ops.Gl.DrawTextureMapping*
- new op: * Ops.Exp.Gl.ShaderEffects.LimitMeshByTexCoord*
- new op: * Ops.Exp.Gl.Matrix.RandomInstancer*
- new op: * Ops.Gl.MeshInstancer*
- new op: * Ops.Exp.MatrixToCssTransform*
- new op: * Ops.Html.IFrame*
- new op: * Ops.Gl.ShaderEffects.Twist2*
- new op: * Ops.Gl.TextureEffects.RoundCorners*
- new op: * Ops.Gl.TextureEffects.Twirl*
- new op: * Ops.Json.CsvColumnArray*
- new op: * Ops.Json.CsvJsonFile*
- new op: * Ops.Math.NumberDivisible*
- json3dscene2: more options / better generated op order/structure
- animation renderer can now render to .WEBM video files
- UI: show error message when uploading unknown filetypes
- UI: show upload progress bar
- UI: show current file filter in file library header
- new op: * Ops.Gl.Mesh.Polyhedron* - generate polyhedron meshes. example: <cables.gl>
- new op: * Ops.Gl.Geometry.DivideGeometry* - disconnect faces/polygons of a mesh
- new op: * Ops.Gl.ShaderEffects.ExplodeDividedMesh* - explode a (divided) mesh in the direction of faces normals. example: <cables.gl>
- new op: * Ops.Gl.ShaderEffects.ScaleByNormal* - scale an object in the direction of face normals. example: <cables.gl>
- new op: * Ops.Boolean.MonoFlop* - trigger switches bool to true, turns back to false automatically
- new op: * Ops.String.StringIterator* - Iterate over every character of a string
- new op: * Ops.Math.PointInRectangle2d* - test if a point is in or outside of a rectangle
- new op: * Ops.Math.AddUp* - add up numbers
- new op: * Ops.Math.CircleCoordinates* - calculates x,y coordinate of a circle
- new op: * Ops.Math.OneMinus* - subtract a number from one
- new op: * Ops.String.RandomString* - generate a random string of given characters
- new op: * Ops.Timeline.GotoFrame* - jump to a key in the timeline
- new op: * Ops.Debug.Console* - show console log output on the screen
- new op: * Ops.Array.ArraySetObject* - put an object at index in an array
- new op: * Ops.Array.Array3xAverage* - average x,y,z values of an array3d
- new op: * Ops.Array.Array3xAnalyze* - min,max and average values of an array3x
- new op: * Ops.Array.Array3xReverse* – Reverses an array with value triplets, e.g.
[1, 2, 3, 4, 5, 6] —> [4, 5, 6, 1, 2, 3]
- new op: * Ops.Boolean.IfFalseThen* - trigger childs if value is false
- new op: * Ops.Gl.OnResize* - trigger when canvas was resized
- new op: * Ops.Gl.Geometry.GeometryInfo* - information about a geometry
- new op: * Ops.Gl.Geometry.TransformGeometry* - transform vertices of geometry
- new op: * Ops.Gl.Geometry.CenterGeometry* - center an object to the average x,y,z position of its vertices
- new op: * Ops.Gl.Geometry.GeometryPoints* - get vertices of a geometry as array3x
- new op: * Ops.Gl.Geometry.GeometryBounds* - boundings of a geometry / draw a bounding box
- op-rename: * Ops.Math.Sinus* —> * Ops.Math.Sine*
- fix: * Ops.Array.ArrayReverse* – Does not reverse the input array, creates a copy
- fix: * Ops.Gl.Matrix.ScreenCoordinates* - better accuracy
- new op: * Ops.Gl.Screenshot* - download the current screen as .png file by triggering
- new op: * Ops.Gl.QrCode* – generates a QR-Code, example: <cables.gl>
- new op: * Ops.Devices.Mobile.LockOrientation* - force screen orientation
- fix: ArrayBuffer3x - added reset button - does not start at 0,0,0, but on first value given
- new command: reset renderer size
- fix: animation renderer: speed + less problems when resizing canvas
- fix: removed ipad “rubberbanding” when viewing patch in new window
- fix: mousepicker compatibility with hires screens
- fix: command: set renderer size can now set size bigger than browser window.
- op: TextureEffects.ChromaticAberration - new parameters: smooth and masking
- ui: Op Select - browse ops by namespace
- fix: patch export now includes all (external) libraries
- new op: Waveform – renders the waveform of an audio file, example: <cables.gl>
- new op: * Ops.Gl.TextureEffects.Noise.RectangularNoise*
- new op: * Ops.Net.AjaxRequestString*
- ui: [ALT]+[right mouse]+drag on existing link will copy link to another port
- new command (CMD+P): toggle window fullscreen show editor in fullscreen
- new command (CMD+P): toggle editor show/hide toggle editor
- search now shows subpatch path of op
- op fix: * Ops.Gl.TextureEffects.DepthTexture* - working as expected again
- op tweak: * Ops.Gl.TextureEffects.Circle* - position and correct aspect ratio
- ui fix: playing timeline does not stop when pressing any key / toggle play with space key
- sandboxing security improvements
- new op: * Ops.Gl.TextureEffects.ColorMap* - map colors to luminance
- new op: * Ops.Gl.ShaderEffects.Bend* - bend objects along an axis (thanks kusma)
- op fix: * Ops.Json.ObjectGetObject* – Key input works again
- op fix: * Ops.Json.ObjectGetValue* – Key input works again
- ui: faster startup/loading time of big patches
- timeline: overview double click toggle area to whole project length
- timeline: cursor position percentage display
- patch page: tweaked info display / mobile optimized
- tweaked/fixed animation renderer/exporter
- new video tutorial: [embed a cables patch into your website](youtube.com)
- performance tweaks: freeShape / Pointcollector
- new op: * Ops.Gl.TextureArrayLoaderFromArray*
- new op: * Ops.Array.ArrayReverse*
- Ops.Gl.Performance* - toggle visibility
- profiler: Peak CPU Usage analysis
- timeline: “Show all Values” fixed scaling problems and other small tweaks
- timeline: metatab shows all keyframed op ports
- timeline: resize visible area
- responsive and nicer browser check <cables.gl>
- Ops.Gl.Mainloop* - support for retina/high DPI screens
- tweaked ios safari patch iframe/canvas
- new op * Ops.SetVariableString*: Set a string variable from
- new op: * Ops.Gl.ShaderEffects.DeformArea* deform spherical area
- new op: * Ops.Gl.ShaderEffects.PerlinAreaDeform* perlin noise vertex wobble
- new op: * Ops.Gl.Meshes.TriangleArray* build a mesh out of an array of points
- new op: * Ops.Gl.Meshes.Cube2* cube with correct size
- new op: * Ops.WebAudio.TextToSpeech.Say* - text-to-speech, say things, Example: cables.gl
- new op: * Ops.Exp.Gl.ShadowSource*, * Ops.Exp.Gl.ShaderEffects.Shadow* very early, experimental shadowmapping
- UI: transform gizmo for transform ops media.giphy.com
- misc: Many fixes and ui tweaks
- new op: * Ops.Gl.TextureEffects.SSAO2* - new screen space ambient occlustion
- new op: * Ops.Gl.TesselateGeometry* - create more triangles in a geometry/mesh
- new op: * Ops.String.SubString* - subset of a string between one index and another
- new op: * Ops.String.StringLength* - number of characters in a string
- new op: * Ops.String.StringTrim* - remove whitespace from start and end of string
- new op: * Ops.String.Lowercase*
- Ops.Gl.TextureEffects.Color* - finally has blendmodes
- Ops.Gl.TextureEffects.Vignette* - better controls + color
- matcapMaterialNew experimental screenSpace normal calculation in shader
- UI: dragging values of parameters is much slower now / shift accelerates
- UI: dragging integer port values now only results in integers
- UI: fixed loading of old patch version
- core: grey defaultshader now works with shaderEffects/shaderModules
- core: better switching between glsl version 1 and 3 / compatibility defined
- tweaked names for many ops
- web: changed font for better readability and get rid of typekit once and for all
- web: examples page revamped
- new op: * Ops.Date.DateDifference* - get difference from two timestamps (countdown)
- new op: * Ops.Date.DateTimestamp* - get Timestamp from a date
- new op: * Ops.String.LeftPad* - create a fixed length string from a number 1 -> 0001
- new op: * Ops.Anim.InOutInAnim* - animates after a trigger from 1 to 0 to 1
- new op: * Ops.String.StringBreak* - insert linebreaks into a string after [num] chars
- fix: phongmaterial works now with shadereffects like pixelMeshNoise, fog, areaColor
- new op: * Ops.Gl.ShaderEffects.Fog* - draw fog while rendering meshes, before postprocessing - example: <cables.gl>
- new op: * Ops.Gl.ShaderEffects.ColorArea* - colorize pixels of meshes in an specific area - example: <cables.gl>
- tweaks * Ops.Gl.Matrix.OrbitControls* - many tweaks and outputs degrees
- CGL: auto shader module grouping for module prefixes
- new op: * Ops.Gl.Phyllotaxis* calculate phyllotaxis pattern coordinates
- ui: animation render as modal window / new command “animation renderer” +progressbar
- new op: * Ops.Math.GaussianRandomArray* - random numbers fitting a Gaussian, or normal, distribution
- new op: * Ops.Gl.ShaderEffects.MeshPixelNoise* simple 3d space color noise for meshes without needing textures or texture coordinates
- new op: * Ops.Array.ArrayContains*, * Ops.String.StringContains* - check if an array contains a string or number
- new op: * Ops.Boolean.TriggerChangedTrue* - trigger next only after value was changed to true
- new op: * Ops.String.Join* - join array values to a string
- ui: outdated ops warning: offer to create new version if exists / outdated op warning is now visible in patch
- ui: better comments
- ui: rewrite texture previewer - much better performance
- ui: sidebar customize drag’n’drop interface
- experimental data flow visualization of the patch : press
cmd+p
and then enterflow
media.giphy.com - new op: * Ops.Variable* / * Ops.SetVariable* for new patch variables system
- new op: * Ops.Gl.TextureEffects.CheckerBoard*
- new op: * Ops.Boolean.isZero*, * Ops.Boolean.isOne*
- new op: * Ops.Gl.TextureEffects.PolarCoords*
- new op: * Ops.Html.CSS* - style html elements
- new op: * Ops.Devices.TouchScreen* - touch events and coordinates from multiple fingers
- all mouse ops work with touch devices now and emulate a left mouse button
- New Op: * Ops.Html.WindowHasFocus* - detect if the browser window/tab has focus
- ui: SubPatch navigation breadcrumb
- UI: preview image: background toggle by click to see transparency
- ui: fix: copy and paste subpatches
- ui: fix export finished window overflow
- ui: fix bug where previewer made everyting really slow
- ui: escape: much faster and reactive op add/search
- ui: more commands
- Ops.Devices.Mouse.MouseDrag* - add option to not limit the value range
- CMD: new command show changelog
- UI: create project by choosing from predefined templates
- UI: rework: bookmarks
- UI: show changelog since last us
- ui button to report errors
- ops display red dot when has an error
- ui: code editor does not rescale patch
- ui: file library/editor do not overlap sidebar
- ui: usersettings dialog
- ui: more commandpalette commands
- ui: fix hover info area
- ui: added a (customisable) sidebar – to customise hit
cmd + shift + p
, enter a command and tick the pin icon (edited) - ui: CMD+ENTER - toggle maximize renderer
- ui: command palette shows all commands
- ui: new command open patch website
- new ops: cubemapCamera, cubeMapFromTextures, cubeMapMaterial
- fix * Ops.Gl.Meshes.Sphere* mesh glitches
- right click drag multiple links at once
- rework: search (CMD+F)
- rework: add op UI
- UI: add op search much faster
- UI: rendering op layout as images/svg
- UI: op highlight animation after creating/search+click
- UI: copy/paste visual feedback
- UI: rework icons/cursor when dragging links
- UI: op namespace colors everywhere
- UI: better Project settings Tag-UI
- UI: new feature: command palette (CMD+P)
- UI: theme: high contrast mode
- feature: randomanim: pause between animations
- new op: * Ops.Gl.GridTransform* - transform and arrange elements into a grid
- fix: basicMaterial - fix bug, texture was showing correct only after reload
- fix: svgTexture - fixed problem, project could not be saved
- fix: webCamTexture - performance tweak / enabled/disabled switch (edited)
- fix: * Ops.Gl.Texture* wasn’t setting filter correctly in some cases (edited)
- published video tutorials at: youtube.com