Skip to main content

What Problem Does This Solve?

When working with LCK, you’ll pass configuration structs to methods and handle interaction data from UI. This page documents:
  • Recording parameters (resolution, bitrate, framerate)
  • Camera mode settings (FOV, smoothness, distance)
  • UI interaction data (touch events, button states)
  • Color palette constants
  • Audio source channel configuration and validation
  • Audio plugin runtime information
  • Telemetry event types
Understanding these types helps you configure recording quality, customize camera behavior, build custom UI, and inspect audio system state.

When to Use This

Reference this when:
  • Configuring recording parameters
  • Setting up camera modes
  • Handling UI events
  • Styling custom UI components
  • Working with audio channels and source configuration
  • Validating audio plugin configuration before recording
  • Querying registered audio plugin capabilities
  • Working with telemetry events

Recording Configuration

FLCKRecorderParams

What it’s for: Configure video/audio recording settings
USTRUCT(BlueprintType)
struct FLCKRecorderParams
{
    GENERATED_BODY()
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Width = 1920;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Height = 1080;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Framerate = 30;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 VideoBitrate = 2 << 20;  // 2097152 (~2 Mbps)

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Samplerate = 48000;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 AudioBitrate = 256 << 10;   // 262144 (~256 Kbps)
};
FieldTypeDefaultDescriptionRange
Widthint321920Video width in pixels640-3840
Heightint321080Video height in pixels480-2160
Framerateint3230Frames per second15-120
VideoBitrateint322 << 20 (2097152)Video bitrate in bps500k-100M
Samplerateint3248000Audio sample rate in Hz44100, 48000
AudioBitrateint32256 << 10 (262144)Audio bitrate in bps64k-512k
Common use:
// HD recording at 60 FPS
FLCKRecorderParams Params;
Params.Width = 1920;
Params.Height = 1080;
Params.Framerate = 60;
Params.VideoBitrate = 12 << 20;  // 12 Mbps
Params.AudioBitrate = 256000;   // 256 Kbps

Recorder->SetupRecorder(Params, CaptureComponent);

FLCKRecordingProfileSettings

What it’s for: Predefined quality profiles (configured in Project Settings)
USTRUCT(BlueprintType)
struct FLCKRecordingProfileSettings
{
    GENERATED_BODY()
    
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
    int32 Width = 1280;
    
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
    int32 Height = 720;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "15", ClampMax = "120"))
    int32 Framerate = 30;
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "500000", ClampMax = "100000000"))
    int32 VideoBitrate = 4000000;  // 4 Mbps
    
    UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ClampMin = "64000", ClampMax = "512000"))
    int32 AudioBitrate = 128000;   // 128 Kbps
    
    UPROPERTY(BlueprintReadOnly)
    int32 Samplerate = 48000;
};
Typical profiles:
QualityResolutionBitrateFPSUse Case
SD1280×7204 Mbps30Mobile, performance mode
HD1920×108012 Mbps60Standard quality
2K2560×144020 Mbps60High quality
4K3840×216035 Mbps60Maximum quality (PC only)

Camera Mode Settings

FLCKSelfieModeDefaults

What it’s for: Default settings for Selfie camera mode
USTRUCT(BlueprintType)
struct FLCKSelfieModeDefaults
{
    GENERATED_BODY()
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "20.0", ClampMax = "120.0"))
    float FOV = 80.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.0", ClampMax = "100.0"))
    float Smoothness = 50.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.5", ClampMax = "10.0"))
    float FollowDistance = 2.0f;
    
    UPROPERTY(EditAnywhere)
    bool bFollowEnabled = false;
};
FieldTypeDefaultDescriptionRange
FOVfloat80.0Field of view in degrees20-120
Smoothnessfloat50.0Camera movement smoothing0-100
FollowDistancefloat2.0Distance from player in meters0.5-10.0
bFollowEnabledboolfalseAuto-follow player movement-
Example:
// Selfie mode with auto-follow
FLCKSelfieModeDefaults Selfie;
Selfie.FOV = 75.0f;
Selfie.Smoothness = 60.0f;
Selfie.FollowDistance = 1.5f;
Selfie.bFollowEnabled = true;

