SDK Release Notes
v3.11.4
Release notes
Pose Estimation V2 — Smoother and more accurate counter-clockwise head-turn detection. The flow now also handles cases where the user starts from a slightly rotated head position.
Pose Estimation V2 — The "straight face" step is easier to complete; users move through the alignment phase faster.
Pose Estimation V2 — The face-straight guide image and the "keep face straight" text are now shown only while the user is in the straight position, keeping the screen cleaner during the rotation phase.
Pose Estimation V2 — The instruction text has been moved to the top of the screen so it is no longer hidden behind the user's hand on smaller devices.
Pose Estimation V1 — The success callback is now triggered correctly when video recording is enabled.
Pose Estimation V2 — The circular progress indicator now resets cleanly when the flow fails, so the retry starts from a clean state.
v3.11.3
Release notes
ID Capture — Improved stability in long sessions by preventing memory issues when the screen is opened and closed multiple times.
v3.11.2
Release notes
Pose Estimation V2 — Head-movement tracking feels smoother, and selfies are now taken only when the user is in the straight position for better image quality.
Camera & Location Permissions (All Modules) — Updated to the modern Android permission flow for better compatibility with newer Android versions. Affects every module that requests Camera or Location permissions, including ID Capture, Selfie, Auto Selfie, Pose Estimation, NFC, and Video Call.
ID Capture — Resolved crashes and stability issues that could occur when the user navigated away mid-capture.
ID Capture — Fixed an issue where the flow could end unexpectedly after video recording finished, especially on slower devices.
Pose Estimation V2 — Removed the black bars at the top and bottom of the selfie preview so the camera fills the screen as expected.
v3.11.1
Release notes
Pose Estimation V1 — The previously captured selfie is now cleared when the user restarts the flow, so a stale image is never sent within the same session.
v3.11.0
Release notes
Pose Estimation V2 — A brand-new 360° head-rotation liveness flow has been added alongside the existing pose flow (V1). V2 shows a circular progress ring that fills as the user rotates their head a full 360°, with animated direction arrows and a face-alignment guide. The V1 flow remains fully supported and unchanged.
@OptIn(AmaniExperimental::class)
val fragment = SelfiePoseEstimation.BuilderV2()
.documentType("XXX_SE_0")
.userInterfaceColors(
overlayBackgroundColor = ContextCompat.getColor(this, R.color.overlay),
progressRingColor = ContextCompat.getColor(this, R.color.green),
progressRingTrackColor = ContextCompat.getColor(this, R.color.gray),
directionArrowColor = ContextCompat.getColor(this, R.color.green),
appFontColor = ContextCompat.getColor(this, R.color.white)
)
.userInterfaceTexts(
faceStraight = "Please keep your face straight",
turnLeft = "Turn your head to the left",
turnRight = "Turn your head to the right",
keepRotating = "Keep rotating your head"
)
.observe(myObserver)
.build(context)
Pose Estimation V2 — Added an optional preparation screen shown before the liveness flow starts. It plays a tutorial video inside the circle while the progress ring animates, and displays a configurable instruction message and a Start button so the user begins the flow when ready. Configurable using either Android color resources or plain hex color strings.
.showPreparationScreen(
context = this,
video = R.raw.pose_tutorial, // MP4 only
message = "Watch and follow the head movement",
buttonText = "Start",
buttonTextColor = "#FFFFFF",
buttonBackgroundColor = "#34C759",
buttonRadiusDp = 28f,
overlayColor = "#80000000"
)
Pose Estimation V2 — A custom face-guide drawable can now be provided via
faceGuideDrawable(@DrawableRes drawable: Int), replacing the default illustration shown inside the oval before rotation begins.Pose Estimation V2 — The preparation screen has its own overlay-background color so it can visually differ from the main liveness screen.
Pose Estimation V2 — Better overall performance, sensitivity and user experience. Reverse-movement detection has been added to prevent accidental progress when the user turns their head back.
Pose Estimation V2 — A full return to the neutral position is now required to complete the challenge, and the progress ring closes correctly at the end.
Pose Estimation V2 — The on-screen direction arrow is bigger and animates more slowly for better visibility during the flow.
Pose Estimation V2 — V2 is exposed through a dedicated
SelfiePoseEstimation.BuilderV2()entry point that only surfaces options relevant to the 360° flow (rotation colors, rotation texts, face-guide drawable). The new API is marked@AmaniExperimental— opt in with@OptIn(AmaniExperimental::class).Pose Estimation V2 — A selfie is no longer captured while the user is in a non-straight position.
v3.10.1
Release notes
ID Capture, Auto Selfie, Pose Estimation — Faster startup. The first capture frame is ready noticeably sooner after the screen opens.
ID Capture — Lowered the default minimum image-size threshold so more captures pass on a wider range of devices, particularly low- and mid-tier phones.
v3.10.0
Release notes
SDK Initialization — A new
configureWithLocalFeatures()entry point lets host applications ship dynamic-feature model files (Contact with Amani Team for files if needed.) locally inside the app'sassets/directory instead of downloading them at runtime. Useful for offline environments or networks where the model download is restricted. Supported modules for local provisioning are ID Capture, Hologram Detection, and Auto Selfie.
@OptIn(AmaniRestricted::class)
val localFeatures = DynamicFeatureLocal.Builder()
.idCaptureAsset("id_capture_asset.tflite")
.hologramAsset("hologram_asset.tflite")
.autoSelfieAssets(
autoSelfieAsset1 = "selfie_asset_1.tflite",
autoSelfieAsset2 = "selfie_asset_2.tflite",
autoSelfieAsset3 = "selfie_asset_3.tflite"
)
.build()
Amani.configureWithLocalFeatures(
context = this,
server = "https://server.example",
sharedSecret = "optional_shared_secret",
uploadSource = UploadSource.KYC,
dynamicFeatureLocal = localFeatures
)
SDK Initialization — Faster session start. Capture flows are ready noticeably sooner after
configure()andstartSession().BioLogin —
UploadSourceis now exposed as a typed enum for safer, less error-prone integration. String-based values continue to work for backward compatibility.ID Capture — Resolved an issue that could occur when the screen was opened and closed quickly in succession.
BioLogin V2 — The upload source is now applied correctly on the v2 BioLogin flow.
v3.9.3
Release notes
Fixed an issue with the logger to ensure more reliable and consistent log output
v3.9.2
Release notes
Enhanced IDCapture UI with an enlarged capture rectangle to ensure consistent and correct rendering across all device sizes
Improved IDCapture failure logging with clearer, more descriptive messages to simplify debugging
v3.9.1
Release notes
Improved IDCapture auto-capture reliability with enhanced accuracy, particularly for passport scanning
v3.9.0
Release notes
Terms & Conditions acceptance added to the
CustomerInfomodule. UseacceptTermsConditions()to let users accept terms programmatically.
Amani.sharedInstance().CustomerInfo().acceptTermsConditions(
callback = object : TermsConditionsCallback {
override fun onSuccess() {
Log.d(TAG, "TermsConditions accepted")
}
override fun onError(exception: Exception) {
Log.e(TAG, "TermsConditions accept request failed! $exception")
}
}
)
Eye closure check added to the Pose Estimation module. A new
keepEyesOpenAndFaceStraighttext field is available inuserInterfaceTexts()to display a prompt when the user's eyes are closed during liveness detection.
.userInterfaceTexts(
keepEyesOpenAndFaceStraight = "Please keep your eyes open and look straight at the camera"
)
v3.8.3
Release notes
Fixed a configuration retrieval issue and applied minor stability improvements
Improved the logic separation in threshold configuration affecting the IDCapture module
v3.8.2
Release notes
Various internal fixes to improve reliability and smooth operation across SDK modules
Fixes and stability improvements related to the Remote Logging system to ensure more consistent
v3.8.0
Release notes
Improved stability and overall behavior of the IDCapture module by addressing several edge cases and eliminating known bugs for a smoother capture experience.
Enhanced Pose Estimation module with performance and accuracy improvements to provide more reliable pose detection.
Introduced a remote logging and tracing system, enabling logs and operation traces to be monitored remotely for easier debugging and better observability.
v3.7.11
Release notes
Added validation to ensure dynamic feature files are downloaded correctly during the download phase, affecting SelfiePoseEstimation and IDCapture modules.
Minor fixes in IDCapture and SelfiePoseEstimation modules.
v3.7.9
Release notes
Passport & ID Capture minor improvements and enhancements
v3.7.8
Release notes
Passport & ID Capture minor improvements and enhancements
v3.7.6
Release notes
ID Capture improvements and enhancements
Selfie Pose Estimation improvements and enhancements
v3.7.3
Release notes
Upload source parameter is added into Amani Event Listener's stepResult callback
Fix socket not closing issues
v3.7.2
Release notes
Add setTextPaddings function into Selfie to configure text view padding
Amani.sharedInstance()
.Selfie()
...
.setTextPaddings(
left = 20, //Left possible padding accordingly screen dimensions
top = 20, //Top possible padding accordingly screen dimensions
right = 20 //Right possible padding accordingly screen dimensions
)
...
v3.7.1
Release notes
ID Capture improvements and enhancements
Selfie Pose Estimation improvements and enhancements
v3.7.0
Release notes
finishSession() function added to terminate all SDK processes. This method should only be called after the SDK flow is fully completed. If the SDK will be used again, you must call startSession() once more after finishSession depending on your lifecycle.
Improve NFC callback exception messages
v3.6.0
Release notes
Deprecated methods: initAmani() and init(), use configure() instead of init() and startSession() instead of initAmani()
Dynamic Feature support has been introduced, allowing selective feature activation based on specific requirements. This enhancement significantly reduces the SDK size by enabling only the necessary features instead of including all functionalities by default.
- ID Capture – Enables automatic scanning and capturing of ID documents.
- Hologram Detection – Detects holograms on the document to verify authenticity.
- NFC Scan – Reads embedded chip data from supported IDs via NFC.
- Selfie Auto – Automatically captures the user's selfie without manual interaction.
- Selfie Pose Estimation – Provides liveness detection by analyzing user head and pose movements.
Dynamic Feature Selection: Developers can now enable only the required features, optimizing resource usage.
Smaller SDK Size: By dynamically loading features, unnecessary components are excluded, reducing the overall SDK footprint.
Flexible Configuration: Features such as Auto Selfie Capture, Pose Estimation, ID Capture, Hologram Detection and NFC Scan can be selectively enabled using predefined lists. Usage sample is below:
// Dynamic Feature usages samples, select one configuration accordingly your needs.
Amani.configure(
context = this,
server = "https://server.example",
enabledFeatures = listOf(
DynamicFeature.ID_CAPTURE, // ID document scanning & capture
DynamicFeature.ID_HOLOGRAM_DETECTION, // Detect holograms for authenticity
DynamicFeature.NFC_SCAN, // Read chip data via NFC
DynamicFeature.SELFIE_AUTO, // Automatic selfie capture
DynamicFeature.SELFIE_POSE_ESTIMATION // Liveness detection via pose
)
)
16 KB Page Size Support