Video-Like Replay

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


Quick Start

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

import Luciq 
// Configure video-like replay
SessionReplay.screenshotCapturingMode = .frequency // 1 screenshot per second, value in ms 
SessionReplay.screenshotCaptureInterval = 1000 
SessionReplay.screenshotQualityMode = .normal 

// Initialize SDK 
Luciq.start(withToken: "YOUR_APP_TOKEN", invocationEvents: [.shake])

Capturing Modes

Control when screenshots are captured using the screenshotCapturingMode API.

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

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

SessionReplay.screenshotCapturingMode = .navigation

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

UIKit

SwiftUI

Tap

Tap

Double Tap

Double Tap

Long Press

Long Press

Force Touch

Force Touch

Swipe

Swipe

Pinch

Pinch

Scroll

Scroll*

*SwiftUI scroll detection requires manual integration, please refer to the SwiftUI Integration for iOSarrow-up-right docs.


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


Screenshot Capture Interval

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

Parameter

Description

intervalMs

Time between captures in milliseconds

Default

1000ms (1 screenshot per second)

Minimum

500ms

Note: Values below 500ms will automatically use 500ms - the default minimum. 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.

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

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


Configuration Timing

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

Runtime Configuration

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

Setting

When Applied

Capturing Mode

Next session

Screenshot Quality

Next screenshot

Capture Interval

After current interval completes


SwiftUI Considerations

For SwiftUI apps, most interactions are captured automatically. However, scroll detection in SwiftUI requires manual gesture handling if you want scroll events to trigger captures in Interactions mode.

UIKit views embedded in SwiftUI work as expected with full interaction detection.

→ Please refer to our SwiftUI integration docs for more details SwiftUI Integration for iOSarrow-up-right.


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

  • Views marked with luciq_privateView modifier are automatically masked

For more information on privacy controls, see Session Replay for iOSarrow-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.screenshotCapturingMode

Sets when screenshots are captured.

Value

Description

.navigation

Capture on-screen changes only (default)

.interactions

Capture navigation and user interactions

.frequency

Capture at fixed time intervals


SessionReplay.screenshotQualityMode

Sets the visual quality of captured screenshots.

Value
Description

.high

50% WebP compression

.normal

25% WebP compression (default)

.greyscale

Grayscale + 25% WebP compression


SessionReplay.screenshotCaptureInterval

Sets the capture interval for Frequency mode.

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

Last updated