(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[477],{2465:function(e,n,i){(window.__NEXT_P=window.__NEXT_P||[]).push(["/changelog",function(){return i(4898)}])},4898:function(e,n,i){"use strict";i.r(n),i.d(n,{__toc:function(){return d}});var t=i(2676),s=i(9657),r=i(4502),a=i(2534);i(681);var l=i(5594);let d=[{depth:2,value:"2.4",id:"24"},{depth:4,value:"2.4.9",id:"249"},{depth:4,value:"2.4.8",id:"248"},{depth:4,value:"2.4.7",id:"247"},{depth:4,value:"2.4.6",id:"246"},{depth:4,value:"2.4.5",id:"245"},{depth:4,value:"2.4.4",id:"244"},{depth:4,value:"2.4.3",id:"243"},{depth:4,value:"2.4.2",id:"242"},{depth:4,value:"2.4.1",id:"241"},{depth:4,value:"2.4.0",id:"240"},{depth:2,value:"2.3",id:"23"},{depth:4,value:"2.3.7",id:"237"},{depth:4,value:"2.3.6",id:"236"},{depth:4,value:"2.3.5",id:"235"},{depth:4,value:"2.3.4",id:"234"},{depth:4,value:"2.3.3",id:"233"},{depth:4,value:"2.3.2",id:"232"},{depth:4,value:"2.3.0",id:"230"},{depth:5,value:"2.3.0-rc.0",id:"230-rc0"},{depth:5,value:"2.3.0-beta.5",id:"230-beta5"},{depth:5,value:"2.3.0-beta.4",id:"230-beta4"},{depth:5,value:"2.3.0-beta.3",id:"230-beta3"},{depth:5,value:"2.3.0-beta.2",id:"230-beta2"},{depth:5,value:"2.3.0-beta.0",id:"230-beta0"},{depth:2,value:"2.2",id:"22"},{depth:4,value:"2.2.2",id:"222"},{depth:4,value:"2.2.0",id:"220"},{depth:5,value:"2.2.0-rc.3",id:"220-rc3"},{depth:5,value:"2.2.0-rc.2",id:"220-rc2"},{depth:5,value:"2.2.0-rc.1",id:"220-rc1"},{depth:5,value:"2.2.0-rc.0",id:"220-rc0"},{depth:5,value:"2.2.0-beta.2",id:"220-beta2"},{depth:5,value:"2.2.0-beta.0",id:"220-beta0"},{depth:2,value:"2.1",id:"21"},{depth:4,value:"2.1.2",id:"212"},{depth:4,value:"2.1.1",id:"211"},{depth:4,value:"2.1.0",id:"210"},{depth:5,value:"2.1.0-rc.3",id:"210-rc3"},{depth:5,value:"2.1.0-rc.2",id:"210-rc2"},{depth:5,value:"2.1.0-rc.1",id:"210-rc1"},{depth:5,value:"2.1.0-beta.2",id:"210-beta2"},{depth:5,value:"2.1.0-beta.1",id:"210-beta1"},{depth:5,value:"2.1.0-beta.0",id:"210-beta0"},{depth:2,value:"2.0",id:"20"},{depth:5,value:"2.0.0-beta.18",id:"200-beta18"},{depth:5,value:"2.0.0-beta.17",id:"200-beta17"},{depth:5,value:"2.0.0-beta.16",id:"200-beta16"},{depth:5,value:"2.0.0-beta.15",id:"200-beta15"},{depth:5,value:"2.0.0-beta.14",id:"200-beta14"},{depth:5,value:"2.0.0-beta.13",id:"200-beta13"},{depth:5,value:"2.0.0-beta.12",id:"200-beta12"},{depth:5,value:"2.0.0-beta.11",id:"200-beta11"},{depth:5,value:"2.0.0-beta.0",id:"200-beta0"},{depth:3,value:"1.1.0",id:"110"},{depth:3,value:"1.0.2",id:"102"},{depth:3,value:"1.0.1",id:"101"},{depth:3,value:"1.0.0",id:"100"}];function h(e){let n=Object.assign({h1:"h1",h2:"h2",p:"p",ul:"ul",li:"li",em:"em",a:"a",h4:"h4",code:"code",h5:"h5",strong:"strong",hr:"hr",h3:"h3"},(0,l.a)(),e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{children:"Changelog"}),"\n",(0,t.jsx)(n.h2,{id:"24",children:"2.4"}),"\n",(0,t.jsx)(n.p,{children:"Highlights of the 2.4 release:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["New metrics available: ",(0,t.jsx)(n.em,{children:"Parasympathetic Activity"}),", ",(0,t.jsx)(n.em,{children:"Cardiac Workload"}),", ",(0,t.jsx)(n.em,{children:"Age"})," and ",(0,t.jsx)(n.em,{children:"BMI"})," (see ",(0,t.jsx)(n.a,{href:"/video-measurement/results#final-metrics",children:"Results"})," for more details)"]}),"\n",(0,t.jsxs)(n.li,{children:["New SDK ",(0,t.jsx)(n.a,{href:"/getting-started/choosing-mode#full-ux-flow",children:"summary screen"})," is available after the measurement, presenting all metrics along with short explanation and normal ranges"]}),"\n",(0,t.jsx)(n.li,{children:"The Health Risks functionality is now available as part of the embedded SDK UI"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"249",children:"2.4.9"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(03-10-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["a new ",(0,t.jsx)(n.code,{children:"auto"})," mode is available for SDK's language selection, enabled by default. The SDK will choose the system/browser language when that mode is active and when translation into that language is available."]}),"\n",(0,t.jsx)(n.li,{children:"fix for text line wrapping for some languages in the embedded UI"}),"\n",(0,t.jsx)(n.li,{children:"the device camera will now turn off when navigating away from the measurement screen"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"248",children:"2.4.8"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(20-09-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for a problem that could occasionally occur, showing FAILED status after the measurement has completed successfully"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Web version:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for a problem that could cause the measurement to crash after running for about 40 minutes"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"247",children:"2.4.7"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(18-09-2024)"})}),"\n",(0,t.jsx)(n.p,{children:"Web version:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for a problem that could cause the page to freeze after deinitializing the SDK and pressing keys on the keyboard"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"246",children:"2.4.6"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(11-09-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"the Nationality field in Health Risks is now pre-selected based on a rough estimate of the user's country"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"245",children:"2.4.5"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(29-08-2024)"})}),"\n",(0,t.jsx)(n.p,{children:"Web SDK:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"reduced memory usage"}),"\n",(0,t.jsx)(n.li,{children:"slightly reduced CPU usage"}),"\n",(0,t.jsxs)(n.li,{children:["a new ",(0,t.jsx)(n.a,{href:"/getting-started/initialization#deinitialization",children:(0,t.jsx)(n.code,{children:"destroyRuntime()"})})," method is available for the Web version, making it possible to release all the memory previously allocated by the SDK"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"244",children:"2.4.4"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(24-08-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fixes for custom SDK config in the Flutter version of the SDK"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"243",children:"2.4.3"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(16-08-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fixes for momentary Heart Rate API methods"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"242",children:"2.4.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(13-08-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"improvements to the embedded numeric keyboard"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"241",children:"2.4.1"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(10-08-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"visual improvements and fixes for the new SDK screens"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"240",children:"2.4.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(03-08-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/video-measurement/results#final-metrics",children:"4 new SDK metrics"})," available"]}),"\n",(0,t.jsx)(n.li,{children:"new SDK summary screen available after the measurement"}),"\n",(0,t.jsx)(n.li,{children:"Health Risks functionality available as part of the embedded UI"}),"\n",(0,t.jsx)(n.li,{children:"experimental full-frame processing mode available for Desktop Web SDK (full landscape frame will be processed instead of a portrait cut from the middle)"}),"\n",(0,t.jsxs)(n.li,{children:["fine-grained control over metrics displayed in ",(0,t.jsx)(n.a,{href:"https://developer.shen.ai/getting-started/configuration#custom-measurement-configuration",children:"custom measurement configuration"})]}),"\n",(0,t.jsx)(n.li,{children:"improvements to scrolling in the embedded UI"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"23",children:"2.3"}),"\n",(0,t.jsx)(n.p,{children:"Highlights of the 2.3 release:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Embedded ",(0,t.jsx)(n.a,{href:"/getting-started/configuration#user-onboarding",children:"user onboarding"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/getting-started/configuration#translation",children:"Translation"})," capability of the embedded SDK's UI"]}),"\n",(0,t.jsxs)(n.li,{children:["Fully customizable measurement ",(0,t.jsx)(n.a,{href:"/getting-started/configuration#custom-measurement-configuration",children:"configuration"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/getting-started/configuration#color-theme",children:"Color theming"})," of the default SDK's UI"]}),"\n",(0,t.jsxs)(n.li,{children:["Support of the new pricing scheme from ",(0,t.jsx)(n.a,{href:"https://pricing.shen.ai",children:"pricing.shen.ai"})]}),"\n",(0,t.jsxs)(n.li,{children:["Support of ",(0,t.jsx)(n.a,{href:"/getting-started/configuration#cameramode",children:"external cameras"})," in Web SDK (Desktop)"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"237",children:"2.3.7"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(14-06-2024)"})}),"\n",(0,t.jsx)(n.p,{children:"Web SDK:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"if the user initially denies camera permission but later allows it, the SDK will start operating (required browser refresh before)"}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"onCameraError"})," callback is now also called if the SDK is initialized on a device that has no camera"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"236",children:"2.3.6"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(28-05-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for a crash that could occur on the Chrome browser on an iOS device on subsequent SDK uses"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"235",children:"2.3.5"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(17-05-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for a crash that could occur on the Firefox browser"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"234",children:"2.3.4"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(09-05-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["an additional ",(0,t.jsx)(n.code,{children:"eventCallback"})," can be passed to the SDK's ",(0,t.jsx)(n.a,{href:"/getting-started/initialization#custom-initialization-options",children:"InitializationSettings"})," in the Web version to get notified when the START/STOP button has been pressed by the user and when the measurement has finished"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"233",children:"2.3.3"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(03-05-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["an additional ",(0,t.jsx)(n.code,{children:"onCameraError"})," callback can be passed to the SDK's ",(0,t.jsx)(n.a,{href:"/getting-started/initialization#custom-initialization-options",children:"InitializationSettings"})," in the Web version to discover when the user has rejected camera permissions"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"232",children:"2.3.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(25-04-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for iOS SDK UI display problems after reinitializing the SDK"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"230",children:"2.3.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(27-03-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Health Risks are now available in the React Native version of the SDK"}),"\n",(0,t.jsx)(n.li,{children:"fix targeting memory allocation errors in the Web version of the SDK"}),"\n",(0,t.jsx)(n.li,{children:"minor UI fixes for translated views"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"230-rc0",children:"2.3.0-rc.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(21-03-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Web SDK size reduction to 15MB (compressed) with deferred loading of additional data on-demand"}),"\n",(0,t.jsx)(n.li,{children:"signal quality improvements for when the face is further away from the camera"}),"\n",(0,t.jsxs)(n.li,{children:["fix for the new ",(0,t.jsx)(n.code,{children:"CustomColorTheme"})," not available on Native iOS"]}),"\n",(0,t.jsx)(n.li,{children:"minor fixes"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"230-beta5",children:"2.3.0-beta.5"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(15-03-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/getting-started/configuration#translation",children:"Translation"})," of the embedded UI is now available"]}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"230-beta4",children:"2.3.0-beta.4"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(14-03-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/getting-started/configuration#user-onboarding",children:"User onboarding"})," is now available in the SDK"]}),"\n",(0,t.jsx)(n.li,{children:"small progress bars now show on individual tiles of the measurement UI to better indicate measurement progress"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"230-beta3",children:"2.3.0-beta.3"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(13-03-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix recently added methods not exported on iOS"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"230-beta2",children:"2.3.0-beta.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(01-03-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["it's now possible to set a ",(0,t.jsx)(n.a,{href:"/getting-started/configuration#custom-measurement-configuration",children:"custom measurement configuration"})]}),"\n",(0,t.jsxs)(n.li,{children:["it's now possible to set ",(0,t.jsx)(n.a,{href:"/getting-started/configuration#color-theme",children:"color themes"})," for the SDK's UI"]}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"230-beta0",children:"2.3.0-beta.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(23-02-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["the SDK now supports the new pricing model available at ",(0,t.jsx)(n.a,{href:"https://pricing.shen.ai",children:"pricing.shen.ai"})]}),"\n",(0,t.jsxs)(n.li,{children:["it's now possible to ",(0,t.jsx)(n.a,{href:"/getting-started/configuration#cameramode",children:"choose an external camera"})," when using the Desktop Web SDK using the new ",(0,t.jsx)(n.code,{children:"DEVICE_ID"})," mode and by clicking the 'Swap Cameras' button"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"22",children:"2.2"}),"\n",(0,t.jsx)(n.p,{children:"Highlights of the 2.2 release:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.em,{children:"Multi-Tonal Sensing"}),": makes it possible to complete Strict mode measurements in worse conditions and on a wider variety of skin tones while preserving result precision"]}),"\n",(0,t.jsx)(n.li,{children:"Support for React Native, enabling easy cross-platform integration in that environment."}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"222",children:"2.2.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(01-03-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for a crash that could occur when repeatedly calling Deinitialize() on an already deinitialized SDK"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"220",children:"2.2.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(08-02-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"accuracy of real-time heartbeat intervals has been improved"}),"\n",(0,t.jsxs)(n.li,{children:["a new preset ",(0,t.jsx)(n.code,{children:"INFINITE_METRICS"})," is available which displays HR (10s), HRV (30s) and Cardiac Stress (30s) without an end condition"]}),"\n",(0,t.jsxs)(n.li,{children:["some metrics (HR, HRV, Cardiac Stress) are now available in realtime during the measurement in addition to being available as part of the final measurement result using the new ",(0,t.jsxs)(n.a,{href:"/video-measurement/measurement#hrv-and-cardiac-stress",children:[(0,t.jsx)(n.code,{children:"getRealtimeMetrics"})," method"]})]}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"220-rc3",children:"2.2.0-rc.3"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(24-01-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"minor bug fixes"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"220-rc2",children:"2.2.0-rc.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(16-01-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for a crash occurring when changing device orientation between landscape and portrait during the measurement"}),"\n",(0,t.jsx)(n.li,{children:"fix for a crash that could occur when immediately stopping the measurement after starting it"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"220-rc1",children:"2.2.0-rc.1"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(08-01-2024)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for the Infinite HR preset of the SDK consuming an ever increasing amount of memory"}),"\n",(0,t.jsx)(n.li,{children:"performance improvements concerning the new signal processing pathway"}),"\n",(0,t.jsx)(n.li,{children:"the SDK will now never block on deinitialization, even if there are some unresponsive dangling views that weren't destroyed"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"220-rc0",children:"2.2.0-rc.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(22-12-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fixes for new signal processing in the Web version of the SDK"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"220-beta2",children:"2.2.0-beta.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(15-12-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["the SDK uses a ",(0,t.jsx)(n.strong,{children:"new signal processing pathway"}),", allowing Strict measurements to complete in significantly worse conditions than before while preserving precision of the results"]}),"\n",(0,t.jsx)(n.li,{children:"the 'change camera' icon is now disabled during the measurement"}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.em,{children:"Stress"})," parameter has been renamed to ",(0,t.jsx)(n.em,{children:"Cardiac Stress"})," to better reflect the nature of the parameter and avoid confusion with psychological stress"]}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"220-beta0",children:"2.2.0-beta.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(15-11-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"React Native SDK"})}),"\n",(0,t.jsx)(n.li,{children:"SDK now enables the measurement to start in lower-FPS scenarios"}),"\n",(0,t.jsx)(n.li,{children:"SDK on Android will now request camera permissions if they are not already granted"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"21",children:"2.1"}),"\n",(0,t.jsx)(n.p,{children:"The 2.1 release focuses on the web-on-mobile usage scenario, significantly increasing the SDK's performance and stability in that environment."}),"\n",(0,t.jsx)(n.h4,{id:"212",children:"2.1.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(17-10-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for initialization settings sometimes not being fully applied"}),"\n",(0,t.jsx)(n.li,{children:"support for some older Android devices with reduced camera capabilities"}),"\n",(0,t.jsx)(n.li,{children:"workaround of a WebKit issue that could prevent the Web SDK from loading on iOS browsers"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"211",children:"2.1.1"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(13-10-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/getting-started/initialization#custom-initialization-options",children:(0,t.jsx)(n.code,{children:"InitializationSettings"})})," are now available in the Web SDK"]}),"\n",(0,t.jsx)(n.li,{children:"missing initialization settings added for Android and iOS"}),"\n",(0,t.jsx)(n.li,{children:"fix a deinitialization issue on iOS that could arise if the embedded UI view was removed before the SDK was deinitialized"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"210",children:"2.1.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(10-10-2023)"})}),"\n",(0,t.jsx)(n.p,{children:"The 2.1.0 release focuses on the web-on-mobile usage scenario, significantly increasing the SDK's performance and stability in that environment."}),"\n",(0,t.jsx)(n.h5,{id:"210-rc3",children:"2.1.0-rc.3"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(09-10-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"a 'Device Unstable' icon now appears in the UI when the signal quality is disrupted due to the device/user movement"}),"\n",(0,t.jsxs)(n.li,{children:["that state is also available programistically as ",(0,t.jsx)(n.a,{href:"/video-measurement/measurement#checking-the-measurement-state",children:(0,t.jsx)(n.code,{children:"runningSignalBadDeviceUnstable"})})," in the SDK API"]}),"\n",(0,t.jsxs)(n.li,{children:["the embedded UI scales better if the ",(0,t.jsx)(n.code,{children:"<canvas>"})," element on which it is rendered is small"]}),"\n",(0,t.jsx)(n.li,{children:"workaround for a bug present in Safari, increasing the amount of times the SDK can be reloaded in the same browser tab before running out of memory"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"210-rc2",children:"2.1.0-rc.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(03-10-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix for a condition with the embedded UI that could occur when deinitializing and initializing the SDK again"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"210-rc1",children:"2.1.0-rc.1"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(30-09-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["additional messages are now displayed on the default ",(0,t.jsx)(n.code,{children:"<canvas>"})," before the Web SDK loads fully to indicate the progress"]}),"\n",(0,t.jsx)(n.li,{children:"if the SDK cannot keep up with the real-time computations, a 'CPU on fire' icon appears, the measurement is aborted and blocked from starting for the next 5 seconds"}),"\n",(0,t.jsxs)(n.li,{children:["the computational overload can be detected programistically as a new ",(0,t.jsx)(n.a,{href:"/getting-started/configuration#operatingmode",children:(0,t.jsx)(n.code,{children:"OperatingMode (SystemOverloaded)"})})," in the SDK API"]}),"\n",(0,t.jsx)(n.li,{children:"performance improvements"}),"\n",(0,t.jsx)(n.li,{children:"bug fixes"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"210-beta2",children:"2.1.0-beta.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(25-09-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Health Risks available in the Swift iOS API of the SDK"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"210-beta1",children:"2.1.0-beta.1"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(21-09-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"further performance improvements in the computational pipeline"}),"\n",(0,t.jsx)(n.li,{children:"fixes for some web-on-mobile specific issues"}),"\n",(0,t.jsx)(n.li,{children:"support for the Web version on iOS 17"}),"\n",(0,t.jsx)(n.li,{children:"automatic Wake Lock during the measurement in the Web version"}),"\n",(0,t.jsx)(n.li,{children:"web version loading progress indicator"}),"\n",(0,t.jsx)(n.li,{children:"fix for Camera Swap in the Web version"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"210-beta0",children:"2.1.0-beta.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(15-09-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"performance improvements in some parts of the computational pipeline"}),"\n",(0,t.jsx)(n.li,{children:"performance improvements in SDK's embedded UI rendering"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"20",children:"2.0"}),"\n",(0,t.jsx)(n.p,{children:"The 2.0 release of the SDK brings a redesigned API surface and a fully integrated measurement UI/UX"}),"\n",(0,t.jsx)(n.h5,{id:"200-beta18",children:"2.0.0-beta.18"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(31-08-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"further performance improvements in some parts of the pipeline"}),"\n",(0,t.jsx)(n.li,{children:"SDK size reduction"}),"\n",(0,t.jsx)(n.li,{children:"fix for iOS Flutter SDK"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"200-beta17",children:"2.0.0-beta.17"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(25-08-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Swift/Objective-C API wrapper for the iOS SDK"}),"\n",(0,t.jsx)(n.li,{children:"support for Per-user (automatic) licensing model"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"200-beta16",children:"2.0.0-beta.16"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(11-08-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"performance improvements in some parts of the pipeline"}),"\n",(0,t.jsx)(n.li,{children:"fix for iOS camera not deinitializing properly at SDK deinitialization"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"200-beta15",children:"2.0.0-beta.15"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(21-06-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"fix new presets not available in Android Flutter plugin"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"200-beta14",children:"2.0.0-beta.14"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(19-06-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["two new unvalidated measurement presets ",(0,t.jsx)(n.a,{href:"/getting-started/configuration#measurementpreset",children:"have been added"})," (",(0,t.jsx)(n.code,{children:"FourtyFiveSecondsUnvalidated"})," and ",(0,t.jsx)(n.code,{children:"ThirtySecondsUnvalidated"}),") which allow for shorter measurements (45 and 30 seconds respectively)"]}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"200-beta13",children:"2.0.0-beta.13"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(02-06-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"slightly improved rPPG signal quality/rejection rate when the user is further away from the camera"}),"\n",(0,t.jsxs)(n.li,{children:["added ",(0,t.jsx)(n.a,{href:"/video-measurement/results#facial-regions-visualizations",children:(0,t.jsx)(n.code,{children:"getSignalQualityMapPng"})})," method, which returns a PNG image with the signal quality map"]}),"\n",(0,t.jsxs)(n.li,{children:["added ",(0,t.jsx)(n.a,{href:"/video-measurement/results#facial-regions-visualizations",children:(0,t.jsx)(n.code,{children:"getFaceTexturePng"})})," method, which returns a PNG image with the region of the face used for the PPG signal extraction"]}),"\n",(0,t.jsxs)(n.li,{children:["added ",(0,t.jsx)(n.a,{href:"/video-measurement/results#rppg-signal",children:(0,t.jsx)(n.code,{children:"getFullPpgSignal"})})," method which returns a PPG signal after the measurement has concluded"]}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"200-beta12",children:"2.0.0-beta.12"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(30-05-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["lower signal quality threshold for the ",(0,t.jsx)(n.code,{children:"Relaxed"})," measurement mode"]}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"200-beta11",children:"2.0.0-beta.11"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(19-05-2023)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["added ",(0,t.jsx)(n.code,{children:"getCurrentSignalQualityMetric"})," method to the SDK API"]}),"\n",(0,t.jsxs)(n.li,{children:["added ",(0,t.jsx)(n.code,{children:"average_signal_quality"})," to the measurement results"]}),"\n",(0,t.jsx)(n.li,{children:"updated Blood Pressure inference model"}),"\n"]}),"\n",(0,t.jsx)(n.h5,{id:"200-beta0",children:"2.0.0-beta.0"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Fully integrated measurement UI/UX."}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h3,{id:"110",children:"1.1.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(11-11-2022)"})}),"\n",(0,t.jsx)(n.p,{children:"New:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Interbeat intervals"})," available after the measurement has concluded"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Cardiovascular health risks"})," calculation"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h3,{id:"102",children:"1.0.2"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(21-09-2022)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["[iOS] missing ",(0,t.jsx)(n.code,{children:"MinimumOSVersion"})," information added to ",(0,t.jsx)(n.code,{children:"plist.info"})," file"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"101",children:"1.0.1"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(19-09-2022)"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"[iOS] fix for a possible crash when deinitializing the SDK and initializing it again"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"100",children:"1.0.0"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"(16-09-2022)"})}),"\n",(0,t.jsx)(n.p,{children:"Initial public SDK release."})]})}let c={MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:n}=Object.assign({},(0,l.a)(),e.components);return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)},pageOpts:{filePath:"pages/changelog.md",route:"/changelog",pageMap:[{kind:"Meta",data:{docs:{title:"Documentation",type:"page",href:"/"},licensing:{title:"Customer Portal",type:"page",href:"https://dashboard.shen.ai/sdk/docs",newWindow:!0},support:{title:"Support",type:"page",href:"https://dashboard.shen.ai/sdk/contact",newWindow:!0},index:{title:"Introduction"},"getting-started":"Getting started",platforms:"Platforms","video-measurement":"Video measurement","health-risks":"Health risks",changelog:"Changelog","contact-support":{title:"Contact support"}}},{kind:"MdxPage",name:"changelog",route:"/changelog"},{kind:"MdxPage",name:"contact-support",route:"/contact-support"},{kind:"Folder",name:"getting-started",route:"/getting-started",children:[{kind:"Meta",data:{"choosing-mode":"Choosing SDK mode",authorization:"Authorization","system-requirements":"System requirements",installation:"Installation and permissions",initialization:"Initialization",configuration:"Configuration"}},{kind:"MdxPage",name:"authorization",route:"/getting-started/authorization",frontMatter:{title:"Authorization"}},{kind:"MdxPage",name:"choosing-mode",route:"/getting-started/choosing-mode",frontMatter:{title:"Choosing SDK mode"}},{kind:"MdxPage",name:"configuration",route:"/getting-started/configuration"},{kind:"MdxPage",name:"initialization",route:"/getting-started/initialization"},{kind:"MdxPage",name:"installation",route:"/getting-started/installation",frontMatter:{title:"Installation and permissions"}},{kind:"MdxPage",name:"system-requirements",route:"/getting-started/system-requirements",frontMatter:{title:"System requirements"}}]},{kind:"MdxPage",name:"getting-started",route:"/getting-started"},{kind:"Folder",name:"health-risks",route:"/health-risks",children:[{kind:"Meta",data:{"cv-risks":"Cardiovascular health risks",integration:"Integrating risks functionality"}},{kind:"MdxPage",name:"cv-risks",route:"/health-risks/cv-risks"},{kind:"MdxPage",name:"integration",route:"/health-risks/integration"}]},{kind:"MdxPage",name:"index",route:"/"},{kind:"Folder",name:"platforms",route:"/platforms",children:[{kind:"Meta",data:{flutter:"Flutter","react-native":"React Native",ios:"iOS",android:"Android",web:"Web"}},{kind:"MdxPage",name:"android",route:"/platforms/android"},{kind:"MdxPage",name:"flutter",route:"/platforms/flutter"},{kind:"MdxPage",name:"ios",route:"/platforms/ios"},{kind:"MdxPage",name:"react-native",route:"/platforms/react-native"},{kind:"MdxPage",name:"web",route:"/platforms/web"}]},{kind:"Folder",name:"video-measurement",route:"/video-measurement",children:[{kind:"Meta",data:{preparation:"Preparation",measurement:"Measurement",results:"Results"}},{kind:"MdxPage",name:"measurement",route:"/video-measurement/measurement"},{kind:"MdxPage",name:"preparation",route:"/video-measurement/preparation"},{kind:"MdxPage",name:"results",route:"/video-measurement/results"}]}],flexsearch:{codeblocks:!0},title:"Changelog",headings:d},pageNextRoute:"/changelog",nextraLayout:r.ZP,themeConfig:a.Z};n.default=(0,s.j)(c)},2534:function(e,n,i){"use strict";var t=i(2676);i(5271);let s={project:{link:"https://github.com/mxlaboratories/shenai-sdk"},i18n:[],useNextSeoProps:()=>({titleTemplate:"%s | Shen.ai SDK"}),darkMode:!0,primaryHue:{dark:167,light:204},editLink:{text:""},feedback:{content:()=>(0,t.jsx)(t.Fragment,{})},footer:{text:"\xa9 ".concat(new Date().getFullYear()," MX Labs O\xdc")},logo:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("img",{className:"logo only-light",style:{height:32},src:"/shen-ai.png"}),(0,t.jsx)("img",{className:"logo only-dark",style:{height:32},src:"/shen-ai-darkmode.png"})]}),chat:{link:"https://mxlabs.ai",icon:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("img",{style:{marginRight:31,height:24},className:"only-light",src:"/mxlabs-vertical.png"}),(0,t.jsx)("img",{style:{marginRight:31,height:24},className:"only-dark",src:"/mxlabs-vertical-darkmode.png"})]})},head:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,t.jsx)("meta",{name:"description",content:"Shen.ai SDK: developer portal"}),(0,t.jsx)("meta",{name:"og:title",content:"Shen.ai SDK - developer portal"}),(0,t.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-touch-icon.png"}),(0,t.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"}),(0,t.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/favicon-16x16.png"}),(0,t.jsx)("link",{rel:"manifest",href:"/site.webmanifest"}),(0,t.jsx)("link",{rel:"mask-icon",href:"/safari-pinned-tab.svg",color:"#5bbad5"}),(0,t.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,400&display=swap",rel:"stylesheet"})]}),toc:{extraContent:""}};n.Z=s}},function(e){e.O(0,[466,888,774,179],function(){return e(e.s=2465)}),_N_E=e.O()}]);