Skip to main content
Version: 5.x

Detailed Changelogs

This page summarizes changes in Lens Studio API, nodes, and features.


What's New in Lens Studio 5.17

✨ Highlights

Selfie Attachments: Animated Support

Selfie Attachments now supports creating animated attachments! Bring your selfie experiences to life with dynamic, moving elements that respond and animate in real-time.

Head Generator: Next-Gen Upgrade

The Head Generator has been updated to a new version, delivering:

  • Higher fidelity character heads with improved detail and realism
  • Better image prompt following for more accurate results from your inputs

Character Controller: Major Enhancements

The Character Controller component receives significant upgrades for game development:

FeatureDescription
Jump BufferingQueue jumps before landing for responsive controls
Coyote TimeBrief grace period to jump after leaving a platform
Multiple JumpsSupport for double jumps and beyond
Remote AssetsAnimations can now use cloud storage, reducing lens size
NPC ProxyNew proxy version for Non-Player Characters
Connected Lens SupportReplicating remote players with prediction algorithms for enhanced performance
New API MethodsgetMoveVelocity() for horizontal-only velocity, getActiveActions() to query active actions

Input Action Update: New response type "Move To Position" allows users to move characters to a point with tap input.

Source: character-controller

Game Lenses: Fullscreen Mode

Game Lenses now automatically enter Fullscreen mode when the user taps the screen. This exclusive feature allows you to:

  • Build immersive fullscreen experiences with full screen real estate for game UI
  • Block default touch behavior to prevent accidental swipe-outs during gameplay

Source: games-overview

Turn Based Component: Smart Capture & Recovery

New intelligent features for turn-based games:

  • Auto Capture - The lens fully controls when a snap is taken, automatically capturing when endTurn() is called
  • Turn Data Cache & Restore - Recover turn data when reopening a Turn Based Lens from an incomplete turn
  • Score Tracking - New setScore() and getScore() methods to include scores in turn data
  • Retry Disclaimer - New showRetryDisclaimer() method to prompt users to send incomplete snaps

Source: turn-based


🎨 Glam & Glitter Plugin: Expanded Features

The Glam & Glitter plugin receives a major update with exciting new capabilities:

New Features

  • Glitter Controls for Makeup - Add an extra dimension of sparkle to your makeup effects!
  • Custom Texture Support - Upload your own textures for:
    • Gem stamps
    • Makeup
    • Stickers
    • Sparkles
  • Sample Project - A new sample project is now available as a convenient starting point

UV Map References

We've added comprehensive UV texture references to help you create perfectly aligned custom makeup:

  • Face UV for Blush - Reference texture showing how blush textures wrap around the Face Mesh
  • Eye UV for Eyeshadow and Eyeliner - Precise mapping for eye-area cosmetics
  • Mouth UV for Lips - Accurate lip texture alignment guide

These UV maps serve as visual guides when creating your own custom makeup textures, helping you align details accurately with the Face Mesh.

Source: glam-and-glitter-plugin


🔧 Material Editor & VFX Editor: Enhanced Node Capabilities

Transform Vector Node (v1.2)

The Transform Vector node has been upgraded with two powerful new properties:

New PropertyDescription
Apply BlendingWhen enabled, vertex blending is applied during transformation
Apply SkinningWhen enabled, vertex skinning is applied during transformation

These additions give you finer control over how positions are transformed between coordinate spaces, especially useful for animated and skinned meshes.

Source: node_math_transform_v1_2

Skin Matrix Node (v1.1)

The Skin Matrix node has been updated with a new combined skin matrix option:

What's New:

  • Combined Skin Matrix - Get the full skinning transform without manual per-bone calculation
  • Per Bone Matrix property (bool) - Toggle between combined matrix mode and per-bone mode

Previously, the node only provided per-bone matrices requiring a bone index. Now you can get the combined matrix directly for simpler skinning workflows, while still having access to per-bone matrices when needed.

Source: node_effect_global_skin_matrix_v1_1

Surface Nodes: New Space Property

Three vertex input nodes now include a Space property dropdown, giving you control over which coordinate space your values are returned in:

NodeWhat It Returns
Surface Normal (v1.1)Normal direction vector of the surface
Surface Position (v1.2)Position of the surface
Surface Tangent (v1.2)Tangent direction vector of the surface

This is particularly valuable when you need surface data in a specific coordinate system (Object, World, Camera, etc.) for your shader logic.

Source: node_effect_global_surface_normal_v1_1, node_effect_global_surface_position_v1_2, node_effect_global_surface_tangent_v1_2

Position From Depth Node: Custom Camera Support

The Position From Depth node now supports custom camera properties, unlocking new possibilities for depth-based effects:

New Inputs:

  • Near Plane
  • Far Plane
  • FOV (Radians)
  • Aspect Ratio
  • View Inverse Matrix

New Property:

  • Use Custom Camera - When enabled, the node uses your custom camera properties to transform depth from screen space to world/view space

This is especially useful for multi-camera setups or when you need to reconstruct positions from depth textures captured by different cameras.

Source: node_util_position_from_depth


💻 Scripting API Updates

See the Lens Scripting API Reference for full details.

Camera: New Matrix Methods

Access camera matrices directly for advanced rendering and projection calculations. See the Camera API Reference.

MethodReturnsDescription
getProjectionMatrix()mat4Returns the projection matrix for this camera
getViewMatrix()mat4Returns the view matrix for this camera
getViewProjectionMatrix()mat4Returns the combined view and projection matrix

