# Screen Recording Requirements (Auto-Update Build) [External-facing] - [Client Device Requirements](#clientdevicerequirements) - [Operating System](#operatingsystem) - [GPU Requirements](#gpurequirements) - [Hardware](#hardware) - [Bandwidth](#bandwidth) - [Storage](#storage) - [Fallback for Environments Without GPU](#fallbackforenvironmentswithoutgpu) - [Display Resolution](#displayresolution) - [Server Requirements](#serverrequirements) - [Firewall Whitelisting](#firewallwhitelisting) - [APPENDIX FOR SETUP BELOW](#appendixforsetup-below) - [Step 1: Removing older app versions](#step1removingolderappversions) - [Step 2: Installation](#step2installation) - [Windows](#windows) - [Mac OS](#macos) - [Step 3: Launch the App](#step3launchtheapp) - [Error State](#errorstate) - [Troubleshooting](#troubleshooting) * * * # Client Device Requirements ## Operating System **Windows** - Windows 10 (64-bit) – Version 1809 or later - Windows 11 (64-bit) – Any version - Windows Server 2019 / 2022 – With Desktop Experience ## GPU Requirements - DirectX 11–compatible GPU (Required for screen capture) - **Minimum VRAM**: 512 MB - **Driver**: WDDM 1.2 or later ## Hardware - 8 GB of RAM - **Windows:** 4 Core processor (Intel Core i5 or later) ## Bandwidth - Minimum Upload/Download Speed: 5Mbps ## Storage - Installation size: ~300MB - Additional disk storage required: ~30 MB ## Fallback for Environments Without GPU **Using GDI Screen Capture (gdiscreencapsrc)** - If DirectX 11 is not available (for example, in VMs, VDIs, or older systems), the application can fall back to GDI-based screen capture. **Benefits of GDI Fallback** - Works on all Windows systems (VM, VDI, or physical) - No GPU requirement - Works in RDP/Remote Desktop sessions - Compatible with standard cloud VMs - Supported in VDI environments **Tradeoffs of GDI Fallback** - **Note**: CPU Usage may vary from `10%` to `35%` depending upon the number of monitors and the resolution of the monitors being recorded. ## Display Resolution It is recommended that agents use the ***default screen resolution*** on their device. * * * # Server Requirements ## Firewall Whitelisting | **DNS** | **Port** | **Reason for Whitelisting** | | --- | --- | --- | | api-us3.pusher.com | 443 | triggers for starting/stoping recording | | wss://ws-us3.pusher.com | 443 | triggers for starting/stoping recording | | http-intake.logs.datadoghq.com | 443 | for sending app activity information to datadog | | prod-api.thelevel.ai | 443 | Level APIs for authorising user | | screen-case.thelevel.ai | 443 | For starting and stopping the recording | | screen.thelevel.ai | 1935, 1936 | For streaming the recording to our servers | | https://screen-app.thelevel.ai | 443 | For checking the network | | [sr-releases.thelevel.ai](https://sr-releases.thelevel.ai/) | 443 | For autoupdate to work | | https://screen-app-v3.thelevel.ai | 443 | For the app UI | | https://sr-platform.thelevel.ai | 443 | For getting configuration specific to organisation. | | `https://launchdarkly.thelevel.ai` | 443 | For customising app behaviour for different customers | | `https://stream.launchdarkly.com` | 443 | For customising app behaviour for different customers | | `https://sdk.launchdarkly.com` | 443 | For customising app behaviour for different customers | | `https://events.launchdarkly.com` | 443 | For customising app behaviour for different customers | | `https://api.mixpanel.com` | 443 | For getting analytics events | | `https://api-eu.mixpanel.com` | 443 | For getting analytics events | | `https://api-in.mixpanel.com` | 443 | For getting analytics events | | `storage.googleapis.com` | 443 | For downloading the app updates | For app versions <=3.0.12, certain optimizely URLs might need to be whitelisted. If you are on a later version, the above list is sufficient. * * * # APPENDIX FOR SETUP BELOW * * * # Step 1: Removing older app versions *Note: The script is designed to be executed with admin level privilege in PowerShell Integrated Scripting Environment (ISE), It is recommended to be executed via the MDM software.* 1. Copy the following script - ```powershell # Run as Administrator to access all user directories $adminCheck = [System.Security.Principal.WindowsIdentity]::GetCurrent() $adminRole = [System.Security.Principal.WindowsPrincipal]::new($adminCheck) if (-not $adminRole.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) { Write-Host "Please run this script as Administrator!" -ForegroundColor Red exit } # Define the application name $appName = "Level Screen Recorder" # Get all user directories in C:\Users $userProfiles = Get-ChildItem -Path "C:\Users" -Directory | Select-Object -ExpandProperty FullName # Search for the product in both 32-bit and 64-bit registry paths $uninstallKeys = @( "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" ) # Function to find all product codes for applications matching the name function Get-ProductCodes { $productCodes = @() foreach ($keyPath in $uninstallKeys) { $installedApps = Get-ItemProperty -Path $keyPath -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -like "*$appName*" } foreach ($app in $installedApps) { # Extract only the GUID (ProductCode) without .msq $productCode = $app.PSChildName -replace '\.msq$', '' $productCodes += $productCode } } return $productCodes } # Function to uninstall MSI version function Uninstall-MSI { $productCodes = Get-ProductCodes if ($productCodes.Count -gt 0) { foreach ($productCode in $productCodes) { Write-Host "Uninstalling MSI application with Product Code: $productCode" $exitCode = Start-Process -FilePath "msiexec.exe" -ArgumentList "/x $productCode /qn" -Wait -PassThru if ($exitCode.ExitCode -eq 0) { Write-Host "Uninstalled successfully: $productCode" } else { Write-Host "Failed to uninstall: $productCode with Exit Code: $($exitCode.ExitCode)" } } } else { Write-Host "No MSI installations found for $appName." } } # Function to uninstall Squirrel-based app function Uninstall-SquirrelApp { param ([string]$appFolderPath) $uninstallerPath = [System.IO.Path]::Combine($appFolderPath, "Update.exe") if (Test-Path $uninstallerPath) { Write-Host "Uninstalling Squirrel-based application from: $uninstallerPath" Start-Process $uninstallerPath -ArgumentList "--uninstall" -Wait } else { Write-Host "Squirrel uninstaller not found at: $uninstallerPath" } } # Function to delete a folder function Delete-Folder { param ([string]$folderPath) if (Test-Path $folderPath) { try { Remove-Item -Path $folderPath -Recurse -Force Write-Host "Deleted folder: $folderPath" } catch { Write-Host "Failed to delete: $folderPath - $_" } } } # Function to delete application shortcuts function Delete-Shortcuts { param ([string]$userProfile) $desktopShortcut = "$userProfile\Desktop\Level Screen Recorder.lnk" $startMenuShortcut = "$userProfile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\levelAI\Level Screen Recorder.lnk" if (Test-Path $desktopShortcut) { Remove-Item -Path $desktopShortcut -Force Write-Host "Removed desktop shortcut: $desktopShortcut" } if (Test-Path $startMenuShortcut) { Remove-Item -Path $startMenuShortcut -Force Write-Host "Removed start menu shortcut: $startMenuShortcut" } } # Kill running application process $process = Get-Process -Name "Level Screen Recorder" -ErrorAction SilentlyContinue if ($process) { Stop-Process -Name "Level Screen Recorder" -Force Write-Host "Stopped running instance of Level Screen Recorder" } # Uninstall MSI-based installation Uninstall-MSI # Iterate through all user directories foreach ($userProfile in $userProfiles) { try { Write-Host "`nProcessing user profile: $userProfile" -ForegroundColor Cyan $userAppDataLocal = "$userProfile\AppData\Local" $installPaths = @("$userAppDataLocal\LevelAI", "$userAppDataLocal\com") foreach ($installPath in $installPaths) { $appExe = [System.IO.Path]::Combine($installPath, "Level Screen Recorder.exe") if (Test-Path $appExe) { Write-Host "Found Level Screen Recorder in: $installPath" Uninstall-SquirrelApp -appFolderPath $installPath if (-not (Test-Path $appExe)) { Write-Host "Uninstalled successfully from: $installPath" Delete-Folder -folderPath $installPath } else { Write-Host "Uninstallation failed for: $installPath" } } } # Remove desktop and start menu shortcuts Delete-Shortcuts -userProfile $userProfile } catch { Write-Host "Error processing user profile $userProfile : $_" -ForegroundColor Red continue } } # Handle Default User separately $defaultUserPaths = @( "C:\Users\Default\AppData\Local\LevelAI", "C:\Users\Default\AppData\Local\com" ) foreach ($path in $defaultUserPaths) { $defaultAppExe = [System.IO.Path]::Combine($path, "Level Screen Recorder.exe") if (Test-Path $defaultAppExe) { Write-Host "Found Level Screen Recorder in: $path" Uninstall-SquirrelApp -appFolderPath $path if (-not (Test-Path $defaultAppExe)) { Write-Host "Uninstalled successfully from: $path" Delete-Folder -folderPath $path } else { Write-Host "Uninstallation failed for: $path" } } } Write-Host "Cleanup and uninstallation process complete!" ``` 2. Paste it in the MDM software or admin level PowerShell Integrated Scripting Environment (ISE) on the agent's system. It will completely remove the app from the system post which new app can be deployed. 3. Post the script execution, opening the Control Panel → Add or remove programs should not list any item with the name matching **"Level Screen Recorder".** ![Screenshot 2025-01-28 152014.png](./attachments/Screenshot%202025-01-28%20152014.png) 4. State in the picture shown above marks the successful uninstallation of the old app and new app can be safely installed. # Step 2: Installation **Important**: Agent will need admin access on their device to install the application* ## Windows ### **Important**: If the *Windows registry* edit permission is disabled for your organization, Please refer to the [Troubleshooting](#troubleshooting) section 1. Navigate to this link and choose **Windows** in platform dropdown if not already selected and click download icon. 2. After the download, You should have a file named - **Level Screen Recorder Deployment Tool 4.x.x.msi**. 3. Deploy **Level Screen Recorder Deployment Tool 4.x.x.msi** centrally to the agent's machines. After installation, The control panel in the agent's machine would show the installed deployment tool like this![](./attachments/AD_4nXfUVHJEZrLmxP8SFP_9QCjLTNAEnDM7gkOD8NuY6V-CWpS7Xh9W3B5Nfinzfy9D25wPR_NhPhGY5SzRZTo8aHzWVBp8ZN9fpQNGHyULf4p-omdXhcnCqB4IZVWuyCvm1HiSBfm4%3Fkey=otetC0Y8vIbZpCKJWXl5lfaw) 4. If the **Level Screen Recorder Deployment Tool** is visible in the control panel, then the **Level Screen Recorder** app will be deployed whenever the agent will login to the system next. 5. If the agent is already logged in, he will have to restart or cycle the signing out and signing in once for the app to get installed. A maximum of **5 minutes** can be taken for the app to be installed after the system restart. After the app installation, The control panel on the agent's machine will look like this - ![](./attachments/AD_4nXeuj0kuUUlEr6ybNQB5DVqTiKh911NLuys2DAx2k4ITeD5r5-_ZS9hazf9dGoZqKCPuzy5Ll-LswCPlSU-0ovp6BceKlrHxH7_cb-dpk4_XwO1bTV-P1S9D-jz-2tGDgQOsZmAR%3Fkey=otetC0Y8vIbZpCKJWXl5lfaw) 6. **Level Screen Recorder** shortcut can also be seen on the desktop in the last screenshot. 7. Double click the **Level Screen Recorder** shortcut on the desktop to launch the app. Post this, the app will be launched automatically on system login. 8. If in an unlikely situation, Where the app is visible in the control panel but not on desktop. Please contact the Level AI team for further assistance. ## Mac OS 1. Navigate to this link and choose **macOS** in platform dropdown if not already selected and click the download icon based on the Mac architecture. ![macos-download.png](./attachments/mac-download.png) 2. After the download, You should have a file named - **Level Screen Recorder 3.x.x.dmg**. 3. Double click the **Level Screen Recorder 3.x.x.dmg** and drag **Level Screen Recorder** to the Applications folder. 4. Open the **Level Screen Recorder** application from the Applications folder and post that the app will be launched automatically on system login. * * * # Step 3: Launch the App **Note**: Screenshots can differ slightly from the actual UI of the app. 1. After successful installation and launch, the application would request for the 'Organisation' Name (ask your admin if you don't know this) (e.g. For Level AI, It is `level`) ![](./attachments/2_1.png) 2. Proceed to the Login page, and provide your credentials or use available SSO. 3. ![](./attachments/image-20230718-132148.png) You should be greeted with a 'Status Page' below ![](./attachments/Screenshot%202023-11-06%20at%207.59.35%20PM.png) ![](./attachments/image-20230718-132000.png) * * * # Error State If the application encounters an error of any sort, the recorder stops and displays an error message. ![](./attachments/2_E.png) # Troubleshooting 1. If the Windows registry edit permission is disabled for your organization, Kindly run the following script centrally with admin privilege to enable the auto app installation, This script requires write access to `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup` directory to create an auto-install shortcut. The agents will also need to have read and execute permissions on the `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup` directory to auto-install the app. ```powershell $shortcutName = "LevelAIDeploymentTool.lnk" $targetPath = "C:\Program Files (x86)\Level Screen Recorder Deployment\LevelAIDeploymentTool.exe" $startupFolder = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" $shortcutPath = Join-Path -Path $startupFolder -ChildPath $shortcutName # Create WScript Shell COM object and create shortcut try { $WshShell = New-Object -ComObject WScript.Shell $Shortcut = $WshShell.CreateShortcut($shortcutPath) $Shortcut.TargetPath = $targetPath $Shortcut.Arguments = "--checkInstall" $Shortcut.WorkingDirectory = "C:\Program Files (x86)\Level Screen Recorder Deployment" $Shortcut.Description = "Launch LevelAIDeploymentTool at startup" $Shortcut.Save() if (Test-Path $shortcutPath) { Write-Host "Shortcut created successfully in ProgramData StartUp: $shortcutPath" -ForegroundColor Green } else { throw "Shortcut file not found after creation attempt" } } catch { Write-Host "Error: Failed to create shortcut in ProgramData StartUp. Details: $_" -ForegroundColor Red Write-Host "Path attempted: $shortcutPath" -ForegroundColor Yellow } ``` 2. If you are using group policy that can restrict the app from auto starting on the system login, Make sure to whitelist the following startup shortcut to be executed: - `C:\Users\\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\LevelScreenRecorder.lnk`