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:
| Feature | Description |
|---|---|
| Jump Buffering | Queue jumps before landing for responsive controls |
| Coyote Time | Brief grace period to jump after leaving a platform |
| Multiple Jumps | Support for double jumps and beyond |
| Remote Assets | Animations can now use cloud storage, reducing lens size |
| NPC Proxy | New proxy version for Non-Player Characters |
| Connected Lens Support | Replicating remote players with prediction algorithms for enhanced performance |
| New API Methods | getMoveVelocity() 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()andgetScore()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 Property | Description |
|---|---|
| Apply Blending | When enabled, vertex blending is applied during transformation |
| Apply Skinning | When 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.
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:
| Node | What 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.
| Method | Returns | Description |
|---|---|---|
getProjectionMatrix() | mat4 | Returns the projection matrix for this camera |
getViewMatrix() | mat4 | Returns the view matrix for this camera |
getViewProjectionMatrix() | mat4 | Returns the combined view and projection matrix |
New properties for advanced render target control:
| Property | Type | Description |
|---|---|---|
renderTargetMipmapLevel | number | Sets the mipmap level for the camera's render target |
renderTargetSlice | number | Sets 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 asFloat32Array(r, g, b, a per splat)getSplatPositions()- Returns 3D positions asFloat32Array(x, y, z per splat)getSplatRotations()- Returns quaternion rotations asFloat32Array(w, x, y, z per splat)getSplatScales()- Returns 3D scale values asFloat32Array(x, y, z per splat)
Write Splat Data:
setSplatColors(rgbaArray)- Set all splat colorssetSplatPositions(vec3Array)- Set all splat positionssetSplatRotations(quatsWxyzArray)- Set all splat rotationssetSplatScales(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 moreAudioTrackAsset- Base asset class for audio tracksLicensedAudioTrack- Licensed audio with metadata (artistName, trackName, trackId)
AudioComponent Properties:
volume,recordVolume- Volume controlsenableSpatialAudio- Enable 3D audio positioningenableDistanceEffect- Audio falloff over distanceminDistance,maxDistance- Distance effect rangecurveType- 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 projectisPackedPackageItem- 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 colorsetSecondaryColor(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