New properties for advanced render target control:

PropertyTypeDescription
renderTargetMipmapLevelnumberSets the mipmap level for the camera's render target
renderTargetSlicenumberSets the slice index for the camera's render target

Gaussian Splatting: Full Data Access

Manipulate Gaussian Splat data programmatically with new getter and setter methods. See the GaussianSplattingAsset API Reference.

Read Splat Data:

  • getSplatColors() - Returns colors as Float32Array (r, g, b, a per splat)
  • getSplatPositions() - Returns 3D positions as Float32Array (x, y, z per splat)
  • getSplatRotations() - Returns quaternion rotations as Float32Array (w, x, y, z per splat)
  • getSplatScales() - Returns 3D scale values as Float32Array (x, y, z per splat)

Write Splat Data:

  • setSplatColors(rgbaArray) - Set all splat colors
  • setSplatPositions(vec3Array) - Set all splat positions
  • setSplatRotations(quatsWxyzArray) - Set all splat rotations
  • setSplatScales(vec3Array) - Set all splat scales

This enables dynamic Gaussian Splat effects, procedural modifications, and data-driven visualizations.

Example Usage: (illustrative)

// Read positions
var positions = gaussianSplat.getSplatPositions();

// Modify and write back
for (var i = 0; i < positions.length; i += 3) {
positions[i + 1] += Math.sin(getTime()); // Animate Y position
}
gaussianSplat.setSplatPositions(positions);

GLTF Asset: Static Composition Info

New method to retrieve asset statistics after instantiation. See the GltfAsset API Reference.

Example Usage: (from API source)

var info = gltfAsset.getStaticComposition();
if (info) {
var infoObj = JSON.parse(info.value());
print('Triangles: ' + infoObj.triangleCount);
print('File size: ' + infoObj.fileSizeBytes + ' bytes');
}

Returns JSON with: file size, triangle count, vertex count, mesh count, texture count, texture memory size, material count, animation count, and node count.


🛠️ Editor Scripting API Updates

See the Editor Scripting API Reference for full details.

Audio Support - NEW

Full audio component support in Editor Scripting:

New Components:

  • AudioComponent - Configurable audio playback with spatial audio, distance effects, and more
  • AudioTrackAsset - Base asset class for audio tracks
  • LicensedAudioTrack - Licensed audio with metadata (artistName, trackName, trackId)

AudioComponent Properties:

  • volume, recordVolume - Volume controls
  • enableSpatialAudio - Enable 3D audio positioning
  • enableDistanceEffect - Audio falloff over distance
  • minDistance, maxDistance - Distance effect range
  • curveType - Distance falloff curve (Linear, Inverse, Logarithm, InverseLogarithm)

Logger Module - NEW

New logging infrastructure for plugins:

Example Usage: (illustrative)

import * as Logger from 'LensStudio:Logger';

const logCollector = this.pluginSystem.findInterface(Logger.IUserLogCollector);
logCollector.onRevealLogRequest.connect((message) => {
console.log(message);
});

The IUserLogCollector interface enables custom log handling with onRevealLogRequest signal support.

Asset & Package Management

AssetImportMetadata additions:

  • assetTreePath - Get the asset's tree path in the project
  • isPackedPackageItem - Check if the asset is part of a packed package

Model additions:

  • unpack() - Unpack native packages programmatically

UI Improvements

ProgressBar widget enhancements:

  • setPrimaryColor(color) - Customize the primary bar color
  • setSecondaryColor(color) - Customize the secondary bar color

⌨️ Expanded Keyboard Shortcuts

We've expanded keyboard shortcut coverage across multiple panels to make common actions faster and navigation more consistent:

  • Scene Editor - New shortcuts for scene manipulation
  • Scene Hierarchy - Faster navigation and object management
  • Asset Browser - Quick access to common asset operations
  • Graph Editor - Streamlined node editing workflows

These improvements provide a more consistent experience across panels and platforms.


🔄 Improvements

UI & Workflow

  • Joystick Component - Three new texture presets added
  • Character Controller - Updated idle, walk, and run animations
  • Logger Panel - Double-click on an issue to navigate directly to the script asset
  • Turn Based Game Sample Project - Added auto capture and contextual score in chat

🐛 Bug Fixes

Stability Fixes

  • Fixed a crash in Character Controller when resolving overlaps with other colliders
  • Fixed a crash in Leaderboard component when its scene object is disabled between initialization start and initialized state
  • Fixed application crash when scene was removed due to project corruption
  • Fixed application crash when SceneObject with AnimationPlayer is deleted
  • Fixed application crash on quick start/stop of video recording from Preview
  • Fixed application crash when importing VFX.LSO from old Lens Studio versions
  • Fixed application crash when some old projects were corrupted

Component & Feature Fixes

  • Leaderboard Component - Can now be used with multiple instances without conflicts
  • Custom Node - Fixed issue where connections could be lost on project reopen
  • Diffuse Radiance Map - Fixed noisy map creation
  • Screen Transform - Moving the transform now properly updates Position fields
  • Material Editor - Fixed issue where not all compatible nodes were present when creating connections
  • 2D Editor - Fixed issue preventing it from working
  • Face Crop Texture - copyFrame() now crops the correct region
  • Flipbook Node - Now updates Max frames field interactively
  • Script Graph - Fixed import issues from old Lens Studio versions
Was this page helpful?
Yes
No