FLCKFirstPersonModeDefaults

What it’s for: Default settings for First Person camera mode
USTRUCT(BlueprintType)
struct FLCKFirstPersonModeDefaults
{
    GENERATED_BODY()
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "20.0", ClampMax = "120.0"))
    float FOV = 90.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.0", ClampMax = "100.0"))
    float Smoothness = 75.0f;
};
FieldTypeDefaultDescription
FOVfloat90.0Field of view (wider for FPS)
Smoothnessfloat75.0Camera lag for head movement
Typical values:
  • Low smoothness (0-30): Sharp, responsive (competitive FPS)
  • Medium smoothness (40-70): Balanced (standard FPS)
  • High smoothness (80-100): Cinematic feel (story-driven)

FLCKThirdPersonModeDefaults

What it’s for: Default settings for Third Person camera mode
USTRUCT(BlueprintType)
struct FLCKThirdPersonModeDefaults
{
    GENERATED_BODY()
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "20.0", ClampMax = "120.0"))
    float FOV = 90.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.0", ClampMax = "100.0"))
    float Smoothness = 100.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "0.5", ClampMax = "10.0"))
    float Distance = 2.0f;
    
    UPROPERTY(EditAnywhere, meta = (ClampMin = "-90.0", ClampMax = "90.0"))
    float PitchAngle = -30.0f;
};
FieldTypeDefaultDescription
FOVfloat90.0Field of view
Smoothnessfloat100.0Camera lag (very smooth)
Distancefloat2.0Distance behind player in meters
PitchAnglefloat-30.0Vertical angle (-90 to +90 degrees)
Example:
// Over-the-shoulder camera
FLCKThirdPersonModeDefaults ThirdPerson;
ThirdPerson.FOV = 85.0f;
ThirdPerson.Distance = 1.5f;
ThirdPerson.PitchAngle = -20.0f;  // Slightly above shoulder
ThirdPerson.Smoothness = 90.0f;

UI Interaction Data

FLCKTapData

What it’s for: Touch/pointer interaction event data from UI buttons
USTRUCT()
struct LCKUI_API FLCKTapData
{
    GENERATED_BODY()
    
    UPROPERTY()
    FVector ButtonLocation = FVector::ZeroVector;
    
    UPROPERTY()
    FVector ButtonRightVector = FVector::ZeroVector;
    
    UPROPERTY()
    FVector ButtonForwardVector = FVector::ZeroVector;
    
    UPROPERTY()
    FVector TapLocation = FVector::ZeroVector;
    
    UPROPERTY()
    bool IsPressed = false;
};
FieldTypeDescription
ButtonLocationFVectorWorld position of the button
ButtonRightVectorFVectorButton’s local right direction
ButtonForwardVectorFVectorButton’s local forward direction
TapLocationFVectorWorld position of tap/click
IsPressedboolWhether button is currently pressed
When you’ll see this: Inside button interaction callbacks
Button->OnTapStarted.AddDynamic(this, &AMyActor::HandleButtonTap);

void AMyActor::HandleButtonTap(const FLCKTapData& TapData)
{
    UE_LOG(LogTemp, Log, TEXT("Button at %s pressed"), 
        *TapData.ButtonLocation.ToString());
}

UI Styling

FLCKColor

