Detailed Changelogs
This page summarizes changes in Lens Studio API, nodes, and features.
What's New in Lens Studio 5.18
✨ Highlights
Character Skin Generator Plugin - NEW
The Character Skin Generator plugin enables the creation of Lenses powered by ML models that transform users into full-body digital characters with pixel-level accuracy.
Body Generator: Quality Upgrade
The Body Generator plugin has been updated to a new version, bringing higher quality textures and better image-based generations.
Segmentation Texture: TextureTrackingScope Support
Segmentation texture now supports TextureTrackingScope, allowing you to segment bodies or portrait hair from sources like dual camera or camera roll (media picker).
Keyboard Input Support
Keyboard input support has been added for testing in Lens Studio:
- The Bitmoji Player Package and Input Action component have been updated to utilize keyboard controls
- Map keyboard keys (for example,
W,A,S,D, space bar) to movement and actions - New D-Pad style input for movement
Bitmoji Game Sample Project - NEW
The Bitmoji Game sample project demonstrates building a complete 3D platformer game with Character Controller, featuring:
- Bitmoji-themed level assets
- Keyboard testing support
- Game mechanics including checkpoints, collectibles, hazards, portals, and leaderboard integration
Scene Editor Improvements
| Feature | Description |
|---|---|
| Orthographic View | Toggle between perspective and orthographic views using the navigation cube for precise alignment |
| Frame Tool | Press T to activate the Frame tool for quick sizing and positioning of objects in 3D space |
| Move Object to Camera | Move selected object to editor camera position: Shift+Cmd+F (Mac), Shift+Ctrl+F (Windows) |
| Double-Click to Zoom | Zoom to an object by double-clicking it in the Scene Hierarchy or pressing F |
| Maximize Panel | Expand any panel to fill the workspace for easier inspection and editing |
Camera Kit SDK Lens Templates - NEW
Camera Kit SDK Lens templates have been added to showcase the SDK's AR capabilities.
Asset Library: Sorting & Filtering
New sorting and filtering options have been added to the Asset Library for easier asset discovery.
Simplified Lens Blocks - NEW
New Simplified Lens Blocks for rapid prototyping:
| Block | Description |
|---|---|
| Zoom | Scale picture with different speed and duration, loop, zoom in/out features |
| Selfie Widget | Add small picture of you in different shapes to games and interactive experiences |
| Parallax | Add depth to your photos and videos |
| Color Correction Library | Part of the Adjust block |
| Face Parts | Add eyes or mouth on any position on screen or attach to your face |
SafeSnapchatUser API - NEW
New SafeSnapchatUser class and related APIs allow loading friend Bitmojis in any context, including Lenses with Leaderboards, Turn Based Component, Remote APIs, and more.
💻 Scripting API Updates
See the Lens Scripting API Reference for full details.
Keyboard Input API - NEW
| Class | Description |
|---|---|
| KeyboardManager | Central manager for keyboard input handling |
| KeyPressEvent | Event triggered when a key is pressed |
| KeyReleaseEvent | Event triggered when a key is released |
| KeyModifiers | Enumeration for key modifiers (Shift, Control, Alt, and more) |
JsonAsset - NEW
- New JsonAsset class for working with JSON data assets
- Module resolution now supports JSON files,
Index.jsonfiles, and@input Asset.JsonAssettypes
Vector API Additions
New methods added to vec2, vec3, and vec4:
clone()- Create a copy of the vectorfill()- Fill vector with a valuecopyFrom()- Copy values from another vector
All vector functions that previously allocated new objects now have in-place alternatives to reduce memory overhead and improve performance.
Hierarchy Search APIs
New methods added to SceneObject for optimized hierarchy searches:
getComponentInAncestors()/getComponentsInAncestors()getComponentInDescendants()/getComponentsInDescendants()isDescendantOf()
Bitmoji 3D Options - NEW
- BaseBodyParams - Configure body parameters
- BodyType, Gender - Enumerations for body customization
🛠️ Editor Scripting API Updates
See the Editor Scripting API Reference for full details.
Asset Library API - NEW
- GetAssetsByIdsService - Fetch assets by their IDs
- Creator - Asset creator information
- Subcategory - Asset subcategory data
Shader Pass API - NEW
- PassBinding - Shader pass bindings
- PassUiData - Pass UI configuration
- PassBindingType, ShaderType - Related enumerations
UI Components - NEW
- SearchableMenu - Menu with search functionality
- Splitter - Resizable panel divider
- CursorShape - Cursor shape options
Package Export - NEW
New Package Export options to add a version range on export.
🔄 Improvements
GenAI Suite
- Selfie Attachments - New "Styles" customization: Default (balanced), Cartoon (stylized), or Realistic (high-fidelity)
- AI Portraits Component - See the tutorial to learn how to replace the default transition, add post effects, and combine AI Portraits with other components.
Glam & Glitter
- Valentine's content pack added
- Improved Makeup Stickers and Sparkles functionality
- New sparkle presets including hearts
- Paint makeup directly on face using stickers with color, opacity, mirroring, and erasing controls
VFX Editor
- High precision render targets - More efficient particle data storage, better performance, higher accuracy with no drift
- World space systems can now simulate to several kilometers and beyond
- Added support for VFX Container Node items duplicate and copy & paste
Character Controller
- Actions with and without animations can optionally be interrupted by other actions or by moving the character
- Actions can now use remote animation assets for publishing lighter lenses
- Two new animation types: Fall and Squat
- New APIs for changing jump speed and velocity programmatically
Input Action
- New Character Controller responses for handling movement parameters
- New D-Pad style input
Script Inputs UI
- Custom Type Inputs now support Custom Component types
- The
showIfflag now supports reference properties:{"showIf": "[ref_property]"}–visible when the reference is valid{"showIf": "[ref_property]", "showIfValue": false}–visible when the reference is invalid
Simplified Lens Blocks
- Hair Color - Changed shader for more natural and saturated look
- Eye Color - Added ability to change eye color for each eye separately
- Stickers on Face - Now you can map stickers to 3D mesh
- Background Block - Added ability to use UPA (User Provider Assets)
🐛 Bug Fixes
Selfie Attachments
- Resolved a critical issue that prevented lenses with animated attachments from being published
Character Controller
- No longer crashes if a scene object considered as ground is destroyed at runtime
- Dash direction is now updated properly if a dash is requested while moving the character
- Fixed animation not playing correctly if Character Controller initialized before the Bitmoji's idle animation was loaded
Scene Editor
- Fixed face meshes not appearing when the face index was not 0
- Fixed unresponsive scale gizmo on Windows
- Fixed issue where using the Text3D frame tool did not update the text component in the model
- Fixed multiple crashes
⚠️ Known Issues
- TypeScript will not allow comparison between
mat2andmat4
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.
New Animation Workflow:
- Add an animation description in the new Animation Prompt field
- Preview four animated variations before generating the final asset
- Switch between Static and Animated tabs to compare results
- Animate existing static attachments using Add animation
Animation Component Properties:
- Start Events–Define events that trigger the animation
- Delay–Set delay time before animation starts
- Playback Speed–Control animation speed relative to original
- Loop Options–Configure repeat behavior (continuous, ping-pong)
- Infinite Loop–Enable endless playback
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
- New preview workflow - Generate four previews, then select your favorite before creating the final asset
- Regenerate option - Get four new preview options if the initial results don't match expectations
- Copy settings - Quickly iterate on prompts while preserving the original asset in Gallery
- Position adjustment - Quickly modify transform coordinates to align the 3D head with the user's face
Image Reference now produces the highest-quality assets. The plugin delivers best results with non-human subjects like animals, creatures, objects, or stylized characters.
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