Video-Like Replay

Enhance your Session Replay experience with video-like playback. Configure screenshot quality and capture frequency to see exactly what your users experienced during their sessions.

triangle-exclamation

Experimental API - PII Warning

circle-exclamation

Min Required SDK Version

Overview

Video-like Session Replay transforms your session recordings from simple screen-by-screen captures into smooth, video-like playback. This feature gives you complete visibility into user behavior by:

  • Capturing more frequent screenshots - See every interaction, not just screen transitions

  • Providing configurable quality profiles - Balance visual fidelity with storage efficiency

  • Supporting multiple capture modes - Choose the right approach for your debugging needs


Quick Start

Add these APIs before initializing the SDK for the best experience:

import ai.luciq.library.Luciq
import ai.luciq.library.LuciqInvocationEvent
import ai.luciq.library.sessionreplay.SessionReplay
import ai.luciq.library.sessionreplay.CapturingMode
import ai.luciq.library.sessionreplay.ScreenshotQuality
import ai.luciq.library.sessionreplay.ExperimentalVideoLikeReplay

// Configure video-like replay
@OptIn(ExperimentalVideoLikeReplay::class)
fun configureVideoLikeReplay() {
    SessionReplay.setCapturingMode(CapturingMode.FREQUENCY)
    SessionReplay.setScreenshotCaptureInterval(1000) // 1 screenshot per second
}

// Screenshot quality does NOT require @OptIn
SessionReplay.setScreenshotQuality(ScreenshotQuality.NORMAL)

// Initialize SDK
Luciq.Builder(application, "YOUR_APP_TOKEN")
    .setInvocationEvents(LuciqInvocationEvent.SHAKE)
    .build()

Capturing Modes

Control when screenshots are captured using the setCapturingMode API.

circle-info

setCapturingMode() requires @OptIn(ExperimentalVideoLikeReplay::class) when using INTERACTIONS or FREQUENCY modes.

Captures screenshots only when users navigate between screens. This is the default behavior and provides the lowest overhead.

Best for: Apps where screen transitions are the primary user flow


Interactions Mode

Captures screenshots on screen navigation and user interactions. Includes debouncing to prevent excessive captures.

Best for: Debugging user interaction issues, understanding how users interact with complex screens

Supported Interactions

Legacy Views (XML)

Jetpack Compose

Tap

Tap

Double Tap

Double Tap

Long Press

Long Press

Swipe

Swipe

Pinch

Pinch

Scroll

Scroll


Frequency Mode

Captures screenshots at a fixed time interval for true video-like playback. Also captures on screen navigation.

Best for: Full video-like replay experience, debugging visual issues, understanding complete user journeys

circle-exclamation

Screenshot Capture Interval

When using Frequency mode, configure how often screenshots are captured.

circle-info

setScreenshotCaptureInterval() requires @OptIn(ExperimentalVideoLikeReplay::class).

Parameter

Description

intervalMs

Time between captures in milliseconds

Default

1000ms (1 screenshot per second)

Minimum

500ms

circle-info

Values below 500ms will be automatically set to 500ms (the minimum allowed). A warning will be logged to help you identify the issue.

Timer Reset Behavior

The capture timer resets when:

  • A manual screenshot is captured via the SDK API

  • Screen navigation occurs

This ensures you always capture important moments regardless of the timer state.


Screenshot Quality

Control the visual quality of captured screenshots. Higher quality provides better visuals but uses more storage.

circle-check

Quality Profiles

Profile

Compression

Use Case

HIGH

50% quality (WebP)

Detailed debugging, visual regression testing

NORMAL (Default)

25% quality (WebP)

Balanced quality and storage

GREYSCALE

25% quality + grayscale (WebP)

Maximum storage efficiency, text-heavy apps

Estimated Screenshots per Session

Based on the default 1MB session screenshot limit:

Quality Profile

Approx. Screenshots per Session

HIGH

~62 screenshots

NORMAL

~104 screenshots

GREYSCALE

~130 screenshots

circle-info

For video-like replay at 1 FPS with NORMAL quality, you can capture approximately 1-2 minutes of continuous session activity.


Low-End Device Handling

To ensure optimal user experience, the SDK automatically detects low-end Android devices and enforces Navigation mode regardless of the configured capturing mode.

What This Means

  • If you configure CapturingMode.FREQUENCY or CapturingMode.INTERACTIONS, low-end devices will still use CapturingMode.NAVIGATION

  • Screenshot quality settings are still respected

  • This behavior is automatic and requires no additional configuration

Why This Matters

Low-end devices have limited:

  • CPU resources for frequent screenshot capture

  • Memory for storing compressed images

  • Storage for session data

By enforcing Navigation mode, the SDK prevents negative impact on app performance and user experience.


Configuration Timing

For best results, configure Video-like Session Replay before calling Luciq.Builder().build():

Runtime Configuration

You can also change settings during the session. Changes take effect as follows:

Setting

When Applied

Capturing Mode

Current session

Screenshot Quality

Next screenshot

Capture Interval

After current interval completes


Privacy & Masking

Video-like Session Replay respects all existing privacy configurations:

  • Auto-masking continues to work across all capturing modes

  • Private views are masked in all captured screenshots

  • Secure flag on windows is respected - content is not captured

Marking Views as Private

Using Secure Flag

Views in windows with the secure flag are automatically excluded from Session Replay:

For more information on privacy controls, see Session Replay for Androidarrow-up-right.


Best Practices

Use Case

Configuration

General debugging

Navigation mode + NORMAL quality

UI/UX analysis

Interactions mode + NORMAL quality

Full video replay

Frequency mode (1000ms) + NORMAL quality

Visual debugging

Frequency mode (500ms) + HIGH quality

Storage-conscious

Navigation mode + GREYSCALE quality

Code Examples

Video-like Replay (Balanced)

Interaction-Focused Debugging

Maximum Visual Fidelity

Storage-Optimized


API Reference

SessionReplay.setCapturingMode()

Sets when screenshots are captured.

circle-info

Requires @OptIn(ExperimentalVideoLikeReplay::class) for INTERACTIONS and FREQUENCY modes.

Value

Description

CapturingMode.NAVIGATION

Capture on screen changes only (default)

CapturingMode.INTERACTIONS

Capture on navigation and user interactions

CapturingMode.FREQUENCY

Capture at fixed time intervals


SessionReplay.setScreenshotQuality()

Sets the visual quality of captured screenshots.

circle-check

Value

Description

ScreenshotQuality.HIGH

50% WebP compression

ScreenshotQuality.NORMAL

25% WebP compression (default)

ScreenshotQuality.GREYSCALE

Grayscale + 25% WebP compression


SessionReplay.setScreenshotCaptureInterval()

Sets the capture interval for Frequency mode.

circle-info

Requires @OptIn(ExperimentalVideoLikeReplay::class).

Parameter

Description

intervalMs

Interval in milliseconds (min: 500, default: 1000)


Migration Guide

If you're upgrading from a previous SDK version:

  1. No breaking changes - Default behavior remains Navigation mode with NORMAL quality

  2. Opt-in feature - Video-like replay must be explicitly configured

  3. Repro Steps unaffected - Bug and Crash report screenshots continue to use Navigation mode and NORMAL quality

  4. Experimental APIs - Remember to add @OptIn(ExperimentalVideoLikeReplay::class) when using setCapturingMode() with non-default modes or setScreenshotCaptureInterval()

Last updated