What it’s for: Standard color palette for LCK UI components
USTRUCT()
struct LCKUI_API FLCKColor
{
    static constexpr FColor Primary         {8, 8, 8};       // #080808
    static constexpr FColor PrimaryText     {220, 220, 220}; // #DCDCDC
    static constexpr FColor Secondary       {16, 16, 16};    // #101010
    static constexpr FColor Disabled        {96, 96, 96};    // #606060
    static constexpr FColor ButtonDefault   {40, 40, 40};    // #282828
    static constexpr FColor ButtonIconDefault {220, 220, 220}; // #DCDCDC
    static constexpr FColor ButtonActive    {94, 69, 255};   // #5E45FF
    static constexpr FColor Debug           {255, 0, 255};   // #FF00FF
    static constexpr FColor Alert           {255, 42, 42};   // #FF2A2A
    static constexpr FColor Success         {32, 196, 64};   // #20C440
    static constexpr FColor White           {255, 255, 255}; // #FFFFFF
    static constexpr FColor Black           {0, 0, 0};       // #000000
};
ColorRGBHexUse Case
Primary(8, 8, 8)#080808Main background
PrimaryText(220, 220, 220)#DCDCDCPrimary text
Secondary(16, 16, 16)#101010Secondary background
Disabled(96, 96, 96)#606060Disabled UI elements
ButtonDefault(40, 40, 40)#282828Default button color
ButtonActive(94, 69, 255)#5E45FFActive/pressed button
Alert(255, 42, 42)#FF2A2ARecording indicator, errors
Success(32, 196, 64)#20C440Success state
Example usage:
// Set button color based on state
if (bIsRecording)
{
    ButtonMaterial->SetVectorParameterValue(
        TEXT("BaseColor"), 
        FLinearColor(FLCKColor::Alert)
    );
}
else
{
    ButtonMaterial->SetVectorParameterValue(
        TEXT("BaseColor"), 
        FLinearColor(FLCKColor::ButtonDefault)
    );
}

Audio Channel Bitmask

TLCKAudioChannelsMask

What it’s for: Combine multiple audio channels using bitwise operations
typedef uint64 TLCKAudioChannelsMask;
Usage:
// Combine game audio + microphone
TLCKAudioChannelsMask Channels = 
    ELCKAudioChannel::Game | ELCKAudioChannel::Microphone;

// Check if mask contains microphone
bool HasMic = (Channels & ELCKAudioChannel::Microphone) != 0;

// Start capture with both channels
AudioSource->StartCapture(Channels);
Common combinations:
// Game audio only
TLCKAudioChannelsMask GameOnly = ELCKAudioChannel::Game;

// Microphone only
TLCKAudioChannelsMask MicOnly = ELCKAudioChannel::Microphone;

// Game + Mic (typical recording)
TLCKAudioChannelsMask Standard = 
    ELCKAudioChannel::Game | ELCKAudioChannel::Microphone;

// Game + Mic + Voice chat
TLCKAudioChannelsMask AllChannels = 
    ELCKAudioChannel::Game | 
    ELCKAudioChannel::Microphone | 
    ELCKAudioChannel::VoiceChat;

Button UI Types

ELCKButtonType

What it’s for: Define button shape and size for 3D UI
UENUM(BlueprintType)
enum class ELCKButtonType : uint8
{
    Square      UMETA(DisplayName = "Square"),
    Rectangle   UMETA(DisplayName = "Rectangle"),
    Tab         UMETA(DisplayName = "Tab"),
    Selector    UMETA(DisplayName = "Selector")
};
TypeBox Extent (cm)Aspect RatioUse Case
Square(0.4, 2.4, 2.4)1:1Icons, single-action buttons
Rectangle(0.4, 6.0, 2.4)2.5:1Text buttons, labels
Tab(0.4, 4.4, 2.4)1.83:1Tab navigation
Selector(2.4, 4.4, 0.8)5.5:1Sliders, selectors

Complete Configuration Example

void AMyRecorder::SetupRecording()
{
    // 1. Configure recorder params
    FLCKRecorderParams Params;
    Params.Width = 1920;
    Params.Height = 1080;
    Params.Framerate = 60;
    Params.VideoBitrate = 10 << 20;  // 10 Mbps
    Params.AudioBitrate = 256000;    // 256 Kbps
    
    // 2. Set up camera mode
    FLCKThirdPersonModeDefaults ThirdPerson;
    ThirdPerson.FOV = 85.0f;
    ThirdPerson.Distance = 2.0f;
    ThirdPerson.PitchAngle = -25.0f;
    ThirdPerson.Smoothness = 90.0f;
    
    // 3. Configure audio channels
    TLCKAudioChannelsMask Channels = 
        ELCKAudioChannel::Game | ELCKAudioChannel::Microphone;
    
    // 4. Start recording
    ULCKRecorderSubsystem* Recorder = GetWorld()->GetSubsystem<ULCKRecorderSubsystem>();
    Recorder->SetupRecorder(Params, CaptureComponent);
    Recorder->StartRecording();
}

Audio Source Channel Presets

FLCKAudioSourceChannels

What it’s for: Default channel configuration enabling both microphone and game audio capture.
USTRUCT(BlueprintType)
struct FLCKAudioSourceChannels
{
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    bool bMicrophoneEnabled = true;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    bool bGameAudioEnabled = true;
};
FieldTypeDefaultDescription
bMicrophoneEnabledbooltrueEnable microphone capture
bGameAudioEnabledbooltrueEnable game audio capture

FLCKAudioSourceGameOnly

What it’s for: Channel preset for sources that only provide game audio (e.g., FMOD, Wwise).
USTRUCT(BlueprintType)
struct FLCKAudioSourceGameOnly
{
    GENERATED_BODY()

    UPROPERTY(Config, EditAnywhere, BlueprintReadWrite, Category = "Audio")
    bool bGameAudioEnabled = true;
};
FieldTypeDefaultDescription
bGameAudioEnabledbooltrueEnable game audio capture

FLCKAudioSourceMicOnly

What it’s for: Channel preset for sources that only provide microphone input (e.g., Oboe on Android).
USTRUCT(BlueprintType)
struct FLCKAudioSourceMicOnly
{
    GENERATED_BODY()

    UPROPERTY(Config, EditAnywhere, BlueprintReadWrite, Category = "Audio")
    bool bMicrophoneEnabled = true;
};
FieldTypeDefaultDescription
bMicrophoneEnabledbooltrueEnable microphone capture

FLCKAudioSourceVoiceChat

What it’s for: Channel preset for voice chat sources that capture microphone and incoming voice audio (e.g., Vivox).
USTRUCT(BlueprintType)
struct FLCKAudioSourceVoiceChat
{
    GENERATED_BODY()

    UPROPERTY(Config, EditAnywhere, BlueprintReadWrite, Category = "Audio")
    bool bMicrophoneEnabled = true;

    UPROPERTY(Config, EditAnywhere, BlueprintReadWrite, Category = "Audio")
    bool bVoiceAudioEnabled = true;
};
FieldTypeDefaultDescription
bMicrophoneEnabledbooltrueOutgoing microphone capture
bVoiceAudioEnabledbooltrueIncoming voice chat audio

Audio Configuration Validation

FLCKAudioConfigValidation

What it’s for: Result of validating the current audio plugin configuration. Returned by the audio system to report issues such as missing microphone sources or duplicate game audio plugins.
USTRUCT(BlueprintType)
struct FLCKAudioConfigValidation
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    bool bIsValid = true;

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    TArray<FString> Warnings;

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    ELCKGameAudioType ActiveGameAudio = ELCKGameAudioType::None;

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    bool bHasMicrophoneSource = false;

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    int32 MicrophoneSourceCount = 0;

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    TArray<FString> EnabledMicrophoneSources;
};
FieldTypeDefaultDescription
bIsValidbooltrueWhether the audio config is valid for recording
WarningsTArray<FString>[]Human-readable warning messages
ActiveGameAudioELCKGameAudioTypeNoneThe active game audio middleware type
bHasMicrophoneSourceboolfalseWhether at least one mic source is available
MicrophoneSourceCountint320Number of registered microphone sources
EnabledMicrophoneSourcesTArray<FString>[]Names of all enabled microphone sources
Common use:
FLCKAudioConfigValidation Validation = AudioSystem->ValidateConfig();

if (!Validation.bIsValid)
{
    for (const FString& Warning : Validation.Warnings)
    {
        UE_LOG(LogLCK, Warning, TEXT("Audio config: %s"), *Warning);
    }
}

Audio Plugin Info

FLCKAudioPluginInfo

What it’s for: Describes a registered audio plugin and its capabilities. Used by the audio system to enumerate available plugins at runtime.
USTRUCT(BlueprintType)
struct FLCKAudioPluginInfo
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    FString ModuleName;

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    FString DisplayName;

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    bool bIsLoaded = false;

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    bool bMicrophoneEnabled = false;

    UPROPERTY(BlueprintReadOnly, Category = "LCK")
    bool bGameAudioEnabled = false;
};
FieldTypeDefaultDescription
ModuleNameFString""Module name (e.g., "LCKFMOD")
DisplayNameFString""Human-readable name (e.g., "FMOD Studio")
bIsLoadedboolfalseWhether the module is currently loaded
bMicrophoneEnabledboolfalsePlugin supports microphone capture
bGameAudioEnabledboolfalsePlugin supports game audio capture

Telemetry Types

FLCKTelemetryValue

What it’s for: A variant value type used in telemetry events to hold different data types in a single field.
USTRUCT(BlueprintType)
struct FLCKTelemetryValue
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
    int32 IntValue = 0;

    UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
    float FloatValue = 0.0f;

    UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
    FString StringValue;

    UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
    bool BoolValue = false;

    UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
    uint8 ValueType = 0; // 0 = Int, 1 = Float, 2 = String, 3 = Bool
};
FieldTypeDefaultDescription
IntValueint320Integer payload (used when ValueType == "Int")
FloatValuefloat0.0Float payload (used when ValueType == "Float")
StringValueFString""String payload (used when ValueType == "String")
BoolValueboolfalseBoolean payload (used when ValueType == "Bool")
ValueTypeuint80Discriminator: 0 = Int, 1 = Float, 2 = String, 3 = Bool

FLCKTelemetryEvent

What it’s for: Represents a single telemetry event with a type identifier and a map of contextual key-value pairs.
USTRUCT(BlueprintType)
struct FLCKTelemetryEvent
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
    ELCKTelemetryEventType EventType = ELCKTelemetryEventType::GameInitialized;

    UPROPERTY(BlueprintReadWrite, Category = "LCK Telemetry")
    TMap<FString, FLCKTelemetryValue> Context;
};
FieldTypeDefaultDescription
EventTypeELCKTelemetryEventTypeGameInitializedEvent type enum value
ContextTMap<FString, FLCKTelemetryValue>{}Key-value pairs of event metadata
Common use:
FLCKTelemetryEvent Event;
Event.EventType = ELCKTelemetryEventType::RecordingStarted;

FLCKTelemetryValue ResolutionValue;
ResolutionValue.StringValue = TEXT("1920x1080");
ResolutionValue.ValueType = 2; // String
Event.Context.Add(TEXT("Resolution"), ResolutionValue);

Key Takeaways

FLCKRecorderParams — Configure video/audio quality
Camera mode structs — Customize camera behavior (FOV, smoothness, distance)
FLCKTapData — Handle UI button interactions
FLCKColor — Use standard color palette for consistency
TLCKAudioChannelsMask — Combine audio channels with bitwise OR
Audio channel presets — FLCKAudioSourceChannels, GameOnly, MicOnly, VoiceChat
FLCKAudioConfigValidation — Validate audio plugin configuration before recording
FLCKAudioPluginInfo — Enumerate registered audio plugins at runtime
Telemetry types — FLCKTelemetryValue and FLCKTelemetryEvent for analytics